【QT】1.QT 基础入门

目录

一、新建项目

1. 新建项目

二、生成代码

1. main.cpp

2. widget.h / widget.cpp

3. widget.ui

4. .pro 文件

5. 运行后生成的文件

三、创建控件

1. Label(标签)

2. 编辑框

3. 一个简单的交互程序:点击按钮切换文字

四、乱码问题与文字输出

1. 编码问题

2. qDebug 输出

五、坐标系统


一、新建项目

1. 新建项目

  1. 启动:在 QT 的安装文件夹中,找到并运行QT Creator,然后在左上角的“文件”菜单中点击“新建”。

  2. 选择模板:由于 QT 支持 Python 等多种语言开发,QT Quick是 QT 自己的一套声明式语言和开发方式。我们使用 C++,因此选择默认的Widgets Application模板即可。

  3. 设置项目路径和名字:路径和名称不能包含中文。

  4. 构建系统选择:选择qmake,这是 QT 的经典构建工具。CMake也被部分开源项目使用,而Qbs已停止维护。​​​​​​​

  5. UI 文件(Formfile)

    • 在 QT 中创建图形界面的方式有两种:使用 C++ 代码创建,或使用Formfile图形界面创建。

    • 我们选用图形化方式快速编辑。​​​​​​​

    • 基类选择QWidget。​​​​​​​

  6. 其他选项:编译器选择等保持默认即可。

二、生成代码

1.main.cpp

#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }

创建 QT 项目后,会自动生成这些代码。

  1. main函数的形参即为命令行参数。

  2. QApplication:是编写 QT 应用程序时必须的类,管理应用程序的控制流和主要设置。

  3. show方法

    • Widget w;

    • w.show();

    • Widget是创建项目时输入的类名。

    • .show()用于显示窗口控件,改为.hide()则为隐藏。

  4. exec方法:与 Linux 的exec不同,这是启动应用程序的事件循环,让程序运行起来。

2.widget.h/widget.cpp

  1. 继承关系class Widget : public QWidget,即继承了创建项目时选择的基类QWidget

  2. Q_OBJECT:QT 内置的宏,展开后会生成一些代码,是 QT 信号和槽机制的核心所需。

  3. 构造函数和析构函数:​​​​​​​

  4. Ui::Widget *ui;:这个指针与.ui文件(Formfile)密切相关,用于访问界面上的控件。

3.widget.ui

  • 双击该文件会调用QT Designer,打开图形化编辑器,可以从左侧拖拽控件到界面上。

  • 返回代码编辑区可以看到其格式,本质上是XML文件。​​​​​​​

  • 这个区域已经被封装好了,我们只需运行程序即可看到界面。

4..pro文件

  • 这是 QT 的工程文件。

  1. QT += core gui:指定项目需要引入的 QT 模块。

  2. SOURCESHEADERSFORMS:这些部分列出了项目中的源文件、头文件和界面文件。通常不需要手动修改,QT Creator会自动维护。

5. 运行后生成的文件

  • 运行项目后,会生成一个build-开头的文件夹。

  • ui_widget.h是由widget.cpp里的setupUi调用(ui->setupUi(this);)所创建的。

  • 它根据.ui文件生成了具体的界面设置代码。

三、创建控件

1. Label(标签)

  1. 图形化创建

    • widget.ui中拖拽Label到界面上即可。​​​​​​​

    • 此时,在widget.ui文件里就会有一个QLabel标签。​​​​​​​

  2. 代码创建

    • widget.cpp的构造函数中创建。

    • main函数中有Widget w;这一行,创建Widget对象时就会调用构造函数,从而创建出画面。

    • 添加头文件:#include <QLabel>(QT 历史较早,有.h和没有.h的头文件都存在,两者都可以)。

    • 创建对象并指定父对象:

      QLabel* q1 = new QLabel(this); // this 就是 Widget w,给这个标签指定父对象 q1->setText("Hello World");
    • QT 有自己封装的字符串类QString。开发时std::stringQString都可以用,但QString在处理编码(尤其是中文)时更友好。

    • 注意:这里没有delete不会造成内存泄露。

      • 原因:QT 使用对象树机制,当父对象(Widget)被销毁时,会自动销毁其所有子对象(如这里的q1)。

    • 如果将QLabel对象创建在栈上(如QLabel q1(this);),在构造函数结束时它就会立即销毁,导致无法显示。​​​​​​​

2. 编辑框

  • 单行编辑框QLineEdit

  • 多行编辑框QTextEdit

  • 图形化实现:拖拽Line Edit控件到界面上即可。

  • 代码实现

    cpp

    QLineEdit* q = new QLineEdit(this); q->setText("hello world");

3. 一个简单的交互程序:点击按钮切换文字

  1. 图形界面实现

    • 拖拽一个Push Button到界面上。

    • 使用connect函数连接信号与槽:

      cpp

      connect(ui->pushButton, &QPushButton::clicked, this, &Widget::changeText);
      • ui->pushButton代表按钮的对象名(可以在界面右侧的属性编辑器中修改)。​​​​​​​

      • &QPushButton::clicked表示接收按钮的“被点击”信号。

      • this代表接收信号的对象(当前Widget)。

      • &Widget::changeText代表接收到信号后要执行的操作(槽函数),需要在Widget类中实现。

    • 实现槽函数changeText

      cpp

      void Widget::changeText() { if (ui->pushButton->text() == QString("hello world")) ui->pushButton->setText("hello qt"); else ui->pushButton->setText("hello world"); }
  2. 使用 Lambda 表达式一步搞定

    connect(ui->pushButton, &QPushButton::clicked, this, [this]() { if (ui->pushButton->text() == QString("hello world")) ui->pushButton->setText("hello qt"); else ui->pushButton->setText("hello world"); });
  3. 纯代码实现

    • 首先,在widget.hWidget类中添加成员变量:QPushButton* pushButton;

    • widget.cpp的构造函数中创建并连接:

      pushButton = new QPushButton(this); connect(pushButton, &QPushButton::clicked, this, &Widget::changeText);
    • 实现changeText槽函数(与图形化实现中的函数体类似,只是将ui->pushButton换成pushButton)。

四、乱码问题与文字输出

1. 编码问题

  • 计算机中汉字占用的字节数取决于编码格式:GBK为 2 字节,UTF-8为 3 字节。

  • Windows 系统默认使用GBK编码,Linux 系统默认使用UTF-8编码。

  • QT 默认使用UTF-8编码。如果源文件编码不一致,可能会导致中文显示乱码。

2. qDebug 输出

  • qDebug()可以自动处理编码问题,方便地输出调试信息。

    qDebug() << "你好" << '\n';
  • 此外,qDebug还可以通过宏定义等方式统一关闭所有调试信息的打印,便于发布。

五、坐标系统

  • QT 使用左手系坐标:Y 轴向下为正方向,X 轴向右为正方向。

  • QWidget设置位置(如使用move函数)时,坐标是相对于其父控件(父窗口)的,(0, 0)点就是父窗口的左上角。

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

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

相关文章

嵌入式TCP/IP协议栈:轻量高效实现指南

目录 一、嵌入式 TCP/IP 协议栈的核心定义 核心特点&#xff08;嵌入式适配性&#xff09; 二、嵌入式 TCP/IP 协议栈的分层架构&#xff08;简化版&#xff09; 各层核心功能&#xff08;嵌入式视角&#xff09; 1. 物理层 数据链路层&#xff08;底层&#xff09; 2. …

青少年学困干预的APCF数字化路径探讨

针对青少年“无效努力”“动力缺失”等学习困境&#xff0c;本文系统剖析树懒魔方联合陈广汕老师团队开发的APCF整合咨询体系。该体系基于心理测量学与认知科学&#xff0c;通过学业&#xff08;Academy&#xff09;、心理&#xff08;Psychology&#xff09;、行为发展&#x…

黑盒之光——机器学习三要素在安全领域的投影

黑盒之光——机器学习三要素在安全领域的投影引言&#xff1a;炼金术士的三个坩埚在人工智能的语境下&#xff0c;我们常把机器学习&#xff08;Machine Learning&#xff09;比作一个“黑盒”。数据从一端输入&#xff0c;经过无数次复杂的矩阵运算&#xff0c;结果从另一端输…

背了就忘?法考记忆底层逻辑:用“场景联想”代替死记硬背

死记硬背没用&#xff1f;你只是没找对记忆逻辑很多考生都有这样的崩溃时刻&#xff1a;刚背完的刑法构成要件&#xff0c;合书就忘&#xff1b;昨天才记的物权变动规则&#xff0c;今天看又像新知识点。别再怪自己 “记性差”&#xff0c;问题不在你的大脑&#xff0c;而在于你…

亲测好用专科生必看8款AI论文平台测评

亲测好用专科生必看8款AI论文平台测评 2026年专科生必备AI论文平台测评指南 随着人工智能技术的不断进步&#xff0c;越来越多的专科生开始借助AI工具提升论文写作效率。然而&#xff0c;面对市场上琳琅满目的AI论文平台&#xff0c;如何选择真正适合自己的工具成为一大难题。为…

大数据专业工作岗位分析和可视化系统开题报告

一、研究背景与意义 &#xff08;一&#xff09;研究背景 在数字经济加速渗透的当下&#xff0c;数据已成为驱动产业升级、企业决策的核心生产要素&#xff0c;大数据技术的广泛应用催生了对专业人才的爆发式需求。据中国信通院发布的《中国大数据产业发展白皮书》显示&#…

ARM 运算中的MSB(最高有效位)

ARM 运算中的MSB&#xff08;最高有效位&#xff09; 在ARM架构&#xff08;以及所有二进制计算系统&#xff09;中&#xff0c;MSB 是 Most Significant Bit 的缩写&#xff0c;中文通常译为 最高有效位。 它指的是一个二进制数中权重最大的那一位&#xff0c;也就是位于最左边…

APP激励视频广告优化,从点位选择到奖励设计实践思考

在应用变现领域&#xff0c;激励视频广告因其独特的价值交换模式&#xff0c;成为平衡用户体验与收益的关键策略之一。这种广告形式让用户通过观看一段短视频来获取应用内奖励&#xff0c;其核心在于为用户提供明确价值&#xff0c;并让他们自主选择是否参与。激励视频广告在游…

Node.js 用require.cache清除缓存优化热更新

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js热更新进阶&#xff1a;利用require.cache安全清除缓存的实战指南目录Node.js热更新进阶&#xff1a;利用require.cache安…

AiPy Pro 0.12 发布,问答模式升级、智能体智能匹配

亲爱的AiPy粉丝们&#xff0c;AiPy Pro 0.12今天正式发布&#xff01;本次更新聚焦交互优化&#xff0c;从智能体自动选择&#xff0c;到问答模式升级&#xff0c;让您的AI工作流更加流畅、智能、高效&#xff01;感谢您一路相伴&#xff0c;2026年让我们与AiPy一起开启更高效的…

地质工程一体化从入门到精通:油气勘探开发核心技术教程

地质工程一体化从入门到精通&#xff1a;油气勘探开发核心技术教程 第1章 入门&#xff1a;地质工程一体化认知基石 1.1 什么是地质工程一体化&#xff1f; 地质工程一体化是石油天然气勘探开发领域的系统工程方法论&#xff0c;核心是打破地质研究与工程实施的学科壁垒&#x…

2026独立站必看:9款提升流量与转化率的核心工具

在 2026 年&#xff0c;独立站已经不再是“信息差红利期”。早期&#xff0c;很多商家仅凭建站能力和基本运营&#xff0c;就能获得流量和销售优势&#xff1b;但随着市场参与者不断增多&#xff0c;独立站竞争已进入“工具与效率”的时代。 2026 年独立站将面临更严峻的竞争挑…

JSM466M 低功耗高灵敏度全极霍尔开关芯片

在物联网、消费电子、工业控制飞速发展的今天&#xff0c;霍尔开关芯片作为 “感知核心”&#xff0c;其性能直接决定了终端设备的响应速度、续航能力与稳定表现。长期以来&#xff0c;CC6207 凭借成熟的低功耗特性与全极传感优势&#xff0c;成为行业标杆性选择。而如今&#…

K-D Tree 模板

#include<bits/stdc++.h> using namespace std; using ld = long double; using ll = long long;const int MAXN = 200005; const ll INF = ll(2e18);template<int dimensions> struct kd_tree {struct Po…

【课程设计/毕业设计】基于nodejs的演唱会路演中小程序的设计与实现微信小程序 演唱会门票售票系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2026年8款免费降AI工具实测推荐,毕业党必看 - 还在做实验的师兄

实测了市面上主流的降AI工具后,推荐嘎嘎降AI(达标率99.26%,性价比最高)、比话降AI(自研Pallas引擎,知网AI率<15%有保障)作为首选。本文详细对比8款工具的效果、价格和适用场景,帮你快速找到最适合的那一款。…

基于深度学习的交通标志检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)

本文介绍了一套基于YOLO系列算法的交通标志检测系统。该系统采用深度学习技术,支持55种常见交通标志的识别,具备图片、视频、批量文件及实时摄像头检测功能。系统提供图形化界面,包含模型切换、参数调节、结果统计与…

安全服务是什么

安全服务并非单一产品&#xff0c;而是围绕安全需求展开的系统性解决方案&#xff0c;其核心定义可从服务目标与服务主体两方面解读。 以风险防控为核心目标&#xff1a;安全服务的核心目标是识别、规避、应对各类安全风险&#xff0c;包括网络攻击、数据泄露、系统漏洞等。通过…

毕业季来了!5款降AI率工具横评,最低能降到10%以下 - 还在做实验的师兄

知网AIGC检测系统升级后,传统同义词替换已失效。实测5款降AI率工具,嘎嘎降AI(达标率99.26%)和比话降AI(不达标全额退款)效果最稳定,能将AI率从90%+降到10%以下。本文分享真实测试数据和避坑指南。毕业季来了!5…

微信小程序毕设项目:基于nodejs的演唱会路演中小程序的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…