2. 按钮响应
任务目标
在Qt窗口中添加一个按钮,点击该按钮后窗口标题在“原始标题”和“新标题”之间切换。通过本案例掌握Qt信号与槽(Signal & Slot)的基本连接方式。
环境依赖
Qt 5或Qt 6开发环境,支持C++11及以上标准。使用QPushButton和QWidget组件。
关键完整代码
#include <QApplication>
#include <QWidget>
#include <QPushButton>
class ButtonWindow : public QWidget {
public:
ButtonWindow() {
// 创建按钮并设置父对象
QPushButton *btn = new QPushButton("点击切换标题", this);
btn->setGeometry(100, 100, 150, 40);
// 设置初始窗口标题
setWindowTitle("原始标题");
resize(350, 200);
// 连接按钮点击信号到槽函数(使用Lambda表达式)
connect(btn, &QPushButton::clicked, this, [this]() {
if (windowTitle() == "原始标题") {
setWindowTitle("新标题");
} else {
setWindowTitle("原始标题");
}
});
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
ButtonWindow window;
window.show();
return app.exec();
}
运行方式
- 将上述代码保存为
main.cpp。 - 在项目文件(
.pro)中添加:QT += widgets。 - 编译运行:
qmake make ./button_demo
验证方法
程序启动后,窗口标题显示“原始标题”。点击窗口中央的按钮,标题变为“新标题”;再次点击,标题恢复为“原始标题”。每次点击标题都在两个值之间切换,说明信号与槽连接成功。
关键说明
- 使用
connect函数将按钮的clicked信号连接到Lambda表达式,Lambda捕获this指针以访问窗口成员函数。 - 通过
windowTitle()读取当前标题并判断,实现双向切换逻辑。 - 按钮位置使用
setGeometry直接指定,避免额外布局代码,保持示例最小化。
上图展示了信号与槽的连接关系:按钮被点击时发出clicked()信号,通过connect连接到槽函数,槽函数执行setWindowTitle()修改窗口标题。