所有 QObject 的子类 , 想使用 Signal 和 Slot , 必须调用 Q_OBJECT 宏 。这里有两个按钮 , on_b1_clicked 和 on_b2_clicked 都是槽 。要让两个按钮自动连接 , 必须分别设置它的 object name 为 “b1” 和 “b2” 。
三、下面是 initUi 函数的实现代码 , 用于初始化窗体 。
void MyWindow::initUi(){// 按钮1btn1 = new QPushButton(this);// 设置按钮1的文本btn1 -> setText("左边");// 重要:给它个名字btn1 -> setObjectName("b1");// 按钮2btn2 = new QPushButton(this);// 设置按钮2的文本btn2 -> setText("右边");// 重要:设置名称btn2 -> setObjectName("b2");// 标签lb = new QLabel("请点击下面的按钮", this);// 布局layout = new QVBoxLayout(this);layout -> addWidget(lb, 0, Qt::AlignTop);sublayout = new QHBoxLayout(this);// 添加要布局的组件sublayout -> addWidget(btn1);sublayout -> addWidget(btn2);layout->addLayout(sublayout);// 窗口this -> setWindowTitle("示例王");this -> resize(240, 100);}调用按钮对象的 setObjectName 方法就可以为其分配名称 。注意在调用 QPushButton 类的构造函数时 , 要把当前窗口的指针传递给 parent 参数 , 使用按钮成为 MyWindow 的子级对象 。这样后面才能做信号与槽的自动连接 。
四、在 MyWindow 类构造函数中 , 先调用 initUi , 再调用 connectSlotsByName 静态方法 。
MyWindow::MyWindow(QWidget *parent): QWidget::QWidget(parent){// 调用以下函数 , 初始化UIinitUi();// 一定要在所有东东都初始化完毕后调用才有效QMetaObject::connectSlotsByName(this);}五、下面是两个槽函数的实现 。功能简单 , 用 QMessageBox 显示弹出框 。
void MyWindow::on_b1_clicked(){QMessageBox::information(this, "好消息", "左转是男厕", QMessageBox::Ok);}void MyWindow::on_b2_clicked(){QMessageBox::information(this, "好消息", "右转是女厕", QMessageBox::Ok);}六、在 main.cpp 中写 main 函数 。
#include "app.h"int main(int argc, char *argv[]){QApplication app(argc, argv);// 实例化窗口MyWindow wind;// 显示窗口wind.show();// 消息循环return app.exec();}运行结果如下面超清动画所示 。

文章插图
从结果可以看到 , 名为“b1”的按钮自动将 clicked 信号连接到 on_b1_clicked 函数;名为“b2”的按钮自动将 clicked 信号连接到 on_b2_clicked 函数 。
好了 , 今天的主题咱们就聊到这儿了 。
经验总结扩展阅读
- 手记系列之二 ----- 关于IDEA的一些使用方法经验
- 空调怎么使用才正确 都有哪些使用误区
- 洗衣机什么品牌好用 洗衣机不转了嗡嗡响怎么办
- 松下和西门子滚筒洗衣机哪个好 滚筒洗衣机好用吗
- 服用头孢类药物后要避免饮酒,间隔多长时间为宜?
- 海尔和容声冰箱哪个好 海尔和容声冰箱哪个更实用
- 顶楼男主用的手机_顶楼周丹泰手机
- 变频与定频空调的区别 哪个更好用
- 活螃蟹蒸之前怎么弄死
- 铁锅不开锅能用吗