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

Qt开发第一讲

一、Qt项目里面有什么?

对各个文件的解释:

Empty.pro文件

QT       += core gui   # 要引入的Qt模块,后面学习到一些内容的时候可能会修改这里
#这个文件相当于Linux里面的makefile文件。makefile其实是一个非常古老的技术了。
#qmake搭配.pro起到作用和makefile是类似的。
#Qt creator 把这个过程中编译的细节都封装好了,不需要过多的关注,只需要点击运行按钮,就直接编译运行了
greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11 #编译选项# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \          main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui
#描述了当前项目中,参与构建的文件都有啥(编译器要编译哪些文件)
#这个地方不需要手动修改,Qt Creator帮我们自动维护好# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target# 项目的工程文件,也是qmake构建时候的重要依据。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
//要想使用这个类,就需要包含对应的头文件。Qt
//的设定,使用Qt中内置的类,包含的头文件的名字就是和类名一致的
#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
//创建项目时,选择的父类。
class MainWindow : public QMainWindow
{Q_OBJECT  //是一个Qt内置的宏,宏本质上是文本替换//Qt中有一个非常核心的机制,信号和槽,如果某个类想使用信号和槽,就需要引入//Q_OBJECT这个宏public://Qt中引入了对象树机制,创建的Qt的对象,就可以把这个对象给挂到对象树上,往树上挂的时候//就需要指定父节点。MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui; //和form file密切相关。
};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"#include <QApplication>
//入口函数,命令行参数的个数,argv命令行参数。
int main(int argc, char *argv[])
{//编写一个Qt的图形化界面程序,一定需要有QApplication对象!QApplication a(argc, argv);//创建一个控件对象,并显示出来。它的父类是QWidget,都是QWidget提供的。MainWindow w;//show方法让空间显示出来w.show();//让空间隐藏//w.hide();return a.exec(); //让程序执行起来。在linux中我们学过exec*系列函数,把可执行文件中的代码和数据,替换到当前进程中//但在这里,只是名字恰好一样
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
//构造和析构的实现
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) //把form file生成的界面和当mainwindow关联起来
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>  //xml格式的文件,和html相似。
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><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>

二、Qt Hello World 程序

两种方式实现hello world

1、通过图形化的方式,在界面上创建出一个空间,显示hello world

Qt Designer右上角,通过树形结构,显示出了当前界面上都有哪些控件。

2、通过纯代码的方式,通过编写代码,在界面上创建控件,显示hello world

#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* label = new QLabel(this);label->setText("hello world");
}Widget::~Widget()
{delete ui;
}

相关文章:

  • Unity 2D RPG Kit 学习笔记
  • 2024年合肥市职业院校技能大赛(中职组)赛 网络安任务书样题
  • 【生成模型】学习笔记
  • Java之线程篇七
  • react(3)
  • 以Flask为基础的虾皮Shopee“曲线滑块验证码”识别系统部署
  • pdf怎么编辑修改内容?详细介绍6款pdf编辑器功能
  • Java对象访问机制:句柄访问与直接指针访问
  • 自动化办公-Python中的for循环
  • excel 填充内容的公式
  • react 状态管理
  • 基于51单片机的温湿度上下限监测预警proteus仿真
  • TDD(时分双工 Time Division Duplexing)和FDD(频分双工 Frequency Division Duplexing)
  • Ruby基础语法
  • mTLS(Mutual TLS)即双向传输层安全,是一种安全通信协议,用于在客户端和服务器之间建立双向的身份验证和加密通道。
  • python3.6+scrapy+mysql 爬虫实战
  • Vue 2.3、2.4 知识点小结
  • 测试如何在敏捷团队中工作?
  • 将回调地狱按在地上摩擦的Promise
  • 讲清楚之javascript作用域
  • 前端js -- this指向总结。
  • 区块链分支循环
  • 使用SAX解析XML
  • 想写好前端,先练好内功
  • 译自由幺半群
  • 用element的upload组件实现多图片上传和压缩
  • 你对linux中grep命令知道多少?
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2)空速传感器
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (分布式缓存)Redis分片集群
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (一)WLAN定义和基本架构转
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (自适应手机端)行业协会机构网站模板
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Framework 3.5安装教程
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .Net环境下的缓存技术介绍