目录
QLineEdit
例子:
正则表达式对象、验证器对象
例子:
例子:
QTextEdit
例子:
QComboBox
例子:
QSpinBox
例子:
QDateTimeEdit
例子:
QDial
例子:
QSlider
例子:
QLineEdit
表示单行输入框,可以输入一段文本,不可以换行。
核心属性(可以通过代码方式设置,也可以通过界面方式设置这些属性):
text:输入框的文本。
inputMask:输入文本的格式约束。
maxLength:输入文本的最大长度。
frame:边框。
echoMode:文本的显示方式。
QLineEdit::Normal:QLineEdit的默认文本显示方式。输入框会显示输入的文本。
QLineEdit::Password:输入框会隐藏的输入的文本,通常用*或=代替已输入的文本。
QLineEdit::NoEcho:输入框不会显示输入的文本。
cursorPosition:光标所
alignment:文本对齐方式
dragEnabled:
readOnly:文本是否是只读的。
clearButtonEnabled:输入框不为空时,是否显示"清除按钮"。
placeholderText:placeholder:(替代缺失部分的)占位符。输入框为空时,输入框中是否显示占位符文本。
核心信号:
void selectionChanged():当选中的文本发生变化时,发出此信号。
void textChanged(const QString& text):当单行输入框中的文本发生改变时发出此信号,参数text是新文本。代码对文本的修改能触发此信号。
void testEdited(const QString& text):当单行输入框中的文本发生改变时发出此信号,参数text是新文本。代码对文本的修改不能触发此信号。
例子:
录入个人信息,包括:账号、密码、性别、电话(11位数字),点击确定按钮录入的用户信息打印出来。
正则表达式对象、验证器对象
由于QLineEdit中inputMask属性只能进行简单的输入格式校验,因此可以使用正则表达式正则表达式是使用特殊字符描述一个字符串特征的机制。
正则表达式对象
QRegExp,创建正则表达式对象:
QRegExp regexp("^1\\d{10}$");其中^1表示以数字1开头,\\d{10}表示任意10个十进制数字(c++中为方式转义字符因此多加上一条反斜杠\)
验证器对象
QValidator,Qt中提供了4种验证器对象都是继承自QValidator。
QRegExpValidator
创建验证器对象:
最经常使用的就是QRegExpValidator,即通过正则表达式对象构造验证器对象。
QRegExpValidator validator(QRegExp("^1//d{10}$"));
例子:
当单行输入框中的文本内容符合条件确定按钮才可用。
QLineEdit中设置验证器的方法:
我们利用QLineEdit的信号textChanged(textEdited也可以),只要输入框中的文本发生变化,该信号就会发出,且该信号的参数就是此时输入框中的文本内容,在该信号的槽函数我们使用QLineEdit中的validator()方法获取单行输入框的验证器,然后调用QValidator中的validate(QString&,int&)方法,通过该方法的返回值进行判断输入的文本是否符合条件。
参数:
input:是此时输入框中的文本内容,输出型参数。
pos:是输入框中的文本字符个数,输出型参数。
返回值:
QValidator::Acceptable:表示输入框中的文本符合条件。
QValidator::Invalid:不符合。
注意:validate的参数类型是QString&是没有加const的引用,因此不能直接将信号函数(信号和槽中的一个知识:当信号发出时,信号函数会将其参数传递给对应的槽函数)的参数传给validate方法,因此我们要在槽函数中重新定义一个QString对象,将这个对象传给validate方法。
我们可以在Widget声明一个QRegExgValidator*类型的成员变量,在构造函数中new一个正则表达式验证器,然后不用给单行输入框创建验证器,在~Widget中释放该验证器的内存控件,可以吗?
可以是可以但是与上面的实现是有差别的。
差别:没有正则表达式对象的限制,这种方法的输入框中的文本字符个数没有限制。而上面的方法中是有字符限制的(因为上面的方法是将正则表达式验证器设置到了输入框中),字符限制是正则表达式对象中的限制。
例子:
验证两次输入的密码是否一致只有两次输入的密码一致确认按钮才可以使用,并且标签控件上会显示两次密码输入的状况。
当第一个或第二个输入框中的内容改变时两个输入框都会发出信号,然后在槽函数进行实现。
例子:
切换显示密码
这里使用了toggled信号,也就是当按钮的从未选中切换到选中,或从选中切换到未选中都会发出此信号。
QTextEdit
表示多行输入框。输入的文本内容可以进行换行,并且能在文本内容超出编辑框范围时自动提供滚动条。
核心属性:
markdown:输入框内持有的内容,支持markdown格式,能够自动的将markdown文本渲染成html。
html:输入框内持有的内容,支持大部分html标签,包括img、table等。
placeholderText:输入框为空时提示的信息。
readOnly:文本框中的内容是否只读的。
undoRedoEnabled:是否开启undo和redo功能。ctrl+z:undo ctrl+y:redo
autoFormatting:文本开启自动格式。
verticalScrollBarPolicy:scroll:滚动。垂直方向滚动条的出现策略。
Qt::ScrollBarAsNeed 根据需要出现滚动条
Qt::ScrollBarAlwaysOff 总是出现滚动条
Qt::ScrollBarAlwaysOn 总是不出现滚动条
horizontalScrollBarPolicy:水平方向滚动条的出现策略。
核心信号:
textChanged():文本内容改变时触发。
selectionChanged():选中的文本范围改变时触发。
cursorPositionChanged():光标在输入框中的位置改变时触发。
undoAvailable(bool):当undo可用时触发。
redoAvailable(bool):当redo可用是触发。
copyAvailable(bool):文本被选中或取消选中时触发。信号的参数表示此时是否选中文本内容。
例子:
同步多行输入框的文本内容到标签中
注意:获取多行文本输入框的文本要使用toPlainText()这方法和之前的都不同,QTextEdit还提供了toHtml()和toMardown(),
QComboBox
表示下拉框。
核心属性:
currentText:当前选中的文本。
currentIndex:当前选中的条目下标。
editable:是否允许修改条目文本,如果为true则相当于一个QLineEdit可以为其设置一个验证器。
iconSize:下拉框头标(小三角)的大小。
maxCount:允许有多少个条目。
核心方法:
addItem(const QString&):添加一个条目。
currentText():获取已选中条目的下标,下标从0开始,如果没有选中任何条目则下标默认时-1。
currentIndex():获取已选中条目的内容。
例子:
从文件中加载下拉框的选项
注意:
1、将QString转换为string的方法:QString qs; string s = qs.toStdString();
2、将string转转换位QString的方法:string s; QString qs = QString::fromStdString(s);
QSpinBox
QSpinBox和QDoubleSpinBox是带有按钮的"微调框",可以设置int类型/double类型的数,通过点击按钮进行调整框内的数值。
QSpinBox和QDoubleSpinBox用法相同这里介绍QSpinBox。
核心属性:
value:框内的数值。
singleStep:每次调整的步长,点击一次按钮数值变化多少。
displayInteger:设置的进制。比如:设置为10则微调框中的数值将按十进制表示;设置为2则按二进制表示。
minimum:最小值;
maximum:最大值。
prefix:前缀。
suffix:后缀。
wrapping:是否允许换行。
frame:是否带边框。
alignment:文字对齐方式。
readOnly:是否允许修改。
buttonSymbol:按钮上的样式。
UpDownArrows:上下箭头、PluxMinus:加减号、NoButtons:无按钮
accelerated:按下按钮是否为快速调整模式。
correctionMode:修正方式。
keyboardTrack:是否开启键盘跟踪。
设为true:每次在输入框设输入一个数字时,都会触发valueChanged()和textChanged()信号。
设为false:只有在按下enter键或输入框失去焦点时才触发valueChanged()和textChanged()信号。
例子:
设置一个购买零食界面,只要用户选择任意一种零食的份数大于0即可点击确认按钮。
QDateTimeEdit
日期时间微调框,还有其他两个QDateEdit、QTimeEdit,这里只是介绍QDateTimeEdit。
核心属性:
dateTime:日期时间值。
date:日期值。
time:时间值。
displayFormat:日期时间格式。
核心信号:
dateChanged(const QDate&):日期改变时触发。
timeChanged(const QTime&):时间改变时触发。
dateTimeChanged(const QDateTime&):日期或时间任意一个改变时触发。
例子:
实现日期计算器
使用QDate中的secsTo方法得到两个日期时间之间的秒数差:
同样的可以使用daysTo方法得到两个日期时间之间的天数差:
注意:对于QDateTime中的daysTo(const QDateTime&),计算的天数值是受时间影响的,如果要计算两个日期时间之间的小时差(上面的例子要求的值),是不准确的。应该使用secsTo方法,然后通过运算求得。
将int类型转换为QString类型的方法:QString::number(int)
QDial
dial:刻度盘。这里的QDial是旋钮。
核心属性:
value:当前数值。
maximum:
minimum:
singleStep:按下方向键改变数值步长。
pageStep:按下png up或png down该变得数值步长。
sliderPosition:按钮的初始位置。
tracking:旋钮移动是否导致数值连续实时变化。
wrapping:是否允许循环调整。
notchesVisible:notches是否显示刻度线。
notchTarget:刻度线之间的相对距离,数字越大刻度线越稀疏。
核心信号:
valueChanged(int):数值变化是触发。
rangeChanged(int,int):范围变化是触发。
例子:
调整窗口透明度
QSlider
滑动条控件
QSlider和QDial都是继承自QAbstractSlider,因此大部分属性都与QDial相似,下面只列出与QDial不相似的属性:
核心属性:
orientation:orientation:方向。滑动条的方向时水平还是垂直的。
invertedApperance:是否翻转滑动条的滑动方向。
tickPosition:刻度的位置。
tickInterval:刻度的密集程度。
核心信号:
valueChanged(int):滑动条的数值内容改变时。
rangeChanged(int,int):数值范围改变时。
例子:
通过改变滑动条的值来改变窗口的尺寸。