IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> qt(04) : 从UI生成.h文件并使用其中默认信号 -> 正文阅读

[C++知识库]qt(04) : 从UI生成.h文件并使用其中默认信号

1. 从UI生成.h的过程

用最新的QtCreator选择GUI的应用会产生含有如下文件的工程。

如下是一个简单的主窗体来包含这个ui文件

mainwindow.h

#ifndef MAINWINDOW_H  
#define MAINWINDOW_H  
#include <QtGui/QMainWindow>  
namespace Ui  
{  
class MainWindow;  
}  
class MainWindow : public QMainWindow  
{  
Q_OBJECT  
public:  
MainWindow(QWidget *parent = 0);  
~MainWindow();  
private:  
Ui::MainWindow *ui;        // 重点是这个,主窗体包含这个UI控件
};  
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"  
#include "ui_mainwindow.h"  
MainWindow::MainWindow(QWidget *parent)  
: QMainWindow(parent), ui(new Ui::MainWindow)  
{  
ui->setupUi(this);          // 内部那个ui控件
}  
MainWindow::~MainWindow()  
{  
delete ui;  
}

自动生成的ui_mainwindow.h其实包含了很多内容:

#ifndef UI_MAINWINDOW_H  
#define UI_MAINWINDOW_H  
#include <QtCore/QVariant>  
#include <QtGui/QAction>  
#include <QtGui/QApplication>  
#include <QtGui/QButtonGroup>  
#include <QtGui/QHeaderView>  
#include <QtGui/QMainWindow>  
#include <QtGui/QMenuBar>  
#include <QtGui/QStatusBar>  
#include <QtGui/QToolBar>  
#include <QtGui/QWidget>  
QT_BEGIN_NAMESPACE  

class Ui_MainWindow  
{  
public:  
    QMenuBar *menuBar;  
    QToolBar *mainToolBar;  
    QWidget *centralWidget;  
    QStatusBar *statusBar;  

    void setupUi(QMainWindow *MainWindow)  
    {
        if (MainWindow->objectName().isEmpty())  
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));  
        MainWindow->resize(600, 400);  
        menuBar = new QMenuBar(MainWindow);  
        menuBar->setObjectName(QString::fromUtf8("menuBar"));  
        MainWindow->setMenuBar(menuBar);  
        mainToolBar = new QToolBar(MainWindow);  
        mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));  
        MainWindow->addToolBar(mainToolBar);  
        centralWidget = new QWidget(MainWindow);  
        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));  
        MainWindow->setCentralWidget(centralWidget);  
        statusBar = new QStatusBar(MainWindow);  
        statusBar->setObjectName(QString::fromUtf8("statusBar"));  
        MainWindow->setStatusBar(statusBar);  
        retranslateUi(MainWindow);  
        QMetaObject::connectSlotsByName(MainWindow);    // 注意这个函数,由控件名默认生成信号!!!
    } // setupUi  
    
    // 翻译文本
    void retranslateUi(QMainWindow *MainWindow)  
    {  
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0,           QApplication::UnicodeUTF8));  
        Q_UNUSED(MainWindow);  
    } // retranslateUi  
};  

namespace Ui
{  
    class MainWindow: public Ui_MainWindow {};  
} // namespace Ui  
QT_END_NAMESPACE  
#endif // UI_MAINWINDOW_H

2.? ?QMetaObject::connectSlotsByName(MainWindow)

经过编写测试代码,发现这句话的功能是,自动把 MainWindow里对象的signal和slot 按照on_objectname_signal()的规则进行自动连接。

详细的自动连接过程是这样的:如果在MainWindow类中定义了一个名为on_pushButton_clicked()的槽,则connectSlotsByName 会自动去为它匹配一个ui里名为pushButton对象的clicked()信号

?注意:connectSlotsByName 只会为以on_开头的槽去自动寻找一个对应的信号,如果不满足匹配条件,均会提示无法为槽寻找到正确的信号,对于非on_开头的槽,不会进行自动处理。

注意这个on_objectname_signal()是定义在Qwindow这个类与对象中的!!!

Qt 开发中关于 connectSlotsByname 的心得_Nicholas.Xu.的专栏-CSDN博客

Qt中Ui名字空间以及setupUi函数的原理和实现 - findumars - 博客园

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 13:48:12  更:2022-01-08 13:49:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:27:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码