QT学习笔记1


** Qt Creator开发环境配置**
  1. 安装流程(Windows平台)

    下载与安装

    1. 访问Qt官网,下载在线安装工具Qt Online Installer
    2. 登录或注册Qt账号,选择开源版本(需勾选“接受协议”)。
    3. 勾选组件:
      • 核心组件Qt 5.15.x(建议选择MSVC或MinGW套件)。
      • 工具链Qt CreatorQt DesignerQt Assistant
      • 附加工具CMakeNinja(可选)。
    • 环境验证
      打开Qt Creator,进入工具→选项→Kits,确认自动检测到编译器(如Desktop Qt 5.15.2 MSVC2019 64bit)。
  2. 界面组成与核心功能

    • 六大模式

      模式功能说明
      欢迎模式快速访问示例项目、教程、市场插件。
      编辑模式代码编写与调试,支持语法高亮、代码补全(快捷键Ctrl+Space)。
      设计模式集成Qt Designer,可视化拖拽UI控件(.ui文件操作)。
      调试模式断点调试、变量监控(快捷键F5启动)。
      项目模式管理构建配置(Debug/Release)、外部依赖。
      帮助模式集成Qt助手,搜索API文档(如输入QWidget查看类说明)。
    • 内置工具链

      • Qt Designer:设计UI界面,生成.ui文件(XML格式),支持信号槽预连接。
      • Qt Linguist:多语言翻译工具,管理.ts翻译文件。
      • Qt Assistant:离线文档库,支持关键词搜索与书签功能。

Hello World全流程开发
  1. 新建Qt Widgets项目

    • 操作步骤

      1. 点击文件→新建项目→Qt Widgets Application
      2. 设置项目名称(如Demo1)和路径,选择基类(QMainWindowQWidget)。
      3. 确认构建套件(如Desktop Qt 5.15.2 MSVC2019 64bit)。
    • 项目文件解析

      • .pro
        

        文件:

        qmake

        QT += core gui          # 依赖的核心模块
        greaterThan(QT_MAJOR_VERSION, 4): QT += widgets  # Qt5+需添加widgets模块
        TARGET = Demo1          # 生成的可执行文件名
        TEMPLATE = app          # 项目类型(应用程序)
        SOURCES += main.cpp     # 源文件列表
        HEADERS += mainwindow.h # 头文件列表
        FORMS += mainwindow.ui  # UI文件列表
        
  2. 界面设计与信号槽连接

    • Qt Designer操作

      1. 双击mainwindow.ui进入设计模式,拖拽控件(如按钮、标签)。
      2. 设置对象名(如pushButton)和属性(如文本、大小)。
      3. 右键按钮→转到槽,选择clicked()信号生成槽函数框架。
    • 代码对比

      IDE自动生成

      cpp

      // mainwindow.cpp(自动生成)
      void MainWindow::on_pushButton_clicked() {ui->label->setText("Hello Qt!");
      }
      

      手动编码

      cpp

      // 手动创建按钮并绑定信号槽
      QPushButton *btn = new QPushButton("点击", this);
      connect(btn, &QPushButton::clicked, [=](){qDebug() << "按钮被点击";
      });
      
  3. 编译与发布

    • 调试运行:点击构建→运行(快捷键Ctrl+R)。

    发布打包

    • Windows:使用

      windeployqt
      

      工具自动打包依赖的DLL:

      bash

      windeployqt Demo1.exe --release --no-translations
      
    • Linux:需配置LD_LIBRARY_PATH或静态编译。


** 窗口部件与GUI组件**
  1. QWidget核心功能

    • 窗口类型与属性

      cpp

      QWidget *window = new QWidget;
      window->setWindowTitle("主窗口");      // 标题
      window->resize(400, 300);            // 初始尺寸
      window->setWindowFlags(Qt::Dialog);  // 设置为对话框样式
      window->show();                      // 显示窗口
      
    • 模态与非模态对话框

      cpp

      // 模态对话框(阻塞父窗口)
      QDialog dialog(this);
      dialog.exec();// 非模态对话框(独立运行)
      QDialog *dialog = new QDialog(this);
      dialog->show();
      
  2. 常用组件分类

    框架类(QFrame)

    cpp

    QFrame *frame = new QFrame(this);
    frame->setFrameStyle(QFrame::Box | QFrame::Raised); // 边框样式
    frame->setLineWidth(2);                             // 边框宽度
    

    输入类组件

    QLineEdit输入验证:cpp```cpp
    QLineEdit *edit = new QLineEdit(this);
    QRegExpValidator *validator = new QRegExpValidator(QRegExp("[0-9]{3}"), this);
    edit->setValidator(validator); // 限制输入3位数字
    ```
    
    QSpinBox数值调节:cpp```cpp
    QSpinBox *spinBox = new QSpinBox(this);
    spinBox->setRange(0, 100);      // 数值范围
    spinBox->setSingleStep(5);      // 步长
    spinBox->setPrefix("¥");       // 前缀
    ```
    
  3. 调试输出

    cpp

    qDebug() << "当前数值:" << spinBox->value();  // 输出到控制台
    

布局管理
  1. 布局管理器类型

    • 水平布局(QHBoxLayout)

      cpp

      QHBoxLayout *layout = new QHBoxLayout;
      layout->addWidget(btn1);
      layout->addWidget(btn2);
      layout->setSpacing(10);       // 控件间距
      layout->setContentsMargins(20, 20, 20, 20); // 边距
      window->setLayout(layout);
      
    • 网格布局(QGridLayout)

      cpp

      QGridLayout *grid = new QGridLayout;
      grid->addWidget(label1, 0, 0); // 第0行第0列
      grid->addWidget(edit1, 0, 1);  // 第0行第1列
      grid->addWidget(btn1, 1, 0, 1, 2); // 跨2列
      
  2. 部件大小策略

    常用策略

    cpp

    btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); // 水平扩展,垂直固定
    

    拉伸因子

    cpp

    layout->setStretch(0, 1); // 第0个控件拉伸比例为1
    layout->setStretch(1, 2); // 第1个控件拉伸比例为2
    
  3. 高级布局技巧

    • 可扩展窗口
      使用QScrollArea包裹布局,当内容超出窗口时自动显示滚动条:

      cpp

      QScrollArea *scrollArea = new QScrollArea;
      scrollArea->setWidgetResizable(true);
      scrollArea->setWidget(mainWidget); // 将主控件放入滚动区域
      
    • 分裂器(QSplitter)

      cpp

      QSplitter *splitter = new QSplitter(Qt::Horizontal);
      splitter->addWidget(leftWidget);
      splitter->addWidget(rightWidget);
      splitter->setSizes({200, 400}); // 初始宽度比例
      
    • Tab键顺序设置
      在设计模式下点击编辑→编辑Tab键顺序,按逻辑顺序点击控件完成设置。


总结与练习建议

  1. 核心知识点
    • Qt Creator环境配置与项目创建流程。
    • 信号槽机制与手动/自动编码对比。
    • 布局管理器实现自适应界面。
  2. 推荐练习
    • 开发一个包含登录窗口和主窗口的应用,使用网格布局和信号槽传递数据。
    • 实现一个可动态调整大小的图片浏览器,结合QSplitterQScrollArea
  3. 注意事项
    • 避免直接修改ui_xxx.h文件,所有UI逻辑应在代码中动态调整。
    • 多平台开发时需测试不同编译套件(如MSVC/MinGW)的兼容性。

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

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

相关文章

单片机学完开发板,如何继续提升自己的技能?

很多人学完开发板后都会卡在一个尴尬的阶段&#xff1a;觉得自己会的东西不少&#xff0c;但又不知道下一步该干啥。会点C语言&#xff0c;能烧录程序&#xff0c;能点亮LED&#xff0c;玩转按键&#xff0c;搞定串口等等&#xff0c;能用开发板做点小玩意儿&#xff0c;但面对…

计算机网络——总结

01. 网络的发展及体系结构 网络演进历程 从1969年ARPANET的4个节点发展到如今覆盖全球的互联网&#xff0c;网络技术经历了电路交换到分组交换、有线连接到无线覆盖的革命性变革。5G时代的到来使得网络传输速度突破10Gbps&#xff0c;物联网设备数量突破百亿级别。 网络体系…

实验10决策树

实验10决策树 一、实验目的 &#xff08;1&#xff09;理解并熟悉决策树算法思想和原理&#xff1b; &#xff08;2&#xff09;熟悉决策树算法的数学推导过程&#xff1b; &#xff08;3&#xff09;能运用决策树算法解决实际问题并体会算法的效果&#xff1b; &#xff08;4…

【css酷炫效果】纯CSS实现悬浮弹性按钮

【css酷炫效果】纯CSS实现悬浮弹性按钮 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492020 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&…

【模块化编程】制作、可视化不平衡数据(长尾数据)(以Cifar-10为例)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;《PyTorch科研加速指南&#xff1a;即插即用式模块开发》-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎…

Linux操作系统7- 线程同步与互斥1(POSIX互斥锁的使用详解)

上篇文章&#xff1a;Linux操作系统6- 线程4&#xff08;POSIX线程的简单封装&#xff09;-CSDN博客 本篇代码仓库:myLerningCode/l30 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 目录 一. 线程不互斥造成的结果 二. pthread_mutex_t 互斥…

深入 Linux 声卡驱动开发:核心问题与实战解析

1. 字符设备驱动如何为声卡提供操作接口&#xff1f; 问题背景 在 Linux 系统中&#xff0c;声卡被抽象为字符设备。如何通过代码让应用程序能够访问声卡的录音和播放功能&#xff1f; 核心答案 1.1 字符设备驱动的核心结构 Linux 字符设备驱动通过 file_operations 结构体定…

洛谷 [语言月赛 202503] 题解(C++)

本文为洛谷3月的语言月赛题目全部题解&#xff0c;难度为入门到普及-&#xff0c; 觉的有帮助或者写的不错的可以点个赞 题目链接为 题目列表 - 洛谷 | 计算机科学教育新生态 目录 题目A:长方形 解题思路: 代码(C): 题目B:水流 题目大意: 解题思路: 代码(C): 题目C:格…

算法每日一练 (15)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 算法每日一练 (15)第 N 个泰波那契数题目描述解题思路…

实验11 机器学习-贝叶斯分类器

实验11 机器学习-贝叶斯分类器 一、实验目的 &#xff08;1&#xff09;理解并熟悉贝叶斯分类器的思想和原理&#xff1b; &#xff08;2&#xff09;熟悉贝叶斯分类器的数学推导过程&#xff1b; &#xff08;3&#xff09;能运用贝叶斯分类器解决实际问题并体会算法的效果&a…

Matrix-breakout-2-morpheus靶机实战攻略

1.安装并开启靶机 2.获取靶机IP 3.浏览器访问靶机 4.扫描敏感目录文件和端口 gobuster dir -u http://192.168.52.135 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html 5.访问文件和端口 发现在graffiti.php输入框输入内容后页面会返回内容…

【知识】Graph Sparsification、Graph Coarsening、Graph Condensation的详细介绍和对比

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 1. 理论基础&#xff08;Definitions & Theoretical Background&#xff09; 2. 算法方法&#xff08;Techniques & Algorithms&#x…

Java单元测试、Junit、断言、单元测试常见注解、单元测试Maven依赖范围、Maven常见问题解决方法

一. 测试 1. 测试&#xff1a;是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程 2. 阶段划分&#xff1a;单元测试、集成测试、系统测试、验收测试。 ① 单元测试&#xff1a;对软件的基本组成单位进行测试&#xff0c;最小测试单位&#xff1b;目的检验软件基本组…

【Notepad】Notepad优化笔记AutoHotkey语法高亮\设置替换默认的notepad程序\设置主题\增加返回上一个编辑地方插件

Npp使用优化笔记 AHK或自定义语法高亮设置替换系统默认的notepad设置主题返回上一次编辑的地方插件使用 AHK或自定义语法高亮 具体参考该论坛 https://www.autohotkey.com/boards/viewtopic.php?t50 设置替换默认的notepad程序 参考文章&#xff1a; https://www.winhelpo…

Mac:Maven 下载+安装+环境配置(详细讲解)

&#x1f4cc; 下载 Maven 下载地址&#xff1a;https://maven.apache.org/download.cgi &#x1f4cc; 无需安装 Apache官网下载 Maven 压缩包&#xff0c;无需安装&#xff0c;下载解压后放到自己指定目录下即可。 按我自己的习惯&#xff0c;我会在用户 jane 目录下新建…

[K!nd4SUS 2025] Crypto

最后一个把周末的补完。这个今天问了小鸡块神终于把一个补上&#xff0c;完成5/6&#xff0c;最后一个网站也上不去不弄了。 Matrices Matrices Matrices 这个是不是叫LWE呀&#xff0c;名词忘了&#xff0c;但意思还是知道。 b a*s e 这里的e是高斯分成&#xff0c;用1000…

学习threejs,构建THREE.ParametricGeometry参数化函数生成几何体

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.ParametricGeometry1…

Canal 解析与 Spring Boot 整合实战

一、Canal 简介 1.1 Canal 是什么&#xff1f; Canal 是阿里巴巴开源的一款基于 MySQL 数据库增量日志解析&#xff08;Binlog&#xff09;中间件&#xff0c;它模拟 MySQL 的从机&#xff08;Slave&#xff09;行为&#xff0c;监听 MySQL 主机的二进制日志&#xff08;Binl…

【海螺AI视频】蓝耘智算 | AI视频新浪潮:蓝耘MaaS与海螺AI视频创作体验

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&…

Prometheus使用

介绍&#xff1a;Prometheus 是一个开源的 监控与告警系统&#xff0c;主要用于采集和存储时间序列数据&#xff08;Time Series Data&#xff09; Prometheus的自定义查询语言PromQL Metric类型 为了能够帮助用户理解和区分这些不同监控指标之间的差异&#xff0c;Prometheu…