文章目录
QLineEdit(单行输入)
QTextEdit(多行输入) QComboBox(下拉框)
QSpinBox & QDoubleSpinBox(数字微调框) QDateEdit & QTimeEdit & QDateTimeEdit(日期微调框)
QDial(旋钮)
QSlider(滑动条)
QLineEdit(单行输入)
属性 说明 text 输入框中的文本 inputMask 输入内容格式约束 maxLength 最大长度 frame 是否添加边框 echoMode 显示方式:QLineEdit::Normal:默认值,文本框会显示输入的文本;QLineEdit::Password:输入的字符会隐藏;QLineEdit::NoEcho:文本框不会显示任何字符 cursorPosition 光标所在位置 alignment 文字对齐方式 dragEnabled 是否允许拖拽 readOnly 是否是只读,不可修改 placeHolderText 当输入框为空时显示的提示信息 clearButtonEnabled 是否会自动显示清除按钮
信号 说明 void cursorPositionChanged(int old, int new) 鼠标移动时触发,old为之前的位置,new为现位置 void editingFinished() 触发条件:按返回键、回车键;行编辑失去焦点 void returnPressed() 按返回键、回车键时触发,如果设置了验证器需要通过验证才会触发 void selectionChanged() 选中的文本改变时触发 void textChanged(const QString &text) 当文本改变时触发,text是新的文本,代码形式修改文本也会触发 void textEdited(const QString &text)) 当文本改变时触发,text是新的文本,代码形式修改文本不会触发
QLineEdit * e1 = new QLineEdit ( this ) ;
QLineEdit * e2 = new QLineEdit ( this ) ;
QLineEdit * e3 = new QLineEdit ( this ) ;
QLabel * l = new QLabel ( this ) ;
QLabel * l1 = new QLabel ( this ) ;
QLabel * l2 = new QLabel ( this ) ;
QLabel * l3 = new QLabel ( this ) ;
QLabel * l4 = new QLabel ( this ) ;
QRadioButton * b1 = new QRadioButton ( this ) ;
QRadioButton * b2 = new QRadioButton ( this ) ;
QPushButton * b = new QPushButton ( this ) ;
l-> setGeometry ( 50 , 150 , 100 , 100 ) ; l-> setWordWrap ( true ) ;
l1-> setText ( "姓名" ) ;
l2-> setText ( "密码" ) ; l2-> move ( 0 , 30 ) ;
l3-> setText ( "性别" ) ; l3-> move ( 0 , 60 ) ;
l4-> setText ( "电话" ) ; l4-> move ( 0 , 90 ) ;
e1-> move ( 40 , 0 ) ; e2-> move ( 40 , 30 ) ; e3-> move ( 40 , 90 ) ;
e2-> setEchoMode ( QLineEdit:: Password) ;
b1-> setText ( "男" ) ; b2-> setText ( "女" ) ;
b1-> move ( 40 , 60 ) ; b2-> move ( 80 , 60 ) ;
b-> setText ( "确定" ) ; b-> move ( 50 , 130 ) ;
connect ( b, & QPushButton:: clicked, this , [ = ] ( ) {
QString gender = "" ;
if ( b1-> isChecked ( ) ) gender = "男" ;
if ( b2-> isChecked ( ) ) gender = "女" ;
if ( gender == "" || e1-> text ( ) == "" || e2-> text ( ) == "" || e3-> text ( ) == "" )
{
l-> setText ( "请输入全部信息" ) ;
return ;
}
QString ret = "" ;
ret += "姓名:" ;
ret += e1-> text ( ) ;
ret += "\n密码:" ;
ret += e2-> text ( ) ;
ret += "\n性别:" ;
ret += gender;
ret += "\n电话:" ;
ret += e3-> text ( ) ;
l-> setText ( ret) ;
} ) ;
设置验证器
设置一个输入框只能输入数字,并且需要输入以1开头的11位数字下方的按钮才会启动点击
使用QRegExp创建一个正则表达式对象,使用QRegExpValidator创建一个验证器对象
QLineEdit * e = new QLineEdit ( this ) ;
QPushButton * b = new QPushButton ( this ) ;
b-> move ( 0 , 100 ) ; b-> setText ( "确认" ) ; b-> setEnabled ( false ) ;
e-> setValidator ( new QRegExpValidator ( QRegExp ( "^1\\d{10}$" ) ) ) ;
connect ( e, & QLineEdit:: textEdited, this , [ = ] ( const QString & arg1) {
QString content = arg1;
int pos = 0 ;
if ( e-> validator ( ) -> validate ( content, pos) == QValidator:: Acceptable)
b-> setEnabled ( true ) ;
else
b-> setEnabled ( false ) ;
} ) ;
可以看到明显的区别
QTextEdit(多行输入)
QTextEdit 表示多行输⼊框,也是⼀个富文本 & markdown 编辑器,并且能在内容超出编辑框范围时自动提供滚动条。
属性 说明 markdown 支持markdown格式,能自动对markdown文本进行渲染为html html 支持大部分html标签 placeHolderText 输入框为空时的提示内容 readOnly 是否只读 undoRedoEnable 是否开启 undo、redo 功能;ctrl+Z—undo;ctrl+Y—redo autoFormating 开启自动格式化 tabstopWidth 按下缩进占多少空间 overwriteMode 是否开启覆盖写模式 acceptRichText 是否接收富文本内容 verticalScrollBarPolicy 垂直方向滚动条的出现策略:Qt::ScrollBarAsNeeded:默认值,根据内容自动决定是否需要滚动条;Qt::ScrollBarAlwaysOff:总是关闭滚动条;Qt::ScrollBarAlwaysOn:总是显示滚动条 horizontalScrollBarPolicy 水平方向滚动条的出现策略:Qt::ScrollBarAsNeeded:默认值,根据内容自动决定是否需要滚动条;Qt::ScrollBarAlwaysOff:总是关闭滚动条;Qt::ScrollBarAlwaysOn:总是显示滚动条
信号 说明 textChanged() 文本内容改变时触发 selectionChanged() 选中范围改变时触发 cursorPositionChanged() 光标移动时出发 undoAvailable(bool) 可以进行undo操作时触发 redoAvailable(bool) 可以进行redo操作时触发 copyAvaiable(bool) 文本被选中或者取消选中时触发
QComboBox(下拉框)
属性 说明 currentText 当前选中的文本 currentIndex 当前选中的条目下标,没有选中条目则为-1 editable 是否允许修改,也可以设置验证器 iconSize 下拉框图标的大小 maxCount 条目最大数
方法 说明 addItem(const QString&) 添加条目 currentIndex() 获取当前选中的条目下标,没有选中条目则为-1 currentText() 获取当前条目的文本内容
信号 说明 activated(int) activated(const QString &text) 当选择了⼀个选项时触发,这个时候相当于点开下拉框并且鼠标划过某个选项还没有确认做出选择 currentIndexChanged(int) currentIndexChanged(const QString &text) 当前选项改变时触发,此时已经明确的选择了⼀个选项,用户操作或者通过程序操作都会触发这个信号 editTextChanged(const QString &text) 当编辑框中的文本改变时发出,需要editable为true时才有效
QComboBox * e1 = new QComboBox ( this ) ;
QComboBox * e2 = new QComboBox ( this ) ;
QComboBox * e3 = new QComboBox ( this ) ;
QLabel * l = new QLabel ( this ) ;
QLabel * l1 = new QLabel ( this ) ;
QLabel * l2 = new QLabel ( this ) ;
QLabel * l3 = new QLabel ( this ) ;
QPushButton * b = new QPushButton ( this ) ;
l-> setGeometry ( 50 , 100 , 100 , 100 ) ; l-> setWordWrap ( true ) ;
l1-> setText ( "主食" ) ;
l2-> setText ( "水果" ) ; l2-> move ( 0 , 30 ) ;
l3-> setText ( "饮料" ) ; l3-> move ( 0 , 60 ) ;
e1-> move ( 40 , 0 ) ; e2-> move ( 40 , 30 ) ; e3-> move ( 40 , 60 ) ;
b-> setText ( "确定" ) ; b-> move ( 20 , 90 ) ;
e1-> addItems ( QStringList ( { "米饭" , "面条" } ) ) ;
e2-> addItems ( QStringList ( { "苹果" , "西瓜" , "香蕉" } ) ) ;
e3-> addItems ( QStringList ( { "可乐" , "雪碧" } ) ) ;
connect ( b, & QPushButton:: clicked, this , [ = ] ( ) {
QString ret = "" ;
ret += "主食" ;
ret += e1-> currentText ( ) ;
ret += "\n水果:" ;
ret += e2-> currentText ( ) ;
ret += "\n饮料:" ;
ret += e3-> currentText ( ) ;
l-> setText ( ret) ;
} ) ;
通过读取文件设置条目
QComboBox * e = new QComboBox ( this ) ;
std:: ifstream file ( "d:/config.txt" ) ;
std:: string line;
while ( std:: getline ( file, line) )
{
e-> addItem ( QString :: fromStdString ( line) ) ;
}
file. close ( ) ;
QSpinBox & QDoubleSpinBox(数字微调框)
QSpinBox 或者 QDoubleSpinBox 表示"微调框",它是带有按钮的输入框,可以用来输⼊整数/浮点数,通过点击按钮来修改数值大小。
属性 说明 value 存储数值 singleStep 每次调整的步长 displayInteger 数字的进制,设为10就是十进制,2就是二进制 minimum 最小值 maximum 最大值 suffix 后缀 prefix 前缀 wrapping 是否允许换行 frame 是否带边框 alignment 文字对齐方式 readOnly 是否允许修改 buttonSymbol 按钮上的图标:UpDownArrows:上下箭头PlusMinus:加减号NoButtons:没有按钮 accelerated(加速) 按下按钮时是否为快速调整模式 correctionMode 输入有误时如何修正:QAbstractSpinBox::CorrectToPreviousValue:如果输入了无效值,则恢复成上一个有效值;QAbstractSpinBox::CorrectToNearestValue:如果输入了无效值,则恢复成离这个无效值最近的有效值 keyboardTrack 是否开启键盘跟踪:设为true:每次在输入框输入一个数字,都会触发一次valueChanged() 和 textChanged() 信号;设为false:只有在最终按下 enter 或者输入框失去焦点才会触发valueChanged() 和 textChanged() 信号
信号 说明 textChanged(QString) 文本发生改变时会触发,参数 QString 带有 前缀 和 后缀 valueChanged(int) 文本发生改变时会触发,参数 int 表示当前的数值
QComboBox * e1 = new QComboBox ( this ) ;
QComboBox * e2 = new QComboBox ( this ) ;
QComboBox * e3 = new QComboBox ( this ) ;
QSpinBox * s1 = new QSpinBox ( this ) ;
QSpinBox * s2 = new QSpinBox ( this ) ;
QSpinBox * s3 = new QSpinBox ( this ) ;
QLabel * l = new QLabel ( this ) ;
QLabel * l1 = new QLabel ( this ) ;
QLabel * l2 = new QLabel ( this ) ;
QLabel * l3 = new QLabel ( this ) ;
QPushButton * b = new QPushButton ( this ) ;
s1-> move ( 120 , 0 ) ; s2-> move ( 120 , 30 ) ; s3-> move ( 120 , 60 ) ;
l-> setGeometry ( 50 , 100 , 100 , 100 ) ; l-> setWordWrap ( true ) ;
l1-> setText ( "主食" ) ;
l2-> setText ( "水果" ) ; l2-> move ( 0 , 30 ) ;
l3-> setText ( "饮料" ) ; l3-> move ( 0 , 60 ) ;
e1-> move ( 40 , 0 ) ; e2-> move ( 40 , 30 ) ; e3-> move ( 40 , 60 ) ;
b-> setText ( "确定" ) ; b-> move ( 20 , 90 ) ;
e1-> addItems ( QStringList ( { "米饭" , "面条" } ) ) ;
e2-> addItems ( QStringList ( { "苹果" , "西瓜" , "香蕉" } ) ) ;
e3-> addItems ( QStringList ( { "可乐" , "雪碧" } ) ) ;
connect ( b, & QPushButton:: clicked, this , [ = ] ( ) {
QString ret = "" ;
ret += "主食:" ;
ret += e1-> currentText ( ) + " " + QString :: number ( s1-> value ( ) ) ;
ret += "\n水果:" ;
ret += e2-> currentText ( ) + " " + QString :: number ( s2-> value ( ) ) ;
ret += "\n饮料:" ;
ret += e3-> currentText ( ) + " " + QString :: number ( s3-> value ( ) ) ;
l-> setText ( ret) ;
} ) ;
QDateEdit & QTimeEdit & QDateTimeEdit(日期微调框)
QDateEdit 作为日期的微调框
QTimeEdit 作为时间的微调框
QDateTimeEdit 作为日期和时间一起的微调框
以QDateTimeEdit为例:
属性 说明 dateTime 时间和日期的值,形如 2000/1/1 0:00:00 date 单纯日期的值,形如 2001/1/1 time 单纯时间的值,形如 0:00:00 displayFormat 时间日期格式,形如 yyyy/M/d H:mm minimumDateTime 最小时间日期 maximumDateTime 最大时间日期 timeSpec Qt::LocalTime:显示本地时间Qt::UTC:显示协调世界时(UTC)Qt::OffsetFromUTC:显示相对于UTC的偏移量(时差)
信号 说明 dateChanged(QDate) 日期改变触发 timeChanged(QTime) 时间改变触发 dateTimeChanged(QDateTime) 时间日期任意一个改变时触发
时间计算器
QLabel * l = new QLabel ( this ) ; l-> setGeometry ( 50 , 100 , 100 , 100 ) ;
QDateTimeEdit * q1 = new QDateTimeEdit ( this ) ;
QDateTimeEdit * q2 = new QDateTimeEdit ( this ) ; q2-> move ( 0 , 30 ) ;
QPushButton * b = new QPushButton ( this ) ;
b-> setText ( "计算" ) ; b-> move ( 20 , 60 ) ;
connect ( b, & QPushButton:: clicked, this , [ = ] ( ) {
QDateTime t1 = q1-> dateTime ( ) ;
QDateTime t2 = q2-> dateTime ( ) ;
int days = t1. daysTo ( t2) ;
int hours = ( t1. secsTo ( t2) / 3600 ) % 24 ;
l-> setText ( QString :: number ( days) + "天;" +
QString :: number ( hours) + "时。" ) ;
} ) ;
QDial(旋钮)
属性 说明 value 当前数值 minimum 最小值 maximum 最大值 singleStep 按下方向键的时候改变的步长 pageStep 按下 pageUp / pageDown 的时候改变的步长 sliderPosition 界面上旋钮显示的初始位置 tracking 外观是否会跟踪数值变化 wrapping 是否允许循环调整,即值到最大时会回到最小 notchesVisible 是否显示刻度线 notchTarget 刻度线之间的相对位置,数字越大刻度线越稀疏
信号 说明 valueChanged(int) 数值改变时触发 rangeChanged(int, int) 范围变化时触发
通过旋钮改变不透明度
QLabel * l = new QLabel ( this ) ; l-> setGeometry ( 50 , 100 , 150 , 100 ) ;
QDial * d = new QDial ( this ) ;
d-> setWrapping ( true ) ;
d-> setNotchesVisible ( true ) ;
d-> setMaximum ( 100 ) ;
d-> setMinimum ( 0 ) ;
d-> setValue ( 100 ) ;
connect ( d, & QDial:: valueChanged, this , [ = ] ( int value) {
l-> setText ( QString ( "当前不透明度为: " ) + QString :: number ( value) ) ;
this -> setWindowOpacity ( ( double ) value / 100 ) ;
} ) ;
QSlider(滑动条)
属性 说明 value 当前数值 minimum 最小值 maximum 最大值 singleStep 按下方向键的时候改变的步长 pageStep 按下 pageUp / pageDown 的时候改变的步长 sliderPosition 滑动条显示的初始位置 tracking 外观是否会跟踪数值变化 orientation 滑动条的方向是水平还是垂直 invertedAppearance 是否要翻转滑动条的方向 tickPosition 刻度的位置 tickInterval 刻度的密集程度
信号 说明 valueChanged(int) 数值改变时触发 rangeChanged(int, int) 范围变化时触发
通过滑动条改变窗口大小
QSlider * x = new QSlider ( this ) ; x-> move ( 100 , 100 ) ;
QSlider * y = new QSlider ( this ) ; y-> move ( 100 , 200 ) ;
x-> setMinimum ( 800 ) ; x-> setMaximum ( 1200 ) ;
y-> setMinimum ( 600 ) ; y-> setMaximum ( 1000 ) ;
x-> setSingleStep ( 50 ) ; y-> setSingleStep ( 50 ) ;
x-> setValue ( 800 ) ; y-> setValue ( 600 ) ;
x-> setOrientation ( Qt:: Orientation:: Horizontal) ;
y-> setOrientation ( Qt:: Orientation:: Vertical) ;
y-> setInvertedAppearance ( true ) ;
connect ( x, & QSlider:: valueChanged, this , [ = ] ( int value) {
QRect rect = now-> geometry ( ) ;
now-> setGeometry ( rect. x ( ) , rect. y ( ) , value, rect. height ( ) ) ;
} ) ;
connect ( y, & QSlider:: valueChanged, this , [ = ] ( int value) {
QRect rect = now-> geometry ( ) ;
now-> setGeometry ( rect. x ( ) , rect. y ( ) , rect. width ( ) , value) ;
} ) ;