1.点击确定按钮实现确定效果
1.1点击效果操作


1.2.在widget.h中多了一个信号

1.3.在widget.cpp中多了一个槽函数

1.4.补全槽函数
js
#include <QProcess>
void Widget::on_commitButton_clicked()
{
// 获取lineedit数据
QString program = ui->cmdLineEdit->text();
//创建process对象
QProcess *myProcess = new QProcess(this);
myProcess->start(program);
}
1. #include <QProcess>
-
这行代码引入了Qt的QProcess类头文件。
-
QProcess用于在Qt程序中启动和管理外部进程(比如运行一个命令行程序、脚本等)。
2. void Widget::on_commitButton_clicked()
-
这是一个槽函数,通常和按钮的点击信号(比如commitButton的clicked()信号)连接。
-
当用户点击"确定"按钮时,这个函数会被自动调用。
3. QString program = ui->cmdLineEdit->text();
-
从界面上的cmdLineEdit文本框获取用户输入的命令或程序路径。
-
例如,用户输入notepad,program变量就会是"notepad"。
4. QProcess *myProcess = new QProcess(this);
-
创建一个QProcess对象,用于启动和管理外部进程。
-
this表示以当前窗口为父对象,Qt会自动管理内存。
5. myProcess->start(program);
-
启动外部程序,参数是用户输入的命令。
-
例如,用户输入notepad,就会打开记事本程序。
2.回车实现确定效果
2.1字符串宏的方法实现
js
//连接信号与槽 谁发出信号 发出什么信号 谁处理信号 怎么处理信号
connect(ui->cmdLineEdit, SIGNAL(returnPressed()), this, SLOT(on_commitButton_clicked()));
1. 谁发出信号
✅ 发出者 :ui->cmdLineEdit
(行编辑框控件)
2. 发出什么信号
✅ 信号 :SIGNAL(returnPressed())
(按下回车键的信号)
3. 谁处理信号
✅ 处理者 :this
(当前 Widget
对象)
4. 怎么处理信号
✅ 处理方式 :SLOT(on_commitButton_clicked())
(直接调用 commitButton
的点击槽函数)
当用户在文本输入框中按下回车键时,就自动执行点击确定按钮时要做的事情
2.2函数指针/取地址的方法实现
js
connect(ui->cmdLineEdit, &QLineEdit::returnPressed, this, &Widget::on_commitButton_clicked);
1. 谁发出信号
✅ 发出者 :ui->cmdLineEdit
(行编辑框控件)
2. 发出什么信号
✅ 信号 :&QLineEdit::returnPressed
(按下回车键的信号)
3. 谁处理信号
✅ 处理者 :this
(当前 Widget
对象)
4. 怎么处理信号
✅ 处理方式 :&Widget::on_commitButton_clicked
(直接调用 commitButton
的点击槽函数)
2.3字符串宏与函数指针两者对比
1. 发出什么信号
✅ 信号:
- 新式语法 :
&QLineEdit::returnPressed
(按下回车键的信号) - 旧式语法 :
SIGNAL(returnPressed())
(功能相同,但用宏表示)
2. 怎么处理信号
✅ 处理方式:
- 新式语法 :
&Widget::on_commitButton_clicked
(直接调用commitButton
的点击槽函数) - 旧式语法 :
SLOT(on_commitButton_clicked())
(效果相同,但用宏表示)
3.对比总结
方式 | 写法 | 检查时机 | 是否推荐 | 备注 |
---|---|---|---|---|
字符串宏(旧式) | SIGNAL(clicked()) , SLOT(...) |
运行时 | ❌ 旧代码兼容使用 | 容易拼写错误 |
函数指针(新式) | &QLineEdit::returnPressed , &Widget::on_commitButton_clicked |
编译时 | ✅ 推荐 |
3.点击取消按钮实现关闭效果
3.1.在widget.h中声明槽函数
js
private slots:
void on_cancalButton_clicked();
private slots:
这是Qt的槽函数声明区域,表示下面的函数是私有槽函数,只能在类内部被信号触发。
void on_cancalButton_clicked();
声明一个槽函数,名字通常和按钮的对象名+_clicked信号自动匹配(如果用Qt Designer自动生成的代码就是这样命名的)。这个函数将在"取消"按钮被点击时自动调用。
3.2.在widget.cpp中实现槽函数
js
void Widget::on_cancalButton_clicked()
{
this->close();
}
void Widget::on_cancalButton_clicked()
这是槽函数的实现部分,属于Widget类。
this->close();
this指当前窗口对象,close()是QWidget的成员函数,作用是关闭当前窗口。
3.3.连接信号与槽
1字符串宏的方法实现
js
connect(ui->cancelButton,SIGNAL(clicked()),this,SLOT(on_cancalButton_clicked()));
2.函数指针/取地址的方法实现
js
connect(ui->cancalButton,&QPushButton::clicked,this,&Widget::on_cancalButton_clicked);
4.点击浏览按钮实现QMessageBox效果
4.1.在widget.h中声明槽函数
csharp
private slots:
void on_browseButton_clicked(); // 浏览按钮点击槽函数
4.2.在widget.cpp中实现槽函数
arduino
// 槽函数实现
void Widget::on_browseButton_clicked() {
QMessageBox::information(this,
"提示",
"您点击了浏览按钮",);
}
4.3.连接信号与槽
1.字符串宏的方法实现
js
connect(ui->browseButton,SIGNAL(clicked()),this,SLOT(on_browseButton_clicked()));
2.函数指针/取地址的方法实现
js
connect(ui->browseButton, &QPushButton::clicked, this, &Widget::on_browseButton_clicked);
3.lambda表达式
js
connect(ui->browseButton, &QPushButton::clicked, [this]()
{
QMessageBox::information(this, "信息", "您点击了浏览按钮");
});

5.QLineEdit和QPushButton 两者对比
在QLineEdit中按下Enter
键,用的信号为returnPressed
在QPushButton中鼠标点击,用的信号为clicked
总结
信号 | 适用控件 | 触发条件 |
---|---|---|
returnPressed |
QLineEdit |
按下 Enter /Return 键 |
clicked |
QPushButton 、QCheckBox 等 |
鼠标点击 |
textChanged |
QLineEdit |
文本内容变化 |
editingFinished |
QLineEdit |
编辑完成(焦点离开) |