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);
});
