Qt:QLineEdit、QTextEdit、QComboBox、QSpinBox、QDateTimeEdit、QDial、QSlider
目录
一、QLineEdit
属性
二、QTextEdit
属性
三、QComboBox
属性
四、QSpinBox
属性
五、QDateTimeEdit
属性
六、QDial
属性
七、QSlider
属性
在上一篇介绍完显示类控件后,本文介绍常见的输入类控件。
一、QLineEdit
QLineEdit表示一个单行输入框,可以输入文本,但是无法换行。
属性
- 这些属性比较枯燥,还是要看在具体代码中的实现,实现一个程序,来让用户输入个人信息。
//设置姓名输入框ui->lineEdit_name->setFrame(true);ui->lineEdit_name->setPlaceholderText("请输入姓名");ui->lineEdit_name->setClearButtonEnabled(true);//设置密码输入框ui->lineEdit_password->setFrame(true);ui->lineEdit_password->setPlaceholderText("请输入密码");ui->lineEdit_password->setClearButtonEnabled(true);//设置密码隐藏ui->lineEdit_password->setEchoMode(QLineEdit::Password);//设置性别//设置电话ui->lineEdit_phone->setFrame(true);ui->lineEdit_phone->setPlaceholderText("请输入电话");ui->lineEdit_phone->setClearButtonEnabled(true);//电话有格式限制ui->lineEdit_phone->setInputMask("000-0000-0000");
- InputMask所提供的限制十分有限,为了更好的约束输入,Qt提供了验证器,此处可以利用正则表达式来验证用户输入的电话号码是否合法,如果不合法,则提交按钮不能启用,如果合法,则可以点击提交按钮。
QRegExp regexp(R"(^1\d{10}$)");
ui->lineEdit_phone->setValidator(new QRegExpValidator(regexp));
^1表示字符串必须以1开头
\d表示数字
{10}表示\d重复10次
$表示结尾
由于这里用了RawString,所以不用对\d转义
//当输入框中输入内容后,触发信号的槽函数
void Widget::on_lineEdit_phone_textEdited(const QString &arg1)
{//在槽函数中验证输入内容和正则表达式是否匹配成功QString text = arg1;int pos;//第二个参数是输出型参数,当匹配失败的时候,返回从哪个位置开始匹配失败的if(ui->lineEdit_phone->validator()->validate(text,pos) ==QValidator::Acceptable ){ui->pushButton_submit->setEnabled(true);}elseui->pushButton_submit->setEnabled(false);}
- 编写代码,实现密码输入的二次确认,如果不一致,就显示两次输入密码不一致。
void Widget::Compare()
{QString s1 = ui->lineEdit_password->text();QString s2 = ui->lineEdit_passwordAgain->text();if(s1.isEmpty() && s2.isEmpty()){ui->label_dispaly->setText("您输入的密码为空");return;}if(s1 == s2){ui->label_dispaly->setText("输入的密码一致");}else{ui->label_dispaly->setText("输入的密码不一致");}return;
}
void Widget::on_lineEdit_password_textEdited(const QString &arg1)
{(void)arg1;this->Compare();
}void Widget::on_lineEdit_passwordAgain_textEdited(const QString &arg1)
{(void)arg1;this->Compare();
}
- 再实现一个功能,切换密码的显示状态,密码默认是隐藏的,可以点击显示按钮来切换。
void Widget::on_checkBox_toggled(bool checked)
{if(checked){ui->lineEdit_password->setEchoMode(QLineEdit::Normal);ui->lineEdit_passwordAgain->setEchoMode(QLineEdit::Normal);}else{ui->lineEdit_password->setEchoMode(QLineEdit::Password);ui->lineEdit_passwordAgain->setEchoMode(QLineEdit::Password);}
}
二、QTextEdit
属性
常用信号
- 获取QTextEdit中的内容
void Widget::on_textEdit_textChanged()
{const QString& content = ui->textEdit->toPlainText();qDebug() << content;
}
- 验证输入框的信号
void Widget::on_textEdit_selectionChanged()
{const QTextCursor& cursor = ui->textEdit->textCursor();qDebug() << "[selectionChanged] " << cursor.selectedText();
}
void Widget::on_textEdit_cursorPositionChanged()
{const QTextCursor& cursor = ui->textEdit->textCursor();qDebug() << "[cursorPositionChanged] " << cursor.position();
}
三、QComboBox
下拉框
属性
- 核心方法
- 核心信号
- 给下拉框添加条目
ui->comboBox->addItem("巨⽆霸");
ui->comboBox->addItem("⻨辣鸡腿堡");ui->comboBox_2->addItem("薯条");
ui->comboBox_2->addItem("⻨辣鸡翅");ui->comboBox_3->addItem("可乐");
ui->comboBox_3->addItem("雪碧");
四、QSpinBox
属性
- 核心信号
ui->spinBox->setRange(1,5);//设置范围
ui->spinBox->setValue(3);//设置初始值
五、QDateTimeEdit
属性
- 核心信号
- 获取两个日期直接的差
//获取到两个时间框的时间⽇期
QDateTime timeOld = ui->dateTimeEdit_old->dateTime();
QDateTime timeNew = ui->dateTimeEdit_new->dateTime();
// 计算⽇期差值
int days = timeOld.daysTo(timeNew);
int hours = (timeOld.secsTo(timeNew) / 3600) % 24;
六、QDial
表示一个旋钮
属性
- 核心信号
编写程序,拖动旋钮来改变窗口不透明度
// 设置可以循环旋转ui->dial->setWrapping(true);// 设置刻度线可⻅ui->dial->setNotchesVisible(true);// 设置最⼤值为ui->dial->setMaximum(100);// 设置最⼩值为ui->dial->setMinimum(0);// 设置初始值为ui->dial->setValue(100);
void Widget::on_dial_valueChanged(int value)
{
ui->label->setText(QString("当前不透明度为: ") + QString::number(value));
this->setWindowOpacity((double)value / 100);
}
七、QSlider
表示一个滑动条。
QSlider和QDial都是继承自QAbstractSlider,用法类似。
属性
核心信号
- 编写程序,实现两个滑动条,一个水平、一个垂直,拖动可以改变窗口的大小。
ui->horizontalSlider->setMinimum(100);ui->horizontalSlider->setMaximum(2000);ui->horizontalSlider->setValue(800);ui->horizontalSlider->setSingleStep(500);ui->verticalSlider->setMinimum(100);ui->verticalSlider->setMaximum(1500);ui->verticalSlider->setValue(600);ui->verticalSlider->setSingleStep(300);
void Widget::on_horizontalSlider_valueChanged(int value)
{QRect rect = this->geometry();this->setGeometry(rect.x(),rect.y(),value,rect.height());
}void Widget::on_verticalSlider_valueChanged(int value)
{QRect rect = this->geometry();this->setGeometry(rect.x(),rect.y(),rect.width(),value);
}
- 用快捷键增加或减少滑动条的值
void Widget::on_horizontalSlider_valueChanged(int value)
{QString s = QString::number(value);ui->label->setText("当前值为"+s);
}
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QShortcut* shortCut1 = new QShortcut(this);shortCut1->setKey(QKeySequence("-"));QShortcut* shortCut2 = new QShortcut(this);shortCut2->setKey(QKeySequence("="));//按下快捷键,发出信号,执行槽函数connect(shortCut1,&QShortcut::activated,this,&Widget::subValue);connect(shortCut2,&QShortcut::activated,this,&Widget::addValue);}void Widget::addValue()
{int v = ui->horizontalSlider->value();ui->horizontalSlider->setValue(v+5);
}void Widget::subValue()
{int v = ui->horizontalSlider->value();ui->horizontalSlider->setValue(v-5);
}