一 场景
- 在 Qt connect与信号槽 一文中提到,信号槽主要通过 connect 进行连接,并且有好几种不同的写法。
- 新建一个Demo Widgets 程序。在 Qt 设计师界面中,拖入一个 QPushButton 控件,在其上右键 - 转到槽 - 选择信号 clicked(),会自动生成一个槽函数 on_pushButton_clicked()。发现点击按钮会触发该槽,但在代码中并没有找到 connect 的存在。也就是说 信号槽的连接 还存在其他的方式。
二 setupUi
-
探究代码,在主界面类的构造函数中,除了 setupUi 函数,并没有其他特殊的地方。setupUi 如下:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } -
展开 setupUi
...... class Ui_MainWindow { public: QWidget *centralWidget; QPushButton *pushButton; QMenuBar *menuBar; QToolBar *mainToolBar; QStatusBar *statusBar; void setupUi(QMainWindow *MainWindow) { if (MainWindow->objectName().isEmpty()) MainWindow->setObjectName(QStringLiteral("MainWindow")); MainWindow->resize(400, 300); centralWidget = new QWidget(MainWindow); centralWidget->setObjectName(QStringLiteral("centralWidget")); pushButton = new QPushButton(centralWidget); pushButton->setObjectName(QStringLiteral("pushButton")); pushButton->setGeometry(QRect(140, 80, 75, 23)); MainWindow->setCentralWidget(centralWidget); menuBar = new QMenuBar(MainWindow); menuBar->setObjectName(QStringLiteral("menuBar")); menuBar->setGeometry(QRect(0, 0,

本文介绍Qt中利用QMetaObject::connectSlotsByName实现信号槽自动连接的方法,包括具体应用场景、setupUi函数的作用、connectSlotsByName的工作原理及其实现源码解析。
最低0.47元/天 解锁文章
5435

被折叠的 条评论
为什么被折叠?



