Qt學習 將ui介面中的預設控制項提公升為自定義類

2021-09-25 07:22:56 字數 1548 閱讀 5298

自定義控制項在動態新增到介面時很容易,只要new就可以了。當然在mainwindow的介面中要動態新增控制項還是有問題的,跟普通的視窗不一樣。

普通視窗只需要new乙個layout,然後將在這個layout裡新增控制項即可,如下:

qhboxlayout * layout = new qhboxlayout;

this->setlayout(layout);

layout->addstretch(1);

layout->addwidget(testlabel);

layout->addstretch(1);

而mainwindow已經自帶乙個layout了不能使用以上方法,應該這樣做:

qwidget *center = new qwidget(this);

setcentralwidget(center);

center->setlayout(layout);

在視覺化編輯控制項的操作中,所有控制項都是自帶的控制項,那麼怎麼才能像動態新增控制項那樣使用自定義的類(控制項)?

可以提公升控制項,操作如下:

這樣就操作完成了,我們再去編寫這個類,然後編譯,會發現在輸出路徑有這個檔案(ui_mainwindow.h),此檔案裡之前qlabel控制項已經換為我們定義的類名testlabelsub:

編寫完這個自定義類後,編譯輸出則發現此控制項已經變為自定義的類。

提公升的時候發現,只能寫類名不能寫包名,而且在編譯後的(ui_mainwindow.h)一直都是沒有包的引用。

如果類寫在包裡,編譯則會報路徑無法找到的錯誤。

如果一定要把類寫在包裡,則有以下解決方法:

手動修改(ui_mainwindow.h)關於這個自定義類的路徑:

問題是重新構建之後又要重新修改。

把路徑在.pro檔案裡include進去:

includepath +=./com
就可以了。

之前自己寫的自定義類,有的沒有給基類傳入父視窗,因為有的只在啟動時生成即可,不存在銷毀,所以也無所謂,用這種寫法導致在寫這個提公升類的時候,一直無法顯示,最後還是無意中試出來了:

這個不傳入控制項無法顯示。

QT 5 9 8 UI介面控制項介紹

布局管理器 所謂 gui 介面,歸根結底,就是一堆元件的疊加。我們建立乙個視窗,把按鈕放上面,把圖示放上面,這樣就成了乙個介面。在放置時,元件的位置尤其重要。我們必須要指定元件放在 以便視窗能夠按照我們需要的方式進行渲染。這就涉及到元件定位的機制。qt 提供了兩種元件定位機制 絕對定位和布局定位。絕...

Qt中QWidget與其他控制項預設尺寸的注意事項

qwidget預設尺寸 640 480 其他控制項預設尺寸 100 30 但是,new的時候qwidget有不同情況,以繼承自qwidget的qhalconwindow類為例。qhalconwindow qhalconwindow qwidget parent qwidget parent 在其他類...

關於Qt5 10的UI中自己做的示波器控制項問題

最近自己造輪子,基於qlabel做了乙個類似於示波器的顯示介面,如下圖,做完之後我把它作為乙個控制項,可以在ui設計介面將qlabel提公升為這個圖表型別,這個過程中我遇到了乙個問題,就是提公升後的控制項的大小設定出現了異常,不能根據介面大小跟隨layout變化 我重寫了resizeevent 也不...