Qt_工程执行逻辑_窗口逻辑


一:主函数(入口函数)是main.cpp 此文件没有自己的头文件

cpp 复制代码
#include "mainwindow.h"//引用别的cpp头文件,里面有类定义,才能进行创建对象
#include <QApplication>

int main(int argc, char *argv[])        // 程序入口,标准C++主函数
{
    QApplication a(argc, argv);         // 创建Qt应用程序对象,初始化Qt系统
    MainWindow w;                       // 创建主窗口对象(实例化MainWindow类)
    w.show();                           // 显示主窗口(使其可见)
    return a.exec();                    // 启动Qt事件循环,等待用户交互
    //结束
    //以上是官方固定模板
}

二:创建工程时候,系统会自动添加mainwindow.cpp 和 mainwindow.h 这两个文件,这两个是作为主窗口类的定义

.H文件

(重点:必须是声明命名空间Ui下的类 , 并且类名要有对应的.ui文件 , 这样系统才会自动生成类里面的函数)

cpp 复制代码
#ifndef MAINWINDOW_H        // 条件编译开始,防止重复包含
#define MAINWINDOW_H        // 定义宏标记,表示已包含此文件

#include <QMainWindow>     // Qt主窗口类
#include <QTableWidget>    // Qt表格部件类

QT_BEGIN_NAMESPACE         // 开始Qt命名空间
    namespace Ui {         // 2. 如果存在就使用,不存在就创建(这个命名空间必须叫做Ui,这样才会对下面声明的类,进行自动生成类中的代码)
        class MainWindow;  // 在这个命名空间里声明一个MainWindow类(需要有一个对应的MainWindow.ui文件)(需要用到MainWindow.ui文件,类似绑定)
}
QT_END_NAMESPACE           // 结束Qt命名空间
// 假设有两个MainWindow类:
//::MainWindow         // 你的主窗口类(全局命名空间)
//Ui::MainWindow       // UI控件容器类(Ui命名空间中)
// 这样就不会冲突!

//================================================================================================================================
class MainWindow : public QMainWindow // 主窗口类定义(这个才是真正自己定义的类,到时候用来绑定进去Ui::MainWindow对象里面)
{
    Q_OBJECT               // Qt宏,启用信号槽(它是宏,展开后变成很多私有代码,针对qt的)
        //比如(需要使用信号槽)(需要Qt Designer自动连接)(需要元对象系统功能)

    public:
        MainWindow(QWidget *parent = nullptr); // 构造函数(创建时候执行一次)    h文件里面只是声明,实现这个函数在cpp文件里面  如果不传参数,默认就传 nullptr(空指针)
        ~MainWindow();         // 析构函数(销毁时执行一次)   h文件里面只是声明,实现这个函数在cpp文件里面

    private:
        Ui::MainWindow *main_ui;    // UI对象指针(只创建了指针,还没指向任何地方)(指针类型是Ui::MainWindow)

    private slots:             // 槽函数声明区域
        void on_pushButton_clicked();  // h文件里面只是声明,实现这个函数在cpp文件里面
};
//===============================================================================================================================
#endif // MAINWINDOW_H      // 条件编译结束

.CPP文件

(重点 : 把真正自己定义的类的对象 , 传递给Ui:: 命名空间下的类的对象)

这里,Ui:: 命名空间下的类的对象 是 (main_ui)
自己定义的类的对象是(this)

cpp 复制代码
#include "mainwindow.h"                       // 包含自定义主窗口的头文件声明
#include "ui_mainwindow.h"                    // 包含Qt生成的UI界面类的头文件

//====================================构造函数====================================================================
MainWindow::MainWindow(QWidget *parent)       // MainWindow构造函数定义(// 1. 先重复签名,必须和声明一致)
    : QMainWindow(parent)                     // 调用父类QMainWindow的构造函数
   // , ui(new Ui::MainWindow)                  // 初始化ui指针,创建UI对象(初始化成员变量)
{
    //ui(new Ui::MainWindow)
    // 分解:
    //new Ui::MainWindow → 在堆上创建Ui::MainWindow对象
    //ui(结果)           → 把这个新对象的地址赋给ui指针


    // 更直观的三步走:
    // 1. 创建指针
    Ui::MainWindow *uiContainer = new Ui::MainWindow;
    // 2. 把地址给ui指针
    main_ui = uiContainer;//相当于把我自己的定义的类的对象,绑定给Ui::MainWindow的对象


    //setupUi 是它的成员函数()(转换为内存中的控件树结构 ))
    //.ui文件 → 编译时被处理,生成 setupUi() 函数
    //setupUi() 函数 → 运行时接收 this 参数
    //this → 作为每个控件的父对象传递给构造函数
    main_ui->setupUi(this); //this代表这个对象(总之就是把this这个对象,传递给ui这个对象)              // 关键!创建并设置UI中的所有控件

    //下面是自己的代码
    main_ui->label->setText("nihao");              // 设置标签文本为"nihao"


}
//====================================================================================================================

MainWindow::~MainWindow()                     // MainWindow析构函数定义
{
    delete main_ui;                                // 释放ui对象内存(重要!避免泄漏)
}


void MainWindow::on_pushButton_clicked()
{
    if(main_ui->label->text()=="nihao")
    {
        main_ui->label->setText("你好");               // 点击按钮后,标签文本改为"你好"
    }
    else
    {
        main_ui->label->setText("nihao");               // 点击按钮后,标签文本改为"你好"

    }
}
相关推荐
EXI-小洲9 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员9 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导9 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan9 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子9 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化9 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251499 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
大衛說10 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
可乐鸡翅yeah_12 小时前
hls.js 内存泄漏实战排查,直播 M3U8 长时间播放异常定位方案
开发语言·javascript·python·django·ecmascript·m3u8·m3u8在线
2601_9622035112 小时前
Java进阶07集合(续)
java·开发语言