学习目标: Qt 基础组件复习/速学 输入控件篇input Widget
前置环境
运行环境:qt creator 4.12
学习内容:
//选择框
MainWindow::setComboxWidget();
//字体选择框
MainWindow::setFontComboxWidget();
//文本编辑
MainWindow::setLineEdit();
MainWindow::setTextEdit();
//整数旋转框
MainWindow::setSpinbox();
//小数旋转框
MainWindow::setDoubleSpinbox();
//时间控件
MainWindow::setQTimeEdit();
//滚动条
MainWindow::setQScrolbar();
//快捷键操作
MainWindow::setQkeyqueueEdit();
详细代码和运行测试
选项框
void MainWindow::setComboxWidget(){
QComboBox * combox = new QComboBox(this);
combox->setGeometry(10,10,100,20);
combox->addItem("广东省");
combox->addItem("江西省");
combox->addItem("广西省");
combox->addItem("北京省");
combox->addItem("山东省");
// 设置当前选中的项目
combox->setCurrentIndex(0);
// 连接信号槽
QObject::connect(combox,&QComboBox::currentTextChanged,this,[](const QString& data){
QMessageBox::information(nullptr,"省份",data,QMessageBox::Yes | QMessageBox::No);
QMessageBox::warning(nullptr,"省份",data,QMessageBox::Yes | QMessageBox::No);
QMessageBox::critical(nullptr,"省份",data,QMessageBox::Yes | QMessageBox::No);
// 显示一个询问消息框
int result = QMessageBox::question(nullptr, "Question", "Do you want to proceed?",
QMessageBox::Yes | QMessageBox::No);
if (result == QMessageBox::Yes) {
// 用户选择了 Yes
} else {
// 用户选择了 No
}
});
grid->addWidget(combox,0,0);
}
字体选项框
void MainWindow::setFontComboxWidget(){
QFontComboBox* fontcBox = new QFontComboBox(this);
fontcBox->setGeometry(10,30,100,15);
QLabel* lab = new QLabel("hello word 你好 世界!",this);
lab->setGeometry(10,40,100,50);
QObject::connect(fontcBox,&QFontComboBox::currentFontChanged,this,[lab](const QFont& f){
lab->setFont(f);
lab->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
});
grid->addWidget(fontcBox,1,1);
}
文本编辑框
1.对输入的数据输出
2.文本只读模式
void MainWindow::setLineEdit(){
QLineEdit* line = new QLineEdit("账号",this);
line->setGeometry(10,100,100,15);
QPushButton* pb = new QPushButton(this);
pb->setGeometry(110,100,30,15);
QLabel* lb = new QLabel(this);
lb->setGeometry(10,110,60,60);
pb->setText("确认");
lb->setText("请输入");
//点击事件clicked 单复选 click
QObject::connect(pb,&QPushButton::clicked,this,[line,lb](){
lb->setText(line->text());
});
}
void MainWindow::setTextEdit(){
/*
通常情况下,QTextLine 是通过 QTextLayout 类来管理的。
QTextLayout 负责将文本分割成多个 QTextLine 对象,开发者可以通过 QTextLayout 来访问和操作这些文本行。
*/
QTextEdit* textEdit = new QTextEdit(this);
textEdit->setGeometry(10,150,100,50);
textEdit->setText("This is a sample text.\nThis is another line.");
QPlainTextEdit* plain = new QPlainTextEdit(this);
//获取当前路径
QDir::setCurrent(QCoreApplication::applicationDirPath());
QFile f("moc_mainwindow.cpp");
f.open(QFile::ReadOnly|QFile::Text);
QTextStream tstr(&f);
plain->insertPlainText(tstr.readAll());
QRadioButton* radio = new QRadioButton(this);
radio->setText("只读模式");
//点击时发送信号 如果是clicked只有一种状态变化,通过toggled 变化解耦。
QObject::connect(radio,&QRadioButton::toggled,this,[plain](bool b){
plain->setReadOnly(b);//设置只读
});
plain->setGeometry(10,250,150,150);
radio->setGeometry(160,250,100,50);
}
整数选择框
通过修改整数,修改颜色透明度。
void MainWindow::setSpinbox() {
QSpinBox* spinbox = new QSpinBox(this);
spinbox->setGeometry(200, 10, 90, 50);
//this->setStyleSheet("QMainWindow{background-color:""rgba(250,220,120,100%)}"); // 设置初始透明度为50%
//数值范围为 0 到 100
spinbox->setRange(0, 100);
//步长为 5
spinbox->setSingleStep(15);
//初始值为 50
spinbox->setValue(50);
//添加前缀和后缀
spinbox->setPrefix("透明度:");
spinbox->setSuffix("%");
//connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(setSpinboxSLOT(int)));
//QSpinBox::valueChanged因为有多个重载版本 QOverload<int>::of来指定连接 valueChanged(int) 信号
connect(spinbox, QOverload<int>::of(&QSpinBox::valueChanged), this, [this](int value) {
this->setStyleSheet(QString("QMainWindow{background-color:rgba(250,220,120,%1%);}").arg(value));
});
}
小数选择框
通过修改美元(小数)得到自己购买的数量。
void MainWindow::setDoubleSpinbox(){
QDoubleSpinBox* dspin = new QDoubleSpinBox(this);
dspin->setGeometry(200, 100, 90, 50);
dspin->setRange(0.0,50.0);
dspin->setSingleStep(2.1);
dspin->setValue(0.00);
dspin->setPrefix("美元:");
dspin->setSuffix("$");
int* count=new int(0);
double* pre =new double(0.0);
connect(dspin,QOverload<double>::of(&QDoubleSpinBox::valueChanged),this,[count,pre](double cur){
if(cur > *pre){
(*count)++;
}else{
(*count)--;
}
qDebug() << cur <<" "<< (*count);
*pre = cur; // 更新缓存的上一次值
});
}
时间选择框
分别有三种类型:只限日期 只限时分 第三种以上两种都有。
void MainWindow::setQTimeEdit(){
QDateEdit * date = new QDateEdit(this);
QTimeEdit* timeEdit = new QTimeEdit(this);
QDateTimeEdit* dateTimeEdit = new QDateTimeEdit(QDateTime::currentDateTime(),this);
dateTimeEdit->setDisplayFormat("yyyy-MM-dd hh:mm:ss");
date->setGeometry(200, 150, 190, 20);
timeEdit->setGeometry(200, 170, 190, 20);
dateTimeEdit->setGeometry(200, 190, 190, 20);
}
滚动条
分别是垂直滚动条和水平滚动条
void MainWindow::setQScrolbar(){
QScrollBar* HscrollBar = new QScrollBar(Qt::Horizontal,this);
HscrollBar->setGeometry(0,400,500,20);
//最小值、最大值、当前值、单步长和页面步长
HscrollBar->setMinimum(0);
HscrollBar->setMaximum(100);
HscrollBar->setValue(50);
HscrollBar->setSingleStep(1);
HscrollBar->setPageStep(10);
QScrollBar* VscrollBar = new QScrollBar(Qt::Vertical,this);
VscrollBar->setGeometry(400,0,20,500);
}
快捷键映射操作
根据用户输入 ”Ctrl+q“退出的操作
void MainWindow::setQkeyqueueEdit(){
QKeySequenceEdit* keySequ = new QKeySequenceEdit(this);
keySequ->setGeometry(200,200,100,50);
QObject::connect(keySequ,QOverload<const QKeySequence&>::of(&QKeySequenceEdit::keySequenceChanged),this,[this](const QKeySequence& key){
qDebug()<<key;
if(key == QKeySequence("Ctrl+Q")){
this->close();
}
});
}