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

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)的兼容性。

相关文章:

  • 【在数轴上找最优位置,使移动距离最短】
  • 【区块链 + 商贸零售】商小萌小程序 | FISCO BCOS 应用案例
  • uniapp路由跳转导致页面堆积问题
  • 51单片机和STM32 入门分析
  • RSA后台解密报错:javax.crypto.BadPaddingException: Message is larger than modulus
  • 4.1--入门知识扫盲,ISO知识体系介绍(看一遍,协议啥的全部记住)
  • Android Zygote的进程机制
  • nginx配置txt文件点击链接后下载
  • 【ES6新特性】默认参数常见用法
  • (C语言)斐波那契数列(递归求解)
  • uniapp-x vue 特性
  • 通过 API 将Deepseek响应流式内容输出到前端
  • 论文精度:Transformers without Normalization
  • 提示词模板
  • KNN算法性能优化技巧与实战案例
  • vuex持久化存储,手动保存到localStorage,退出登录时清空vuex及localStorage
  • 【数据库】掌握MySQL事务与锁机制-数据一致性的关键
  • Vue:单文件组件
  • Spring Boot 启动顺序
  • k8s-coredns-CrashLoopBackOff 工作不正常
  • 时隔3年,持续近2小时,俄乌在土耳其谈成了什么?
  • 通往国际舞台之路:清政府与万国公会的交往
  • 反犹、资金与抗议:特朗普的施压如何撕裂美国大学?|907编辑部
  • 从普通人经历中发现历史,王笛解读《线索与痕迹》
  • 山东枣庄同一站点两名饿了么骑手先后猝死,当地热线:职能部门正调查
  • 今起公开发售,宁德时代将于5月20日在港股上市