QT中QDockWidget控件的使用小結(jié)
1.概述
QDockWidget類提供了一個(gè)小部件,可以??吭赒MainWindow中,也可以作為桌面上的頂級(jí)窗口浮動(dòng)。
QDockWidget提供了dock Widget的概念,也稱為工具選項(xiàng)板或?qū)嵱贸绦虼翱?。??看翱谑欠胖迷赒MainWindow中心小部件周圍的??啃〔考^(qū)域中的輔助窗口。??看翱诳梢栽谄洚?dāng)前區(qū)域內(nèi)移動(dòng),移動(dòng)到新區(qū)域,并由最終用戶浮動(dòng)(例如,取消??浚?。QDockWidget API允許程序員限制dock小部件移動(dòng)、浮動(dòng)和關(guān)閉的能力,以及它們可以放置的區(qū)域。
QDockWidget 的主要特點(diǎn):
1. ??抗δ埽篞DockWidget 允許用戶將窗口部件停靠在主窗口的各個(gè)位置,如左側(cè)、右側(cè)、上方或下方。
2. 浮動(dòng)窗口:用戶還可以將 QDockWidget 拖動(dòng)到獨(dú)立的浮動(dòng)窗口中。
3. 可關(guān)閉:QDockWidget 可以關(guān)閉,允許用戶根據(jù)需要隱藏或顯示它。
4. 自定義部件:你可以將自定義的部件放在 QDockWidget 中,以構(gòu)建自定義的界面元素。
2.常用函數(shù)介紹
QDockWidget 類提供了一系列函數(shù),用于配置和管理停靠式窗口的行為和外觀。以下是一些常用的 QDockWidget 函數(shù)的介紹和使用方法:
1.setWidget:設(shè)置??看翱谥械牟考?/p>
QDockWidget dockWidget("標(biāo)題", &mainWindow); QWidget *customWidget = new QWidget; dockWidget.setWidget(customWidget);
2.setAllowedAreas:設(shè)置允許??康膮^(qū)域
dockWidget.setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
3.setFeatures:設(shè)置??看翱诘墓δ芴匦?,如關(guān)閉按鈕、可浮動(dòng)等
dockWidget.setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable);
4.setWindowTitle:設(shè)置??看翱诘臉?biāo)題
dockWidget.setWindowTitle("My Dock Widget");
5.setVisible:設(shè)置停靠窗口的可見(jiàn)性
dockWidget.setVisible(true); // 顯示??看翱?/pre>
6.isFloating:檢查??看翱谑欠裨诟?dòng)狀態(tài)
bool isFloating = dockWidget.isFloating();
7.close:關(guān)閉??看翱?/p>
dockWidget.close();
8.toggleViewAction:獲取一個(gè) QAction 對(duì)象,用于在工具欄中切換??看翱诘目梢?jiàn)性
QAction *toggleAction = dockWidget.toggleViewAction(); toolBar->addAction(toggleAction);
9.topLevelChanged 信號(hào):在停靠窗口的浮動(dòng)狀態(tài)發(fā)生變化時(shí)觸發(fā)
QObject::connect(&dockWidget, &QDockWidget::topLevelChanged, [&](bool floating) { if (floating) { qDebug() << "窗口已浮動(dòng)"; } else { qDebug() << "窗口已???; } });
這些函數(shù)可以幫助你配置 QDockWidget 控件的各種屬性,包括設(shè)置??繀^(qū)域、標(biāo)題、可見(jiàn)性、功能特性等。你還可以使用 toggleViewAction 函數(shù)來(lái)創(chuàng)建一個(gè)切換??看翱诳梢?jiàn)性的操作,以便用戶可以通過(guò)工具欄切換窗口的顯示狀態(tài)。topLevelChanged 信號(hào)可以用于監(jiān)測(cè)停靠窗口的浮動(dòng)狀態(tài)的變化。根據(jù)應(yīng)用程序的需求,你可以使用這些函數(shù)來(lái)自定義??看翱诘男袨楹屯庥^。
3.QDockWidget布局相關(guān)
??刻匦?/p>
setFeatures()方法設(shè)置停靠窗體的特性,參數(shù)QDockWidget::DockWidgetFeatures指定停靠窗體的特性,包括以下幾種參數(shù)。
① QDockWidget::DockWidgetClosable:??看绑w可關(guān)閉。
② QDockWidget::DockWidgetMovable:停靠窗體可移動(dòng)。
③ QDockWidget::DockWidgetFloatable:??看绑w可浮動(dòng)。
④ QDockWidget::AllDockWidgetFeatures:此參數(shù)表示擁有??看绑w的所有特性。
⑤ QDockWidget::NoDockWidgetFeatures:不可移動(dòng)、不可關(guān)閉、不可浮動(dòng)。
??繀^(qū)域
setAllowedAreas()方法設(shè)置??看绑w可??康膮^(qū)域,參數(shù)Qt::DockWidgetAreas指定了停靠窗體可??康膮^(qū)域,包括以下幾種參數(shù)。
① Qt::LeftDockWidgetArea:可在主窗口的左側(cè)???。
② Qt::RightDockWidgetArea:可在主窗口的右側(cè)???。
③ Qt::TopDockWidgetArea:可在主窗口的頂端停靠。
④ Qt::BottomDockWidgetArea:可在主窗口的底部???。
⑤ Qt::AllDockWidgetArea:可在主窗口任意(以上四個(gè))部位???。
⑥ Qt::NoDockWidgetArea:只可??吭诓迦胩帯?/p>
添加dock
addDockWidget()方法用于添加dock,給dock指定位置,同時(shí)也可以更改dock的位置。
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget)
分割dock
splitDockWidget()方法用于分割dock窗口,是把兩個(gè)dock進(jìn)行左右或上下并排布置,做成一個(gè)類似QSplit的功能,分割原則是:水平從左到右,豎直從上到下。
void QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation)
dock tab化窗口
tabifyDockWidget()方法用于tab化窗口,把多個(gè)dock變成一個(gè)tab形式的窗體。
void QMainWindow::tabifyDockWidget(QDockWidget * first, QDockWidget * second)
初始化大小
靠左右布局的QDockWidget的高度是自適應(yīng)的,寬度需要初始化設(shè)置,同理靠上下布局的高度需要初始化設(shè)置。使用splitDockWidget分割、tabifyDockWidget tab化窗口的QDockWidget的初始化大小與其依賴的QDockWidget(參數(shù)first)初始化大小一樣。
void QMainWindow::resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)
它的第一個(gè)參數(shù)是用來(lái)配置是哪個(gè)dock窗口需要調(diào)整大??;第二個(gè)參數(shù)是用來(lái)配置dock所占的像素大小,如果配置大于或者小于QMainWindow本身空間,Qt會(huì)根據(jù)所配置的像素大小的相對(duì)權(quán)重分配到dock中;第三個(gè)參數(shù)用來(lái)配置調(diào)整的方向,如果為Qt::Horizontal,調(diào)整dock寬度,Qt::Vertical調(diào)整dock高度,確定了停靠位置后resizeDocks才起作用。需要注意的是Qt官方文檔上有注明這個(gè)方法在Qt5.6中引入,所以比Qt5.6低的版本并不能使用本方法。resizeDocks在多行或多列時(shí)初始化高寬無(wú)效問(wèn)題!
使用setFeatures、setAllowedAreas、addDockWidget、splitDockWidget、tabifyDockWidget、resizeDocks可以滿足基本的Dock布局了。
標(biāo)題欄設(shè)置
去掉標(biāo)題欄,但是不能拖動(dòng)了。
QWidget *Widget = new QWidget; ui->dockwidget_dockWidget_1->setTitleBarWidget(Widget);
自定義QWidget即可以自定義標(biāo)題欄。
標(biāo)題欄豎起
ui->dockwidget_dockWidget_6->setFeatures(QDockWidget::DockWidgetVerticalTitleBar);
4.QDockWidget的使用注意事項(xiàng)
1. 容器空間的設(shè)置
當(dāng)QDockWidget和其他QWidget(比如QFrame、QLayout等)一起使用時(shí),必須保證這些QWidget的容器空間(容器的大小和位置)是正確的。要使用setWidget()函數(shù)將QWidget添加到QDockWidget中,或者直接使用構(gòu)造函數(shù)初始化QDockWidget,但是需要注意QWidget的大小和位置。
2. 可??繀^(qū)域的控制
QDockWidget可以通過(guò)setAllowedAreas()函數(shù)來(lái)控制停靠的區(qū)域。在設(shè)置之前,必須先調(diào)用mainWindow()函數(shù)獲取主窗口對(duì)象,然后利用主窗口的setDockOptions()函數(shù)設(shè)置最大化和自動(dòng)擴(kuò)展區(qū)域。同時(shí)要根據(jù)實(shí)際情況設(shè)置QDockWidget和其他QMainWindow的layout,從而保證它們的位置和大小是正確的。
3. 內(nèi)存泄露問(wèn)題
當(dāng)QDockWidget被從主窗口中移除時(shí),需要通過(guò)delete函數(shù)顯式地銷毀它。如果沒(méi)有顯式銷毀,可能會(huì)導(dǎo)致內(nèi)存泄露問(wèn)題。
5.使用場(chǎng)景
以下是 QDockWidget 的一些常見(jiàn)使用場(chǎng)景:
- 工具欄:將各種工具按鈕、復(fù)選框、文本框等組合成一個(gè)可停靠的工具欄,方便用戶使用。
- 屬性窗口:顯示選中對(duì)象的各種屬性,如顏色、大小、邊框、位置等,便于用戶對(duì)其進(jìn)行編輯。
- 輸出窗口:顯示應(yīng)用程序的輸出信息、錯(cuò)誤信息、調(diào)試信息等,便于用戶了解應(yīng)用程序的運(yùn)行狀態(tài)。
- 工程瀏覽器:顯示項(xiàng)目文件、文件夾、類、函數(shù)等信息的面板,方便用戶導(dǎo)航和查找。
- 日志窗口:記錄應(yīng)用程序的操作日志、錯(cuò)誤日志等信息,方便用戶了解應(yīng)用程序的運(yùn)行情況和排查錯(cuò)誤。
6.簡(jiǎn)單應(yīng)用示例代碼
#include "main_window.h" #include <QDockWidget> #include <QTextEdit> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setWindowTitle("??看翱?); this->setFixedSize(600, 400); QTextEdit *pTextEdit = new QTextEdit(this); pTextEdit->setText("主窗口測(cè)試"); pTextEdit->setAlignment(Qt::AlignLeft); this->setCentralWidget(pTextEdit); //??看翱趯?shí)現(xiàn) QDockWidget *pDock = new QDockWidget("停靠窗口1", this); pDock->setFeatures(QDockWidget::DockWidgetMovable); pDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); QTextEdit *pText1 = new QTextEdit(this); pText1->setText("你好"); pDock->setWidget(pText1); this->addDockWidget(Qt::RightDockWidgetArea, pDock); }
到此這篇關(guān)于QT中QDockWidget控件的使用小結(jié)的文章就介紹到這了,更多相關(guān)QT QDockWidget控件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言中字符串庫(kù)函數(shù)的實(shí)現(xiàn)及模擬
C語(yǔ)言中有很多數(shù)據(jù)類型,比如int(整數(shù)類型)、char(字符類型)、以及浮點(diǎn)型的double(雙精度)等。但是有一點(diǎn)就是我們發(fā)現(xiàn)這里并沒(méi)有提到我們常見(jiàn)的有關(guān)字符串的類型。本文為大家介紹了C語(yǔ)言中字符串庫(kù)函數(shù)的實(shí)現(xiàn)及模擬,需要的可以參考一下2022-11-11Qt?http編程之nlohmann?json庫(kù)使用詳解
nlohmann是一個(gè)C++的JSON庫(kù),它提供了方便的方式來(lái)解析、生成和操作JSON數(shù)據(jù),這篇文章主要為大家介紹了nlohmann?json庫(kù)的簡(jiǎn)單使用,希望對(duì)大家有所幫助2024-04-04C++編程之CString、string與、char數(shù)組的轉(zhuǎn)換
這篇文章主要介紹了C++編程之CString、string與、char數(shù)組的轉(zhuǎn)換的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-10-10盤點(diǎn)分析C語(yǔ)言中少見(jiàn)卻強(qiáng)大的字符串函數(shù)
這篇文章主要為大家盤點(diǎn)及分析C語(yǔ)言中少見(jiàn)卻強(qiáng)大的字符串函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02