QT中QDockWidget控件的使用小結(jié)
1.概述
QDockWidget類提供了一個(gè)小部件,可以??吭赒MainWindow中,也可以作為桌面上的頂級(jí)窗口浮動(dòng)。
QDockWidget提供了dock Widget的概念,也稱為工具選項(xiàng)板或?qū)嵱贸绦虼翱凇M?看翱谑欠胖迷赒MainWindow中心小部件周圍的??啃〔考^(qū)域中的輔助窗口。停靠窗口可以在其當(dāng)前區(qū)域內(nèi)移動(dòng),移動(dòng)到新區(qū)域,并由最終用戶浮動(dòng)(例如,取消??浚DockWidget 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è)置??看绑w的特性,參數(shù)QDockWidget::DockWidgetFeatures指定??看绑w的特性,包括以下幾種參數(shù)。
① QDockWidget::DockWidgetClosable:??看绑w可關(guān)閉。
② QDockWidget::DockWidgetMovable:??看绑w可移動(dòng)。
③ QDockWidget::DockWidgetFloatable:??看绑w可浮動(dòng)。
④ QDockWidget::AllDockWidgetFeatures:此參數(shù)表示擁有停靠窗體的所有特性。
⑤ QDockWidget::NoDockWidgetFeatures:不可移動(dòng)、不可關(guān)閉、不可浮動(dòng)。
??繀^(qū)域
setAllowedAreas()方法設(shè)置停靠窗體可??康膮^(qū)域,參數(shù)Qt::DockWidgetAreas指定了??看绑w可??康膮^(qū)域,包括以下幾種參數(shù)。
① Qt::LeftDockWidgetArea:可在主窗口的左側(cè)??俊?/p>
② Qt::RightDockWidgetArea:可在主窗口的右側(cè)??俊?/p>
③ Qt::TopDockWidgetArea:可在主窗口的頂端???。
④ Qt::BottomDockWidgetArea:可在主窗口的底部???。
⑤ Qt::AllDockWidgetArea:可在主窗口任意(以上四個(gè))部位???。
⑥ Qt::NoDockWidgetArea:只可??吭诓迦胩?。
添加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高度,確定了??课恢煤髍esizeDocks才起作用。需要注意的是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++面試八股文之STL標(biāo)準(zhǔn)模板庫(kù)使用詳解
這篇文章主要為大家介紹了C++面試八股文之STL標(biāo)準(zhǔn)模板庫(kù)使用詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
C++實(shí)現(xiàn)對(duì)輸入數(shù)字組進(jìn)行排序
這里給大家介紹的是通過(guò)某個(gè)方法實(shí)現(xiàn)判斷命令行中輸入的數(shù)字是幾個(gè),這樣再用冒泡法排序的時(shí)候就不用擔(dān)心輸入的是幾個(gè)數(shù)字,用到的知識(shí)主要是冒泡法排序2015-11-11
C++使用libcurl輕松實(shí)現(xiàn)文件下載
這篇文章將用最簡(jiǎn)單的方式,帶大家掌握C++ + libcurl實(shí)現(xiàn)文件下載的核心技術(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2025-08-08
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的飛機(jī)大戰(zhàn)游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析
這篇文章主要介紹了Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
C++11中l(wèi)ambda、std::function和std:bind詳解
大家都知道C++11中增加了許多的新特性,下面在這篇文中我們就來(lái)聊一下lambda表達(dá)式,閉包,std::function以及std::bind。文中介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2017-01-01
C語(yǔ)言結(jié)構(gòu)體嵌套與對(duì)齊超詳細(xì)講解
這篇文章主要介紹了C語(yǔ)言結(jié)構(gòu)體嵌套與對(duì)齊,C語(yǔ)言中結(jié)構(gòu)體是一種構(gòu)造類型,和數(shù)組、基本數(shù)據(jù)類型一樣,可以定義指向該種類型的指針。結(jié)構(gòu)體指針的定義類似其他基本數(shù)據(jù)類型的定義2022-12-12
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列之樹(shù)的概念結(jié)構(gòu)和常見(jiàn)表示方法
本章將正式開(kāi)啟數(shù)據(jù)結(jié)構(gòu)中?“樹(shù)”?部分的講解,本章將介紹樹(shù)的概念和結(jié)構(gòu),以及樹(shù)的表示方法,感興趣的朋友進(jìn)來(lái)看看吧2022-02-02

