qtwidght默认结构
发表于:2024-12-26 | 分类: qt
字数统计: 832 | 阅读时长: 4分钟 | 阅读量:

qtwidght默认结构

项目结构

  • windows qt6
  • 使用的是cmake
  • 自行创建了src和hearder目录

CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
cmake_minimum_required(VERSION 3.14)
project(MyQtApp)

set(CMAKE_CXX_STANDARD 17)

# 设置 Qt 的安装路径
set(CMAKE_PREFIX_PATH "D:/mysoft/qt/6.8.1/mingw_64")

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt6 COMPONENTS Core Widgets REQUIRED)

# 搜索源文件和头文件,UI文件
file(GLOB SRC_FILES "${CMAKE_SOURCE_DIR}/src/*.cpp")
file(GLOB HEADER_FILES "${CMAKE_SOURCE_DIR}/header/*.h")
file(GLOB UI_FILES "${CMAKE_SOURCE_DIR}/src/*.ui")

# 添加可执行文件,注意QT项目这里要把头文件和ui添加进去
add_executable(MyQtApp ${SRC_FILES} ${HEADER_FILES} ${UI_FILES})

target_include_directories(MyQtApp PRIVATE "${CMAKE_SOURCE_DIR}/header")

# 链接 Qt6 库
target_link_libraries(MyQtApp Qt6::Widgets)

mainwindow.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

// Qt的命名空间包裹宏
QT_BEGIN_NAMESPACE
// 提前声明Ui::MainWindow类,实际实现在ui_mainwindow.h中(由UIC自动完成将.ui文件转换为.h文件)
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

// 主窗口类,QMainWindow继承自QWidget,这里也可以直接继承QWidget
class MainWindow : public QMainWindow {
// 私有必须的宏,用于支持信号与槽、动态属性、国际化和运行时反射功能
// 使用 Q_OBJECT 后,moc 工具会为类生成信号与槽和元对象支持的代码。
Q_OBJECT

public:
// 构造函数,设置默认参数为nullptr,parent用于指定父窗口(为nullptr时表示顶级窗口))
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
// Ui命名空间下的MainWindow类指针,该类继承了UIC生成的.h中的类,可以访问UI中的控件,ui->
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "mainwindow.h"

// ui文件通过UIC生成的头文件
#include "./ui_mainwindow.h"

// 构造函数实现:默认参数parent为nullptr,调用父类QMainWindow的构造函数,之前类中ui指针初始化
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) {
// ui_mainwindow.h中的setupUi函数,用于初始化控件
ui->setupUi(this);
}

MainWindow::~MainWindow() { delete ui; }

ui_mainwindow.h

UIC工具.ui文件生成的.h文件,它负责定义和初始化用户界面中的控件和布局

  • setupUi:初始化控件
  • retranslateUi:国际化支持
1
2
3
namespace Ui {
class MainWindow: public Ui_MainWindow {};
}
  • 提供派生类供直接调用,就是mainwindow.h中的ui::MainWindow

  • 可以操作setupUi(在mainwindow.cpp中有体现)和retranslateUi方法和ui控件。(ui->)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 6.8.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
QWidget *centralwidget;
QMenuBar *menubar;
QStatusBar *statusbar;

void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName("MainWindow");
MainWindow->resize(800, 600);
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName("centralwidget");
MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
menubar->setObjectName("menubar");
menubar->setGeometry(QRect(0, 0, 800, 21));
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName("statusbar");
MainWindow->setStatusBar(statusbar);

retranslateUi(MainWindow);

QMetaObject::connectSlotsByName(MainWindow);
} // setupUi

void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
} // retranslateUi

};

namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "mainwindow.h"

// Qt头文件
#include <QApplication>

int main(int argc, char *argv[]) {
// QT应用程序对象,该对象用于初始化应用程序,并处理事件循环
QApplication a(argc, argv);

// MainWindow类的对象(在mainwindow.cpp)
MainWindow w;

// 显示窗口
w.show();

// 进入事件循环(如窗口上的按钮、鼠标等))
return a.exec();
}
上一篇:
qt程序执行过程.md
下一篇:
qtcreator配置Github Copilot