当前位置: 首页 > article >正文

【QT5 Widgets示例】记事本:(一)项目创建

文章目录

  • 记事本:(一)项目创建
    • main.cpp
    • notepad.ui
    • notepad.h
    • notepad.cpp
    • notepad.pro

这一系列博客将通过使用C++和Qt Widgets(控件)模块实现一个简单的记事本应用程序。该应用程序的功能包括:新建文件,打开文件,保存文件,另存为,打印;复制,剪切,粘贴;加粗,斜体,下划线,字体;撤回,取消撤回;关于,退出x。

记事本:(一)项目创建

首先,打开QT Creactor,创建记事本项目。选择文件>新建文件或项目>Application(QT)>Qt Widgets Application>choose,然后按照向导的说明进行操作即可。

在这里插入图片描述
在“类信息”对话框中,键入Notepad作为类名,并选择QMainWindow作为基类。

在这里插入图片描述
Qt Widgets Application向导创建了一个项目,其中包含一个主源文件和一组指定用户界面的文件:

  • notepad.pro:这个文件是 Qt Creator 或 qmake 工具用于构建项目的核心配置文件。它包含了项目名称、源文件列表、依赖的库、编译选项等关键信息。
  • main.cpp:应用程序的主源文件。main.cpp 是程序的入口点,包含了 main 函数。这个函数负责初始化 QApplication 对象,创建并显示主窗口(在这个项目中是 Notepad 类的实例),并进入事件循环。
  • notepad.cpp:Notepad类的源文件。这个文件包含了 Notepad 类的成员函数的具体实现,用于实现记事本应用的各种功能。
  • notepad.h:Notepad类的头文件。notepad.h 声明了 Notepad 类及其成员变量和成员函数。
  • notepad.ui:这个文件是由 Qt Designer 创建的,用于定义记事本的图形用户界面。

这些文件都附带了必要的代码,以便构建和运行项目。运行后效果如下:

下面将对各个文件进行介绍。

main.cpp

//以下行包括Notepad widget和QApplication的头文件。所有Qt类都有一个对应的头文件。
#include "notepad.h"
#include <QApplication>

// 定义了主函数,它是所有基于C和C++的应用程序的入口点:
int main(int argc, char *argv[])
{
    QApplication EditorApp(argc, argv);
    Notepad Editor;
    Editor.show();

    return EditorApp.exec();
}

QApplication EditorApp(argc, argv);创建了一个QApplication对象。此对象管理应用程序范围内的资源,是运行任何使用Qt widget的Qt程序所必需的。

Notepad Editor;创建Notepad对象。向导已经为这个对象创建了相应的类头文件,源文件和UI文件。Qt中用户界面所包含的视觉元素被称为widget (控件),例如文本编辑框、滚动条、标签和按钮等等。

Editor.show(); 会在屏幕上的窗口中显示记事本widget。widget默认是不可见的;show()函数可以使小部件变得可见。

return EditorApp.exec();使 QApplication 进入其事件循环。当Qt应用程序运行时,会生成事件并将其发送到应用程序的widget。事件的示例包括鼠标按下和键盘按键。

notepad.ui

Qt Designer是一款可视化UI设计工具,用于快速创建Qt程序的用户界面,而这些界面都被保存为XML格式的文件,文件扩展名为.ui。当你在Qt Creator中打开notepad.ui文件时,它会自动在集成的Qt Designer中打开。

在这里插入图片描述
在这个文件上可以设计应用程序的界面。

可以在代码编辑器中查看生成的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="Notepad">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget"/>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>26</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

<?xml version="1.0" encoding="UTF-8"?>包含XML声明,该声明指定了文档中使用的XML版本和字符编码:

<ui version="4.0">指的是该UI文件遵循的Qt Designer UI文件格式版本。

文件的其余部分指定了一个定义记事本部件的ui元素:

当你构建应用程序时,Qt Creator会启动Qt用户界面编译器(uic),该编译器会读取notepad.ui文件并创建一个对应的C++头文件,即ui_notepad.h,用于与Notepad类进行交互。

notepad.h

向导为记事本类生成了一个头文件,其中包含了必要的#include指令、一个构造函数、一个析构函数以及一个Ui对象。该文件看起来如下:

// 防止头文件的内容在同一个编译单元中被多次include 
#ifndef NOTEPAD_H
#define NOTEPAD_H

#include <QMainWindow>

// 在Ui命名空间中声明了Notepad类,这是uic工具从.Ui文件生成的Ui类的标准命名空间
QT_BEGIN_NAMESPACE
namespace Ui { class Notepad; }
QT_END_NAMESPACE

class Notepad : public QMainWindow
{
	// 这个宏为普通的C++类增加了多种功能,常用的是信号与槽(Signals & Slots)功能。
    Q_OBJECT

public:
	// 构造函数,`parent = nullptr`表示该部件没有父级(它是顶级部件)。
    Notepad(QWidget *parent = nullptr);  
    ~Notepad();  // 析构函数

private:
    Ui::Notepad *ui; // 指向记事本UI类的指针
};
#endif // NOTEPAD_H

notepad.cpp

向导为Notepad 类生成的源文件如下:

// 包含由向导生成的Notepad类头文件和由uic工具生成的UI头文件
#include "notepad.h"
#include "ui_notepad.h"

// 定义构造函数
Notepad::Notepad(QWidget *parent)
    : QMainWindow(parent) 
    , ui(new Ui::Notepad)
{
    ui->setupUi(this);
}

// 定义析构函数
Notepad::~Notepad()
{
    delete ui; // 删除ui
}

QMainWindow(parent),调用了QMainWindow构造函数,QMainWindowNotepad类的基类:

ui(new Ui::Notepad)创建了UI类实例,并将其赋值给ui成员:

ui->setupUi(this);将由Qt Designer创建的UI布局和控件初始化并应用到当前的窗口或对话框实例(Notepad实例)上。

notepad.pro

向导为我们生成以下项目文件notepad.pro,这个文件是qmake项目文件,用于定义如何构建和部署Qt应用程序。

# 指定项目模板为应用程序
TEMPLATE = app

# 设置目标应用程序的名称
TARGET = notepad

# 添加所需的Qt模块
# core模块提供非GUI功能,如字符串处理、文件访问等
# gui模块提供窗口系统集成、事件处理、2D图形等功能
QT += core gui

# 如果Qt的主版本号大于4,则额外添加widgets模块
# widgets模块提供了一套UI元素来创建经典桌面风格的用户界面
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

# 配置项目以使用C++11标准
CONFIG += c++11

# 你可以让使用了已弃用API的代码无法编译通过
# 为了实现这一点,可以取消注释以下行
# DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # 禁用Qt 6.0.0之前弃用的所有API

# 指定源文件
SOURCES += \
    main.cpp \
    notepad.cpp

# 指定头文件
HEADERS += \
    notepad.h

# 指定Qt Designer表单文件
FORMS += \
    notepad.ui

# 默认部署规则
# 对于qnx平台,将目标文件放置在/tmp/$${TARGET}/bin目录下
qnx: target.path = /tmp/$${TARGET}/bin
# 对于非Android的Unix平台,将目标文件放置在/opt/$${TARGET}/bin目录下
else: unix:!android: target.path = /opt/$${TARGET}/bin
# 如果target.path不为空,则添加安装目标
!isEmpty(target.path): INSTALLS += target

参考:
https://doc.qt.io/qt-5/qtwidgets-tutorials-notepad-example.html


http://www.kler.cn/a/578858.html

相关文章:

  • 基于PyTorch的深度学习3——非标量反向传播
  • Linux下的shell指令(二)
  • 计算机三级网络技术知识点汇总【7】
  • 打破界限!家电行业3D数字化营销,线上线下无缝对接
  • 【计算机网络】确认家庭网络是千兆/百兆带宽并排查问题
  • 深度解析:视频软编码与硬编码的优劣对比
  • 第十五届蓝桥杯省赛电子类单片机学习过程记录(客观题)
  • 旋转位置编码 (2)
  • 利用PHP爬虫根据关键词获取17网(17zwd)商品列表:实战指南
  • ABeam 德硕 | 中国汽车市场(1)——正在推进电动化的中国汽车市场
  • Android View设置圆角方式大全
  • LDR6500:革新手机OTG充电体验的关键芯片
  • MySQL快速使用Windows压缩包创建测试数据库
  • 基于javaweb的SpringBoot+MyBatis自习室座位管理系统设计和实现(源码+文档+部署讲解)
  • C#编译自动增加文件的版本号
  • 在Vue中 使用 Web Worker
  • 基于大数据的电影情感分析推荐系统
  • JVM_八股场景题
  • 从技术角度看大语言模型进化技术路线与落地应用详解:未来的最佳实践方向是什么?
  • mybaties中使用的设计模式