QT信号与槽的连接
- 在ui界面中转到槽,直接编写内容
- 在构造函数中使用connect函数
//连接信号与槽 谁发信号,发什么信号(地址),谁处理信号,怎么处理(函数) 注意使用连接函数时,槽函数需要自行在头文件声明,一般声明为私有 例如
private slots: void on_commit_clicked(); void on_cancel_clicked();
connect (ui->commit,&QPushButton::clicked,this,&Widget::on_commit_clicked); commit按钮发出信号,信号为点击,widget处理(this),使用on_commit_clicked处理 connect (ui->lineEdit,SIGNAL(returnPressed()),this,SLOT(on_commit_clicked())); lineEdit按钮发出信号,信号为回车,widget处理(this),使用on_commit_clicked处理 returnPressed是Qlineedit类中的函数,是一个信号,按下回车时发出 SIGNAL将函数标记为信号 SLOT,将单个函数标记为插槽。
-
直接连接,不用单独槽函数,仍然写在构造函数中:该函数表示为创建小窗口,需要QMessageBox头文件 connect (ui->browse,&QPushButton::clicked,[this]() {
//this(父类),对话框名,对话框内容
QMessageBox::information(this,"信息","点击浏览");
});
- 打开exe代码
void Widget::on_commit_clicked() { //需要头文件QProgress QString progress = ui->lineEdit->text();//从对话框获取文本 QProcess *myprocess=new QProcess(this);//创建对象 myprocess->start(progress);//执行打开文本对应的exe }
实战:简易计算器
-
包含头文件QScriptEngine,用于字符串计算,私有成员QString expression保存字符串表达式, 等于号的槽函数如下
QScriptEngine myEngine;//创建类 QScriptValue three = myEngine.evaluate(expression);//计算结果,expression中保存的计算表达式字符串 ui->mylineEdit->setText(QString::number(three.toInt32()));//在lineedit输出,注意需要将QScriptValue 类型转化为int,再将int转化为字符串
其余按键槽函数
//普通按键 void Widget::on_oneButton_clicked() { expression +="1"; ui->mylineEdit->setText(expression); } //退格 void Widget::on_backButton_8_clicked() { expression.chop(1);//chop(n)删除字符串末尾n个字符 ui->mylineEdit->setText(expression); } //清空 void Widget::on_clearButton_11_clicked() { expression.clear();//将表达式清空 ui->mylineEdit->clear();//将文本框清空 }
设置计算器格式
//在构造函数中进行修改 Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); this->setWindowTitle("计算器");//设置窗口名称 QFont f("仿宋",10);//字体及大小 ui->mylineEdit->setFont(f); //按钮上图片 QIcon con("C:\\Users\\Billcream\\Desktop\\taihang\\calculator\\1719198648327.jpg"); ui->backButton_8->setIcon(con); //改变按钮背景色 ui->equalButton_20->setStyleSheet("background: yellow"); }
结果: