qt入门介绍

news2024/11/18 11:42:10

1.Qt 是一个跨平台的 C++开发库。主要用来开发图形用户界面(GUI)程序。

Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;

Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、

访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。

2.安装qt


wget http://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.run
chmod +x qt-opensource-linux-x64-5.12.9.run
sudo ./qt-opensource-linux-x64-5.12.9.run

3.新建一个项目

Console 用来创建控制台程序,Widgets 用来创建GUI程序。

1)QMainWindow:主窗口类,主窗口具有主菜单栏、工具栏和状态栏。 类似于一般的应用程序的主窗口。如果您想做个嵌套的窗口程序开发的软件,不妨选择这个 QMainWindow。

2)QWidget:是可视界面类的基类,也就是说 QMainWindow 类也是由 QWidget 继承封装而来。

所以 QWidget 要比 QMainWindow 功能少一些。

3)QDialog:对话框类,建立一个对话框界面。比较少使用此项作为基类。 一般以 QMainWindow和 QWidget 作为基类的居多。 注因为 QWidget 不带窗口标题栏等, 嵌入式里最好 QWidget。

4.qt工程说明

1)hello.pro 是项目管理文件,这个项目管理文件十分重要,当您加入了文件或者删除了文件, Qt Creator 会自动修改这个*.pro 文件。有时候需要打开这个*.pro 文件添加我们的设置项。

2)Header 分组,这个节点下存放的是项目内所有的头文件*.h。

3)Source 分组,这个节点下存放的是项目内的所有 C++源码文件*.cpp。

4)Forms 分组,这个节点下是存放项目内所有界面文件*.ui。 *.ui 文件由 XML 语言描述组成,编译时会生成相应的 cpp 文件,这样交叉编译器就可以编译它了。

5.项目文件*.pro

QT  += core gui  //添加了 Qt 的支持的模块,core与gui库是Qt的默认设置。
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //如果是Qt5版本,在main.cpp 中 application 是在 QtWidgets 中的,因此要包含这个库。

/* 配置 */
CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS

/* SOURCES下的是源文件 */
SOURCES += \
    main.cpp \
    mainwindow.cpp
    
/* HEADERS下是头文件 */
HEADERS += \
    mainwindow.h

/* FORMS 下是ui界面文件 */
FORMS += \
    mainwindow.ui

/* qnx:判断是不是 qnx 操作系统,赋值 target.path = /temp/$${TARGET}/bin。 */
qnx: target.path = /tmp/$${TARGET}/bin
/* 如果是unix系统但不是安卓,赋值 target.path = /opt/$${TARGET}/bin。 */
else: unix:!android: target.path = /opt/$${TARGET}/bin
/* 如果target.path为空目录, 赋值 INSTALLS += target。 */
!isEmpty(target.path): INSTALLS += target

6.样式文件*.ui

1) ①是控件栏,有各种各样的控件,上方的 Filter 是过滤器,输入首写字母就可以快速定到我们想要找的控件。

2) ②显示的是我们的窗口程序了,上面已经带有 MainWindow 对象及其几个子对象, 默认MainWindow 就带有菜单栏和状态栏。

3) ③是对象栏, ②处用到的对象都在③处显示。

4) ④是属性栏, 点击③处对象栏的某个对象,就可以在④属性栏里编辑它的属性了。 属性项有很多,包括位置,大小,文字,颜色,字体等等。

7.头文件*.h

点击项目下的 Headers 下的 mainwindow.h,mainwindow.h 一般有与之对应的一个 cpp 文件叫 mianwindow.cpp。 其中 mainwindow.h 包含类的声明, mianwindow.cpp 包含类的实现。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
/* 定义名称空间 Ui ,里面有一个类 MainWindow。
   这个 MainWindow 和下面的 MainWindow 不是同一个对象。
   这个文件里的 MainWindow 类有一个成员*ui 就是指向最下面的 Ui::MainWindow 的指针。这都是为了使用.ui 文件设计界面的。
*/
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    /*  MainWindow 的声明中第一行是 Q_OBJECT,
       这是一个宏,由 Qt 进行处理,这也是 Qt 针对 C++扩展的地方,所有用到信号的类都要加这个宏。 */
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

8.源文件*.cpp

1)Sources 下的 mainwindow.cpp

#include "mainwindow.h"
/*  MainWindow 的实现类中,#include "ui_mainwindow.h"这个文件是 Qt 根据.ui 文件自动生成的,
    也就是说 ui_mainwindow.h 要点击编构建后才生成,我们才能看到这个文件。 
    构建/编译后可以在 debug/release 的目录找到这个文件。
 */
#include "ui_mainwindow.h"

/* 在 MainWindow 构造函数中用“,”隔开,
   new 一个 Ui 中的 MainWindow。
   这里是一种初始化成员的方法。
 */
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    /* 将this(指的是 MainWindow 类的本身),作为参数传到setupUi里,ui界面文件的对象会以this为父对象,所有子对象都将显示在MainWindow里。
       要想使用 ui 里的对象,必须将代码写在 ui->setupUi(this)这句话之后,
       因为 ui->setupUi(this)会先初始化里面的对象,只有初始化里面的对象我们才能使用这个对象。
       注:this 在成员函数的开始执行前构造的,在成员的执行结束后清除。
    */
    ui->setupUi(this); //进行界面初始化
}

MainWindow::~MainWindow()
{
    /* 析构函数里 delete 掉 ui。 
       在 Qt里我们需要在析构函数里 delete的对象一般是 new创建的并且没有父对象的对象。
     */
    delete ui;
}

2)Sources 下的 main.cpp

#include "mainwindow.h"

/* 在每一个使用 Qt 的应用程序中都必须使用一个QApplication 对象。
   QApplication 管理了各种各样的应用程序的广泛资源,比如默认的字体和光标。
 */
#include <QApplication> 

/* argc 是命令行变量的数量,argv 是命令行变量的数组。 */
int main(int argc, char *argv[])
{
    QApplication a(argc, argv); //a 是这个程序的 QApplication。它在这里被创建并且处理这些命令行变量。
    MainWindow w;               //创建一个对象 w,这个对象就是 MainWindow。
    w.show();                   //调用方法 show()。这样程序界面才能显示
    
    /* 这里就是 main()把控制转交给 Qt,并且当应用程序退出的时候 exec()就会返回。
       在 exec()中, Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
     */
    return a.exec();  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/195197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【css】前端拉下代码后,node-sass sass-loader 与node版本不符怎么办

因为每次node和sass版本匹配都容易出现问题&#xff0c; 所以如果我自己开发&#xff0c;我不使用sass或者less&#xff0c;只用原生css 但如果是拉下来的项目&#xff0c;别人已经成功使用&#xff0c;webview版本 和 sass已经匹配&#xff0c;只需考虑 node版本匹配。 根据…

Hive分析函数系列文章

Hive分析窗口函数(一) SUM,AVG,MIN,MAXhttps://blog.csdn.net/weishuai90/article/details/128843715 Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANKhttps://blog.csdn.net/weishuai90/article/details/128858824 Hive分析窗口函数(三) CUME_DIST,PERCENT_RANKhttp…

Object类有什么作用?怎样使用Object类?

在Java中提供了一个Object类&#xff0c;它是所有类的父类&#xff0c;即每个类都直接或间接继承自该类&#xff0c;因此&#xff0c;Object类通常被称之为超类、基类或根类。当定义一个类时&#xff0c;如果没有使用extends关键字为这个类显示地指定父类&#xff0c;那么该类会…

【微积分易错点总结】函数、极限和连续

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a; &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最大的激励…

DSPE-PEG-DOTA,磷脂聚乙二醇大环配体 二硬脂酰基磷脂酰乙醇胺- 聚乙二醇-四氮杂环配体

中文名称&#xff1a;二硬脂酰基磷脂酰乙醇胺- 聚乙二醇-四氮杂环配体 英文名称&#xff1a;DSPE-PEG-DOTA 别称&#xff1a;1,2-distearoyl-sn-glycero-3-phosphoethanolamine-poly(ethylene glycol)-DOTA PEG分子量&#xff1a;1000、2000、3400、5000等等 用 途&#xf…

《流浪地球2》的现实倒影(一):从量子计算机到MOSS

编者按&#xff1a;跟大家一样&#xff0c;《流浪地球2》的上映让我们感到无比兴奋。作为科技领域的内容创作者&#xff0c;在《流浪地球2》中不仅看到了中国科幻电影与电影工业的崛起&#xff0c;更看到了大量现实中真实存在的科技脉络。由于这部电影在科技方面的基本功非常扎…

RK3568平台开发系列讲解(驱动基础篇)自旋锁详解

🚀返回专栏总目录 文章目录 一、什么是spinlock 自旋锁二、什么是raw_spinlock原始自旋锁三、自旋锁的使用3.1、spinlock 自旋锁相关API3.2、raw_spinlock原始自旋锁相关API沉淀、分享、成长,让自己和他人都能有所收获!😄 📢自旋锁用于处理器之间的互斥,适合保护很短的…

Python枚举类定义和使用

一些具有特殊含义的类&#xff0c;其实例化对象的个数往往是固定的&#xff0c;比如用一个类表示月份&#xff0c;则该类的实例对象最多有 12 个&#xff1b;再比如用一个类表示季节&#xff0c;则该类的实例化对象最多有 4 个。针对这种特殊的类&#xff0c;Python 3.4 中新增…

@WebServlet注解的解释和使用

大家好&#xff0c;今天分享一下WebServlet注解 首先&#xff0c;我们要知道&#xff0c;我们要写一个servlet程序,web,xml里的配置项很重要,里面包含了很多关于类绑定&#xff0c;以及服务器资源的请求路径问题&#xff08;就是注册&#xff09; 先把我这个看一遍&#xff0c…

【蓝桥杯】历届真题 完全二叉树的权值(省赛)Java

【资源限制】 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 【问题描述】 给定一棵包含N个节点的完全二叉树&#xff0c;树上每个节点都有一个权值&#xff0c;按从上到下、从左到右的顺序依…

SpringBoot将项目打包成JAR包或者WAR包

SpringBoot将项目打包成JAR包或者WAR包前言打包成JAR包打包成WAR包打包遇到的问题Maven环境问题跳过测试并打包前言 本文开发工具使用IDEA&#xff0c;已配置好Maven环境&#xff0c;如果未配置的可以参考另外一篇文章: Maven如何配置阿里镜像及安装全步骤 打包成JAR包 默认…

【C++】继承——切片、隐藏、默认成员函数、菱形

文章目录一、继承概念及定义二、赋值转换——切片三、继承的作用域——隐藏四、派生类的默认成员函数五、继承与友元六、继承与静态成员七、菱形继承及菱形虚拟继承八、继承与组合九、结语一、继承概念及定义 概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最…

刚毕业小白软考中级什么专业合适?

如果只是想考取软考中级证书&#xff0c;可以考虑比较热门的考试项目&#xff0c;当然具体还是要看和自己的职业发展和需求是否匹配为前提&#xff0c;这样对于自己今后的职业生涯规划也有一定帮助。中级科目介绍&#xff1a;软考中级备考攻略&#xff1a;反正只要认真备考&…

使用PyTorch构建卷积GAN源码(详细步骤讲解+注释版) 02人脸图片生成 上

阅读提示&#xff1a;本篇文章的代码为在普通GAN代码上实现人脸图片生成的修改&#xff0c;文章内容仅包含修改内容&#xff0c;全部代码讲解需结合下面的文章阅读。 相关资料链接为&#xff1a;使用PyTorch构建GAN生成对抗 本次训练代码使用了本地GPU计算。 1 CelebADataset类…

2023.1.23-1.29 AI行业周刊(第134期):春节回家乡的感受

春节的假期&#xff0c;时间过得很快。 年前回家在路上的时候&#xff0c;就考虑到过年时间短暂&#xff0c;但是当大年初六和家乡别离&#xff0c;和大姐二姐们再见的时候&#xff0c;心中还是充满了不舍。 2022年初回家过年的画面还印在脑海中&#xff0c;和家乡相聚的频率…

【自然语言处理】文本分析:非结构化信息分析科学与应用导论(主题建模)

文本分析&#xff1a;非结构化信息分析科学与应用导论&#xff08;主题建模&#xff09;1.介绍 文本聚类可以将数据&#xff08;这里即指文本&#xff09;按照一定规则划分为不同的群组&#xff0c;理想情况下可以从聚类结果中发现一些有趣的模式。不同聚类方法的一致性意义和…

QT 使用线程完成串口数据的读写,并把数据传递给主线程

1、之前做串口通信的时候直接在主线程 用了api实现&#xff0c;这种只做个串口助手是OK的&#xff0c;但是在大型项目中这样做会占用主线程的时间&#xff0c;数据量大的时候不确定有多卡顿。 2、看了网上很多资料&#xff0c;没一个写的是对的&#xff0c;主要错在 QSerialPo…

Linux-用户及文件权限管理

目录1、Linux 用户管理1.1 查看用户1.2 创建用户1.3 用户组1.4 删除用户和用户组2、Linux文件权限2.1 查看文件权限2.2 变更文件所有者2.3 修改文件权限3、补充1、Linux 用户管理 Linux可以实现多用户登录&#xff0c;A和B用户可以同时登录同一台主机&#xff0c;虽然他们的文…

IT帮助台如何帮助企业进行人力资源管理

在大多数组织中&#xff0c;HR 服务管理流程从内部聊天或电话开始&#xff0c;以 Word 文档和 Excel 工作表结束。以这种老式的方式管理所有这些信息变得非常乏味&#xff0c;因为 组织成长。大多数组织&#xff0c;即使有人力资源管理系统&#xff0c;也使用过时的系统&#x…

2-3-内存泄漏和内存溢出

1、内存泄漏和内存溢出区别 内存泄漏&#xff1a;是指程序在申请内存后&#xff0c;无法释放已申请的内存空间&#xff0c;一次内存泄漏似乎不会有大的影响&#xff0c;但内存泄漏堆积后的后果就是内存溢出。 内存泄漏是指你向系统申请分配内存进行使用(new)&#xff0c;可是…