Qt Creator自定义控件开发流程


在 Qt 5.9 Creator 中开发自定义控件的完整流程如下,分为设计、实现、集成和测试四个阶段:

1. 创建自定义控件类

(1) 新建类文件
  • 右键项目 → 添加新文件 → C++ Class
  • 基类选择 QWidget 或现有控件(如 QPushButton
  • 命名类名(如 CustomSlider),勾选 “Include QWidget”
  • 生成头文件(customslider.h)和源文件(customslider.cpp
(2) 实现控件功能

示例头文件 (customslider.h):

#include <QWidget>
#include <QSlider>
#include <QLabel>class CustomSlider : public QWidget {Q_OBJECT // 必须包含宏
public:explicit CustomSlider(QWidget *parent = nullptr);private:QSlider *slider;QLabel *label;void setupUI(); // 初始化UI
private slots:void updateLabel(int value); // 响应滑块变化
};

示例源文件 (customslider.cpp):

#include "customslider.h"CustomSlider::CustomSlider(QWidget *parent) : QWidget(parent) {setupUI();
}void CustomSlider::setupUI() {QVBoxLayout *layout = new QVBoxLayout(this);slider = new QSlider(Qt::Horizontal);label = new QLabel("0");layout->addWidget(slider);layout->addWidget(label);connect(slider, &QSlider::valueChanged, this, &CustomSlider::updateLabel);
}void CustomSlider::updateLabel(int value) {label->setText(QString::number(value));
}

2. 在 Designer 中集成自定义控件

(1) 提升为自定义控件
  • 打开 .ui 文件(如 mainwindow.ui
  • Widget Box 拖入一个 QWidget 容器
  • 右键该容器 → “提升为…”
  • 填写信息:
    • 提升的类名称: CustomSlider
    • 头文件: customslider.h
  • 点击 “添加”“提升”
(2) 调整控件属性
  • 提升后可在 属性编辑器 中修改基础属性(如大小、名称)
  • 自定义属性需在代码中通过 Q_PROPERTY 声明(进阶用法)

3. 在代码中使用自定义控件

(1) 直接代码创建
#include "mainwindow.h"
#include "customslider.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {CustomSlider *slider = new CustomSlider(this);setCentralWidget(slider);
}
(2) 访问提升后的控件(通过 ui 指针)
// 在 MainWindow 类中使用
ui->customWidget->setMinimum(0); // 假设提升的对象名为 customWidget

4. 进阶:设计器插件(可选)

若需在 Designer Widget Box 中直接拖拽自定义控件:

(1) 创建插件项目
  • 文件 → 新建项目 → Library → Qt Designer Custom Widget Plugin

  • 填写插件信息(如 MyWidgetPlugin

  • 在生成的类中注册控件:

    QList<QDesignerCustomWidgetInterface*> MyWidgetPlugin::customWidgets() const {QList<QDesignerCustomWidgetInterface*> plugins;plugins << new CustomSliderInterface; // 实现接口类return plugins;
    }
    
(2) 构建并部署插件
  • 编译生成 .dll (Windows) 或 .so (Linux)
  • 将库文件放入 Qt Designer 插件目录:
    • Windows: Qt安装路径/plugins/designer
    • Linux: /usr/lib/qt5/plugins/designer

5. 测试与调试

  1. 运行时测试:
    • 运行主程序,验证控件交互逻辑
    • 使用 qDebug() 输出调试信息
  2. 设计模式验证:
    • 在 Qt Designer 中检查提升控件的布局适应性
    • 测试动态属性修改(如通过样式表)

注意事项

  1. 内存管理:

    • 在自定义控件构造函数中设置父对象或使用布局自动管理

    • 重写 paintEvent 实现自定义绘制:

      void CustomSlider::paintEvent(QPaintEvent *event) {QPainter painter(this);// 自定义绘制代码
      }
      
  2. 信号与槽:

    • 暴露内部控件的信号(如转发滑块信号):

      // 在 CustomSlider 类中添加:
      signals:void valueChanged(int);
      // 在构造函数中连接:
      connect(slider, &QSlider::valueChanged, this, &CustomSlider::valueChanged);
      
  3. 样式支持:

    • 使用 Q_PROPERTY 定义样式属性

    • .qss 文件中为自定义控件设置样式:

      CustomSlider {background-color: #F0F0F0;
      }
      CustomSlider QSlider {height: 20px;
      }
      

完整流程图示

[创建类] → [实现功能] → [提升QWidget] → [设计器布局] → [代码集成] → [测试]

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

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

相关文章

翻译《The Old New Thing》- 如何创建一个与屏幕大小相同的窗口,而不会被当作全屏窗口处理?

How can I create a window the size of the screen without it being treated as a fullscreen window? - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20250522-00/?p111211 问题描述 任务栏允许全屏窗口覆盖它。这样&#xff0c;当你在放映幻灯片或进行…

深分页末日救星:MySQL延迟关联原理与实战手册

MySQL 深分页&#xff08;如 LIMIT 100000, 10&#xff09;本质是 高代价的偏移量扫描&#xff0c;可通过以下方案优化&#xff0c;附核心原理和实操示例&#xff1a; 一、深分页为什么慢&#xff1f; SELECT * FROM orders ORDER BY id DESC LIMIT 100000, 10; 执行过程&…

前端技术栈 —— HTML、CSS和JavaScirpt执行环境

以下内容由GLM回答生成&#xff0c;不保证正确性。 前端技术栈 —— HTML、CSS和JavaScirpt执行环境 JavaScript 的执行环境HTML 和 CSS 的执行环境HTML 和 CSS 是否可以在其他环境中执行&#xff1f;总结 JavaScript 是一种 解释型语言&#xff0c;但它也可以被编译。JavaScr…

多项式带余除法——线性代数题目为例

一、多项式带余除法的定义 二、例题 使用方法将在例题中展示&#xff1a;

学习日记-spring-day40-7.3

知识点&#xff1a; 1.自动装配Resource&#xff08;3&#xff09; 知识点 核心内容 重点 Autowired与Resource注入规则 默认注入逻辑&#xff1a;未指定参数时&#xff0c;Resource优先按属性名匹配&#xff08;by name&#xff09;&#xff0c;失败后按类型匹配&#xf…

重新认识JNIEnv

引言 抛开一堆概念&#xff0c;我们从本质出发。 java 调用c 我们开发移动端或者后端服务 &#xff0c;都是用的java 或者kotlin 语言。有时候我们需要用c的一些库&#xff08;ocr识别/导航的算法/ 等&#xff09; 因为一些跟硬件相关的接口或者系统的api 都是c写的。 C调用J…

人工智能训练师——智能语音识别ASR

人机对话——ASR 概念 ASR&#xff08;Automatic Speech Recognition&#xff0c;自动语音识别&#xff09;是一种将人类语音转换为文本的技术。它使得计算机能够“听”懂人类的语音指令或对话&#xff0c;并将其转换成可读、可编辑的文本形式。ASR技术是人机交互领域中的一个…

Compose 常用命令详解——AI教你学Docker

3.3 Compose 常用命令详解 Docker Compose 通过一系列命令高效管理多容器应用。理解这些命令&#xff0c;可以让你灵活地启动、停止、查看、调试、扩缩容和配置 Compose 项目。 一、核心命令详解 1. docker compose up 功能&#xff1a;启动并构建所有服务&#xff0c;生成网…

Mausezahn - 网络流量生成与测试工具(支持从链路层到应用层的协议模拟)

Mausezahn 是一个 网络流量生成与测试工具&#xff0c;主要用于模拟各种网络协议行为、测试网络设备性能、验证安全策略或进行故障排查。它支持从底层链路层&#xff08;如 Ethernet、VLAN&#xff09;到高层应用层&#xff08;如 HTTP、DNS&#xff09;的协议模拟&#xff0c;…

08-three.js Textures

Three.js Journey — Learn WebGL with Three.jsThe ultimate Three.js course whether you are a beginner or a more advanced developerhttps://threejs-journey.com/?c=p3 使用原生 JavaScript 首先是静态页面的放置位置,如果使用Vite模版配置,可以直接放在 /static/ …

git 仓库取消合并的分支

要取消 Git 仓库中某次特定的分支合并(例如第一次合并),同时保留其他分支的合并,需要通过 Git 的版本控制功能来操作。以下是具体的步骤和方法,假设你想撤销某次合并(例如某个提交),并确保其他合并不受影响: 背景假设 你有一个 Git 仓库,主分支(例如 main)上已经合…

【从历史数据分析英特尔该如何摆脱困境】

与大多数其他分析师不同&#xff0c;自2013年以来&#xff0c;笔者就一直在积极强调英特尔未来将遭遇冰山&#xff0c;最终我们预测英特尔将在试图执行其之前的战略时破产。尽管我们更愿意采用与英特尔不同的代工厂方法&#xff08;即与台积电成立合资企业&#xff09;&#xf…

【PyTorch】PyTorch中张量(Tensor)微分操作

PyTorch深度学习总结 第六章 PyTorch中张量(Tensor)微分操作 文章目录 PyTorch深度学习总结前言一、torch.autograd模块二、主要功能和使用方法1. 张量的 requires_grad 属性2. backward() 方法3. torch.no_grad() 上下文管理器三、函数总结前言 上文介绍了PyTorch中张量(Ten…

Rust 项目实战:Flappy Bird 游戏

Rust 项目实战&#xff1a;Flappy Bird 游戏 Rust 项目实战&#xff1a;Flappy Bird 游戏理解 Game loop开发库&#xff1a;bracket-libbracket-terminalCodepage 437导入 bracket-lib 创建游戏游戏的模式添加玩家添加障碍最终效果项目源码 Rust 项目实战&#xff1a;Flappy Bi…

Gin 中间件详解与实践

一、中间件的核心概念 定义 中间件是Web开发中非常重要的概念&#xff0c;它可以在请求到达最终处理函数之前或响应返回客户端之前执行一系列操作。Gin 框架支持自定义和使用内置的中间件&#xff0c;让你在请求到达路由处理函数前进行一系列预处理操作。 它是介于请求与响应处…

非接触式DIC测量系统:助力汽车研发与测试的创新技术应用

近年来&#xff0c;随着新能源汽车品牌的快速崛起&#xff0c;新车发布的节奏加快&#xff0c;层出不穷的新产品&#xff0c;给消费者带来了全新的使用体验。与此同时&#xff0c;变革的产品体验也让一些过往的汽车测试和评价标准变得不再适用&#xff0c;尤其是与过往燃油车型…

FOC学习笔记(7)锁相环(PLL)原理及其在电机控制中的应用

1. 锁相环(PLL)概述 锁相环&#xff08;Phase-Locked Loop, PLL&#xff09;是一种闭环控制系统&#xff0c;用于使输出信号的相位与输入参考信号的相位同步。PLL广泛应用于通信、电机控制、频率合成、时钟恢复等领域。在电机无传感器控制&#xff08;Sensorless Control&…

鸿蒙自定义相机的拍照页面

1、权限申请 "requestPermissions": [{"name": "ohos.permission.CAMERA","reason": "$string:reason_camera","usedScene": {"abilities": ["EntryAbility"]}},{"name": "oh…

greenplum7.2并行备份及恢复

1.并行备份 pg_dump -Fd --gp-syntax -U gpadmin -p 5432 -h 172.19.0.2 -d postgres -j 4 -f /opt/greenplum/data/postgres_backup_$(date %Y-%m-%d) 参数 含义 -Fd 使用 directory 格式&#xff08;支持并行&#xff09; --gp-syntax 使用 Greenplum 特定语法&#xff08;…

备赛2025年初中古诗文大会:练习历年真题,吃透知识点(0703)

初中古诗文大会的比赛内容古诗词、文言文各占比50%左右&#xff0c;从历年的比赛来看&#xff0c;中考语文的古诗文部分&#xff08;35分&#xff09;涉及到的古诗词、文言文知识点都在初中古诗文大会中考过。这些知识点掌握了&#xff0c;对于将来高中、高考也有直接的帮助。 …