一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Qt Designer中提供的原生界面元素

嵌入式小生 ? 來源:嵌入式小生 ? 2023-01-29 10:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、導(dǎo)讀

Qt是一個跨平臺的軟件開發(fā)工具,可以使用C++、Python、Qml語言開發(fā)項目。在實際項目開發(fā)過程中,其提供了一個界面描述文件(xxx.ui)用于描述界面中有哪些元素,我們也可以使用對應(yīng)的設(shè)計工具Qt Designer手動進行界面設(shè)計和布局。

本文基于Qt Designer,描述其提供的原生界面元素,除此之外,還描述如何使用自定義控件擴展Qt Designer。

二、Qt Designer中提供的原生界面元素

使用Qt Designer在.ui文件中進行界面設(shè)計和布局時需要知道其包含哪些界面元素,如下圖所示:

6f4663f0-9f08-11ed-bfe3-dac502259ad0.png

一般情況下,使用上圖所示的界面元素就能完成軟件界面的設(shè)計了。

三、Qt Designer的擴展接口

Qt提供了Qt Designer的擴展接口,這些接口以類的方式進行設(shè)計,命名為QDesignerxxx,如下圖所示:

6fa356b4-9f08-11ed-bfe3-dac502259ad0.png

為什么需要擴展Qt Designer呢?Qt Designer定位是一款設(shè)計軟件,在實際項目工程開發(fā)過程中,界面中的元素往往會重復(fù)出現(xiàn),這時候,可以將這些重復(fù)出現(xiàn)且具有共性的界面元素封裝成自定義的擴展插件,并將其添加到Qt Designer中,這樣便可以在Qt Designer中直接用鼠標拖拽使用,進行信號和槽函數(shù)的編輯,加快了開發(fā)效率。

下面來看看Qt中提供的幾個Qt Designer擴展接口類的含義:

(1)QDesignerActionEditorInterface:該接口用于更改Qt Designer的動作編輯器。

(2)QDesignerContainerExtension:該接口用于在Qt Designer的工作空間中向自定義的多頁容器中添加頁面。

(3)QDesignerCustomWidgetCollectionInterface:該接口類用于在一個庫中包含多個自定義的小部件。

(4)QDesignerCustomWidgetInterface:該接口類用于允許Qt Designer訪問和構(gòu)造自定義的小部件。

(5)QDesignerDynamicPropertySheetExtension:該類允許在Qt Designer的屬性編輯器中操作小部件的動態(tài)屬性。

(6)QDesignerFormEditorInterface:該類用于訪問Qt Designer的各種組件。

(7)QDesignerFormWindowInterface:該接口類用于查詢和操作出現(xiàn)在Qt Designer工作區(qū)中的窗體窗口。

(8)QDesignerFormWindowManagerInterface:該類用于在Qt Designer中操作窗體窗口的集合,并控制Qt Designer的窗體編輯操作。

(9)QDesignerMemberSheetExtension:該接口類用于操作小部件的成員函數(shù),這些函數(shù)在使用Qt Designer的模式編輯信號和槽函數(shù)連接時顯示。

(10)QDesignerObjectInspectorInterface:該接口類用于更改Qt Designer的對象檢查器。

(11)QDesignerPropertyEditorInterface:該接口類用于查詢和操作Qt Designer的屬性編輯器的當前狀態(tài)。

(12)QDesignerPropertySheetExtension:該接口類用于操作小部件的屬性,這些屬性顯示在Qt Designer的屬性編輯器中。

(13)QDesignerTaskMenuExtension:該接口類用于向Qt Designer的任務(wù)菜單中添加自定義的菜單項。

(14)QDesignerWidgetBoxInterface:該接口類用于控制Qt Designer的小部件框的內(nèi)容。

四、使用自定義插件擴展Qt Designer

要將自定義的小部件與QtDesigner集成,需要進行兩方面的處理:

(1)需要對自定義的小部件進行封裝描述,以便QtDesigner能夠識別。

(2)需要編寫一個合適的.pro,用于構(gòu)建出合適的插件。

(4-1)創(chuàng)建接口描述

當開發(fā)好一個自定義的小部件后,則需要創(chuàng)建接口描述通知Qt Designer,才能將自定義的小部件作為插件添加到Qt Designer中。

在實際接口設(shè)計中,需創(chuàng)建QDesignerCustomWidgetInterface的子類,在子類中描述小部件各種公開的屬性,其中大部分是由基類中的純虛函數(shù)提供的,我們只需要重載這些純虛函數(shù)并返回相應(yīng)的參數(shù)值即可。

QDesignerCustomWidgetInterface類中提供的純虛函數(shù)如下表所示:

函數(shù) 返回值
name() 提供小部件類的名稱
group() 描述該小部件在Qt Designer的Widget Box視圖中所屬的組
toolTip() 是一個簡短的描述,用于描述/識別Qt Designer中的小部件。
whatsThis() 在Qt Designer中為小部件提供更長描述。
includeFile() 描述使用此小部件的應(yīng)用程序中必須包含的頭文件。此信息存儲在UI文件中,uic將使用這個信息在為包含自定義小部件的表單生成的代碼中創(chuàng)建合適的#include語句。
icon() 用于表示Qt Designer中Widget Box視圖下的小部件的圖標。
isContainer() 如果小部件將用于存放子小部件,則為True;否則返回false。
createWidget() 指向自定義小部件實例的QWidget指針,由提供的父組件構(gòu)造。注意:createWidget()是一個工廠函數(shù),只負責創(chuàng)建小部件。自定義的小部件屬性直到load()返回才可以使用
domXml() 用于描述小部件的屬性,例如:它的對象名稱、大小提示等信息
codeTemplate() 預(yù)留函數(shù)
initialize() 用于為自定義的小部件設(shè)置擴展和其他功能
isInitialized() 如果小部件已經(jīng)初始化,則返回true;否則返回false。注意:在實際開發(fā)中,重新實現(xiàn)函數(shù)通常需要檢查initialize()函數(shù),并返回測試的結(jié)果。

(4-2)插件導(dǎo)出

為了讓插件能夠在所有的平臺上都能正常工作,需要確保它們能夠?qū)С鯭t Designer所需要的符號。插件類必須導(dǎo)出,這樣才可以讓Qt Designer加載,需要下述幾個步驟:

(1)使用Q_PLUGIN_METADATA()宏用于聲明插件的元數(shù)據(jù)。例如下列代碼:

Q_PLUGIN_METADATA(IID"org.qt-project.Qt.QDummyPlugin"FILE"mymetadata.json")

IID后面的字符串為插件的IID參數(shù)。FILE后面的字符串是可選的,指向一個json文件。

(2)使用QDESIGNER_WIDGET_EXPORT宏描述自定義的小部件類。例如:

classQDESIGNER_WIDGET_EXPORTMyPlugin:publicQWidget
{
Q_OBJECT

public:
explicitMyPlugin(QWidget*parent=nullptr);

protected:
voidpaintEvent(QPaintEvent*event)override;
};

注:QDESIGNER_WIDGET_EXPORT宏定義必須添加,否則集成到Qt Creator 中編譯會報錯。不加的話可以在設(shè)計器中加載,但是編譯會報錯。

(3) 使用Q_INTERFACES宏讓Qt元對象系統(tǒng)知道這個插件。Q_INTERFACES 讓qobject_cast()能正確進行QObject*到接口指針的轉(zhuǎn)換,就此我們可以判斷插件的合法性。

(4-3)構(gòu)建小部件

在前面描述了將已有自定義控件封裝成QtDesigner中使用的插件的代碼編寫過程,本小節(jié)將描述如何構(gòu)建小部件,這一點則聚焦于.pro中,插件在編譯構(gòu)建后則會以庫文件的方式生成。

(1)在.pro工程配置文件中添加如下參數(shù)配置項:

QT+=widgetsdesigner
CONFIG+=plugin
TEMPLATE=lib

QT += widgets designer語句添加了兩個模塊:widgets和designer,CONFIG += plugin語句用于描述這個工程是以插件的方式編譯構(gòu)建,TEMPLATE = lib語句用于描述工程以庫的方式構(gòu)建。

(2)在.pro工程配置文件中添加如下參數(shù)配置項:

target.path=$$[QT_INSTALL_PLUGINS]/designer
INSTALLS+=target

變量$[QT_INSTALL_PLUGINS]是一個占位符,表示已安裝的Qt插件的位置。

上面語句的意思則是指定插件的安裝位置,當執(zhí)行安裝操作后,會將生成的庫文件復(fù)制到對應(yīng)的目錄下(如何執(zhí)行安裝操作,后文會寫到)。

(4-4)安裝小部件

(4-4-1)手動安裝

如果插件工程能夠正常編譯構(gòu)建通過,則會生成插件庫文件。這時候我們需要將其復(fù)制到Qt Designer下的插件庫目錄中。路徑為具體Qt構(gòu)建版本目錄/plugins/designer/中。

注:使用對應(yīng)的構(gòu)建套件編譯構(gòu)建出的插件庫只能安裝到對應(yīng)構(gòu)建套件目錄中的/plugins/designer/目錄下,這樣插件庫才能被對應(yīng)的Qt Designer正常加載和使用。

總而言之,編譯、構(gòu)建、安裝、QtDesigner版本需要一致。

(4-4-2)自動安裝

在(4-3)小節(jié)的.pro工程描述文件中,使用INSTALLS指定了庫文件的安裝目錄,還需要添加一個安裝操作:

1、點擊QtCreator左側(cè)菜單欄下的『項目』一欄,進入項目配置界面。

2、選擇『Build 的步驟』下的“添加Build步驟”,點擊“Custom Process Step”按鈕新建一個build步驟,在輸入框中輸入如下命令:

6fc3d84e-9f08-11ed-bfe3-dac502259ad0.png

注:上述圖片操作本質(zhì)是make install的寫法,由于是在Windows下,所以變成了mingw32-make。install參數(shù)表示在編譯構(gòu)建完成后還需要執(zhí)行安裝操作。

通過以上步驟,當在項目編譯構(gòu)建后,則會將生成的插件庫文件自動復(fù)制到INSTALLS指定的目錄中。

(4-5)注意事項

如果小部件有特殊的行為,想要在Qt Designer中賦予這些行為,則需要在實際插件封裝代碼中提供initialize()函數(shù)的實現(xiàn),以告訴Qt Designer特定行為配置的小部件的構(gòu)造過程。

這個函數(shù)將在調(diào)用createWidget()之前首次被調(diào)用,并且在函數(shù)中可以設(shè)置一個內(nèi)部標志,以便Qt Designer后續(xù)在調(diào)用插件的createWidget()函數(shù)時進行判斷測試。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4825

    瀏覽量

    86444
  • JSON
    +關(guān)注

    關(guān)注

    0

    文章

    122

    瀏覽量

    7335

原文標題:盤一盤Qt Designer的界面元素

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Qt 設(shè)計器(Qt Designer)內(nèi)容總結(jié)

    的習慣,也比書寫代碼要快速的多。Qt提供了這樣一個可視化的界面設(shè)計工具:Qt 設(shè)計器(QtDesigner)。其開始界面如上圖所示。
    發(fā)表于 12-15 16:12

    Qt 設(shè)計器(Qt Designer)內(nèi)容總結(jié)

    界面設(shè)計的時候。這是因為這種設(shè)計方式更加符合人類思考的習慣,也比書寫代碼要快速的多。Qt提供了這樣一個可視化的界面設(shè)計工具:Qt 設(shè)計器
    發(fā)表于 08-22 15:20

    Qt 設(shè)計器(Qt Designer)內(nèi)容總結(jié)

    的習慣,也比書寫代碼要快速的多。Qt提供了這樣一個可視化的界面設(shè)計工具:Qt 設(shè)計器(Qt Desi
    發(fā)表于 08-28 15:47

    Qt 設(shè)計器(Qt Designer)內(nèi)容總結(jié)

    的習慣,也比書寫代碼要快速的多。Qt提供了這樣一個可視化的界面設(shè)計工具:Qt 設(shè)計器(Qt Desi
    發(fā)表于 10-11 09:25

    Qt 設(shè)計器(Qt Designer)內(nèi)容總結(jié)

    的習慣,也比書寫代碼要快速的多。Qt提供了這樣一個可視化的界面設(shè)計工具:Qt 設(shè)計器(Qt Desi
    發(fā)表于 10-15 11:01

    Qt 設(shè)計器(Qt Designer)內(nèi)容總結(jié)

    的習慣,也比書寫代碼要快速的多。Qt提供了這樣一個可視化的界面設(shè)計工具:Qt 設(shè)計器(Qt Desi
    發(fā)表于 10-25 09:34

    Qt 設(shè)計器(Qt Designer)內(nèi)容總結(jié)

    的習慣,也比書寫代碼要快速的多。Qt提供了這樣一個可視化的界面設(shè)計工具:Qt 設(shè)計器(Qt Desi
    發(fā)表于 10-27 09:27

    如何完成Qt5主窗口的界面設(shè)計

    Qt5學習之路及嵌入式開發(fā)教程14:Qt5主窗口---界面設(shè)置這次任務(wù)要完成Qt5主窗口的界面設(shè)計Qt
    發(fā)表于 11-08 06:55

    基于QT/Embedded的可變情報板應(yīng)用程序開發(fā)

    基于QT/Embedded的可變情報板應(yīng)用程序開發(fā) QT是奇趣科技推出的一種多平臺的C++圖形用戶界面應(yīng)用程序框架。它包括QT開發(fā)庫QT
    發(fā)表于 03-03 09:36 ?867次閱讀

    Qt用戶界面設(shè)計PPT

    QT使用的界面設(shè)計例子,可以作為入門人員的學習使用與操作,個人感覺還是不錯的
    發(fā)表于 01-05 17:24 ?6次下載

    Qt Designer、Qt Quick DesignerQt Creator應(yīng)用程序有什么區(qū)別?

    不管是Qt新手還是開發(fā)過qt的群體來說,對Qt Designer、Qt Quick Designer
    的頭像 發(fā)表于 03-17 09:40 ?7594次閱讀

    Qt5 學習之路及嵌入式開發(fā)教程14:Qt5主窗口---界面設(shè)置

    Qt5 學習之路及嵌入式開發(fā)教程14:Qt5主窗口---界面設(shè)置這次任務(wù)要完成Qt5主窗口的界面設(shè)計Qt
    發(fā)表于 11-03 09:51 ?13次下載
    <b class='flag-5'>Qt</b>5 學習之路及嵌入式開發(fā)教程14:<b class='flag-5'>Qt</b>5主窗口---<b class='flag-5'>界面</b>設(shè)置

    Qt ECG Monitor Qt嵌入式床旁心電監(jiān)護儀項目源碼

    Qt ECG Monitor是由Qt-UI開發(fā)和維護的嵌入式床旁心電監(jiān)護儀界面項目。項目提供C++/Python語言,基于Qt5下
    發(fā)表于 01-10 11:41 ?33次下載
    <b class='flag-5'>Qt</b> ECG Monitor <b class='flag-5'>Qt</b>嵌入式床旁心電監(jiān)護儀項目源碼

    基于QT應(yīng)用、TCP應(yīng)用界面程序

    基于QT應(yīng)用,TCP應(yīng)用界面程序分享
    發(fā)表于 10-25 17:03 ?4次下載

    Qt,“大小限定”背后的思路和“坑”

    在使用Qt開發(fā)界面的時候,大小限定是常使用的操作。在界面元素的鼻祖QWidget中提供了一系列的方法,用于設(shè)定指定
    的頭像 發(fā)表于 02-02 10:31 ?1810次閱讀