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();
}

运行方式

  1. 将上述代码保存为main.cpp。
  2. 在项目文件(.pro)中添加:QT += widgets。
  3. 编译运行:
    qmake
    make
    ./button_demo

验证方法

程序启动后,窗口标题显示“原始标题”。点击窗口中央的按钮,标题变为“新标题”;再次点击,标题恢复为“原始标题”。每次点击标题都在两个值之间切换,说明信号与槽连接成功。

关键说明

  • 使用connect函数将按钮的clicked信号连接到Lambda表达式,Lambda捕获this指针以访问窗口成员函数。
  • 通过windowTitle()读取当前标题并判断,实现双向切换逻辑。
  • 按钮位置使用setGeometry直接指定,避免额外布局代码,保持示例最小化。
原始标题 点击切换标题 clicked() connect 槽函数 改标题

上图展示了信号与槽的连接关系:按钮被点击时发出clicked()信号,通过connect连接到槽函数,槽函数执行setWindowTitle()修改窗口标题。