2. 按钮点击事件处理
任务目标
创建一个Qt窗口,包含一个按钮和一个标签。点击按钮时,标签文本在“Hello World”和“Button Clicked”之间切换,演示Qt信号与槽的基本连接方式。
环境依赖
需要Qt 5或Qt 6开发环境,以及对应的C++编译器。本案例使用Qt Widgets模块,无需额外第三方库。
关键完整代码
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>
class MyWindow : public QWidget {
Q_OBJECT
public:
MyWindow(QWidget *parent = nullptr) : QWidget(parent) {
// 创建控件
label = new QLabel("Hello World", this);
button = new QPushButton("Click Me", this);
// 设置布局
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(label);
layout->addWidget(button);
// 信号与槽连接:点击按钮时切换标签文本
connect(button, &QPushButton::clicked, this, &MyWindow::onButtonClicked);
}
private slots:
void onButtonClicked() {
if (label->text() == "Hello World") {
label->setText("Button Clicked");
} else {
label->setText("Hello World");
}
}
private:
QLabel *label;
QPushButton *button;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWindow window;
window.resize(300, 150);
window.setWindowTitle("Button Click Demo");
window.show();
return app.exec();
}
#include "main.moc"
运行方式
- 将上述代码保存为
main.cpp。 - 在项目目录下创建
.pro文件(若使用qmake):QT += widgets SOURCES = main.cpp TARGET = button_demo - 执行以下命令编译:
qmake make - 运行程序:
./button_demo
若使用CMake,则创建 CMakeLists.txt:
cmake_minimum_required(VERSION 3.5)
project(button_demo)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
qt_standard_project_setup()
qt_add_executable(button_demo main.cpp)
target_link_libraries(button_demo Qt6::Widgets)
然后执行 cmake . && make && ./button_demo。
验证方法
程序启动后,窗口显示标签“Hello World”和按钮“Click Me”。点击按钮一次,标签变为“Button Clicked”;再次点击,标签恢复为“Hello World”。每次点击按钮,标签文本都在两个值之间切换,说明信号与槽连接成功。
关键说明
connect函数将按钮的clicked信号连接到窗口的onButtonClicked槽函数,这是Qt信号与槽机制的核心用法。- 代码末尾的
#include "main.moc"是qmake编译时处理Q_OBJECT宏所必需的;若使用CMake的qt_standard_project_setup(),该行可省略。 - 槽函数中通过条件判断实现文本切换,展示了如何在槽中访问和修改界面控件。