首页 > 其他分享 >【Qt秘籍】[005]-Qt第一次实战-运行

【Qt秘籍】[005]-Qt第一次实战-运行

时间:2024-05-29 15:01:31浏览次数:30  
标签:widget 窗口 Qt 秘籍 Widget QWidget 005 CMake

一、如何创建文件?

        当我们打开Qt Creator,你会发现整个界面类目繁多。现在,让我们直接开始新建一个项目。

1.点击左上角的“文件”==>点击“新建文件或项目”

2.如图,选择“Application”==>“Qt Wifgets application”==> “Choose...”


 

3.如图,选择填写名称和路径,点击下一步

【可以点击设为默认的项目路径

注意:路径中请勿使用中文,因为可能会导致后续的报错!

        

Qt的构建我该选什么?

在Qt中构建有三种选择,即:qmake、CMake、Qbs,接下来我们将逐一介绍。


qmake

        qmake是一种用于自动创建makefile的构建工具。Qmake支持跨平台施工。Qmake编辑带有后缀的文件。赞成的意见。


CMake

        CMake是一个跨平台的构建工具。CMake本身不是一个编译器,而是一个允许编译器理解编译过程的工具。让CMake采取行动来构建系统,例如Makefiles和Visual Studio项目文件。CMake是第三个具有大量文件的工具。


Qbs

        Qbs(QtbuildSuite:QtbuildSuite)与qmake相同,CMake工具都是构建工具。Qbs被称为下一代构建工具,具有更快的qmake编译速度。Qbs没有绑定到Qt版本,它根据项目的高级项描述生成正确的依赖关系表。创建传统的MakeFile工具,如qmake和CMake,在创建MakeFile工具后,将实际命令交给Make工具执行。


Qt官方声明:由于市场原因,Qbs已被弃用。对于Qt用户来说,Qmake是目前使用最广泛的构建工具,CMake位居第二。 

4.综上所述,如图,选择“qmake”

 Qt基类的关系是什么?

QWidget

        QWidget类是所有用户界面对象的基类。 窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。

QMainWindow

        QMainWindow类提供一个有菜单条锚接窗口(例如工具条)和一个状态条的主应用程序窗口。主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一个状态条。QMainWindow常常被继承,因为这使得封装中央部件、菜单和工具条以及窗口状态变得更容易。继承使创建当用户点击菜单项或者工具条按钮时被调用的槽成为可能。你也可以使用Qt设计器来创建主窗口。

QDialog

        QDialog类是对话框窗口的基类。对话框窗口是主要用于短期任务以及和用户进行简要通讯的顶级窗口。QDialog可以是模式的也可以是非模式的。QDialog支持扩展性并且可以提供返回值。它们可以有默认按钮。QDialog也可以有一个QSizeGrip在它的右下角,使用setSizeGripEnabled()。

三者关系图

 我们只需要使用Qwidget即可。

5.如图,选择“QWidget”然后点击下一步。

 

 注意:类名和文件名最好有关联性!以便于后续的代码编写。

Translation File是什么?

        选择翻译文件对应的语言,使得软件国际化若是以日常学习为用途,此处直接忽略。

6.如图,直接点击下一步。

7.如图,直接点击下一步。

 

8.如图,直接点击完成。

注意:如果想把代码提交到码云或者github,可以在此处选择git作为版本控制系统。

 

         通过上述8个步骤,终于完成了项目的创建。虽然看似复杂,但是当你熟练操作后,一套流程绝对行云流水,不到十秒即可创建完成!

二、程序的运行及代码解释

1.main.cpp

现在,你的屏幕面前会出现几行代码。

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

直接点击运行即可。 

运行后出现了一个矩形的空白窗口。 

 

2.widget.h

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

前两行代码保证头文件仅仅包含一次

//前两行代码保证头文件仅仅包含一次
#ifndef WIDGET_H
#define WIDGET_H
//等同于下列写法
#pragma once

 创建项目时,选择的父类,并且要包含头文件

#include <QWidget>//包含头文件,和类名一致

class Widget : public QWidget    //创建项目时,选择的父类
{

}

 Q_OBJECT是Qt内置的宏,展开后会生成大量代码

Q_OBJECT

 构造函数和析构函数(Qt引入“对象树”机制)

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

和form file密切相关

private:
    Ui::Widget *ui;

 3.widget.cpp

 widget.cpp

#include "widget.h"    //创建生成的头文件
#include "ui_widget.h"    //form file被qmake生成的头文件

Widget::Widget(QWidget *parent)    //构造函数
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);    //把form file生成的界面和当前widget关联起来
}

Widget::~Widget()    //析构函数
{
    delete ui;
}

4.form file -- widget.ui

双击后会调用 Qt Designer 打开ui文件,即为图形化的界面编辑器

左侧栏都是Qt中内置的控件。

如果我们拖拽左侧的控件到程序窗口中,就可以创建出具体的界面了。

右侧是编辑属性。

每个控件都有其独特的属性,影响到控件的行为。

点击点击左上角的编辑,就会显示ui文件的本体。

 这个格式实际上就是xml格式。类似于html,他们都是使用成对的标签表示数据。

笔者碎碎念: 虽然新建文件可能对你都是一个不小的挑战,不过好在你坚持了下来。当运行了第一个程序,你也相当于完成了Qt的hello world!

 

标签:widget,窗口,Qt,秘籍,Widget,QWidget,005,CMake
From: https://blog.csdn.net/restore_1/article/details/139293069

相关文章

  • Qt 动画类(QPropertyAnimation)
    前言QPropertyAnimation是QT中的一个动画类,用于对目标对象的属性进行动画效果展示。该类继承自QAbstractAnimation类,使用起来非常方便和灵活。一、QPropertyAnimation类介绍QPropertyAnimation可以对任何QObject的子类的属性进行动画的展示,只要该属性是可写的,即存在set方......
  • 【QT6】pycharm集成qt desinger(非anaconda等环境下)
    前言已经安装好了PyQT6,如果没有,请自行选择在项目或者全局打开cmd并输入:pipinstallPyQt6来进行安装!开始安装确定自己是否有安装pyside6,如果有,直接跳到下一步。。如果你没有安装过pyside6,任意地方打开cmd,输入:pipinstallpySide6安装完毕后,找到你python的安装目录:然后点进......
  • ⭐⭐⭐⭐⭐《JavaScript忍者秘籍》关键技术分享
    链接:pan.baidu.com/s/199LHxxIlMixw3gYSY8tyPw?pwd=ywxg提取码:ywxg基础语法与数据类型:介绍JavaScript的基本语法结构,包括变量、数据类型、运算符、条件语句、循环等。函数与高阶函数:深入讲解函数的定义、调用以及高阶函数的概念,如回调函数、闭包等。对象与原型链:解析JavaScri......
  • Qt UI界面组件介绍
    1.布局类(4种) 2.固定弹簧类(2种)(不随布局变化) 3.按钮类(6种) 4.容器类(10种)GroupBox类似于win7的日历框ToolBox类似于QQ的好友列表Tabwidget类似于 5.输入窗() 6.显示窗()......
  • 使用EMQX搭建MQTT服务
    简介:EMQX是一款开源的大规模分布式MQTT消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX5.0单集群支持MQTT并发连接数高达1亿条,单服务器的传输与处理吞吐量可达每秒百万级MQTT消息,同时保证毫秒级的低时延。EMQX支持多种协议,包括MQTT(3.1、3.1.1......
  • 西门子学习笔记3 - 工业物联网(MQTT协议服务器的搭建)
    这里使用的是公开测试的一个服务器(EMQX)的服务器EMQX是一款全球下载量超千万的开源物联网MQTT服务器,单集群支持1亿物联网设备连接,消息分发时延低于1毫秒,助力企业构建关键业务的IoT平台与应用。1、服务器文件的下载1、官方下载地址:免费下载、试用EMQ产品(emqx.com......
  • Linux下Qt Creator无法输入中文(已解决)
    1.首先确保安装了搜狗输入法,且能正常运行。2.克隆源码到本地。gitclonehttps://gitcode.com/fcitx/fcitx-qt5.git3.检查QtCreator版本,如下图所示,为基于Qt6的。4.进入源码目录,建立build文件夹,修改CMakeLists.txt。cdfcitx-qt5/mkdirbuildviCMakeLists.txt 由......
  • Day1_QT界面设计
    1、创建登录界面2、创建注册界面3、实现需求:启动程序主界面优先显式登录界面,点击注册后跳转到注册界面点击注册按钮,就会发出一个信号,这个信号由switchRegister来接收,该信号发送给mainWindow来切换界面connect(ui->reg_btn,&QPushButton::clicked,this,&LoginDialog::sw......
  • QT | 文件读写过程中丢失的 OD OA 问题解决
    今天发现QT以文本方式(QIODevice::Text)写入二进制0x0A会出现问题,写入的是一个字节(实际应该是两个字节),结果在Zed上看,显示是2个字节。明显每个0x0A前都多了个0x0D,导致我的bin文件全部都错位了期望的效果应该是原来按照字节流的形式输出文本时,ofstream会自动将输......
  • Qt error: LNK1104: 无法打开文件“release\xxxxx.exe”报错解决方案
    一、问题重述出现这种报错一般是程序运行之后存在空指针问题,然后直接崩溃掉,下一次调试的时候就出现这种报错。如下图所示:二、原因分析出现这种情况是因为上次运行之后,程序的exe文件异常退出了,但是其实还在后台运行中,然后重新调试的时候exe被占用,所以QT编译器无法打开......