Qt Creator自定義控件開發流程

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;對于將來高中、高考也有直接的幫助。 …