【QT】QT從零入門教程(六):QDockWidget停靠視窗
阿新 • • 發佈:2019-01-09
QDockWidget
上節我們引出了QDockWidget的概念,這節進行講解並加以引用。
常用函式:
1、addDockWidget:新增停靠控制元件,用於指定或更改停靠控制元件的位置以及方向。
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget) void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget, Qt::Orientation orientation)
2、splitDockWidget:分割視窗,用於對兩個QDockWidget進行水平或垂直佈局。
void QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation)
3、tabifyDockWidget:合併視窗,用於將多個QDockWidget疊加到同一區域。
void QMainWindow::tabifyDockWidget(QDockWidget * first, QDockWidget * second)
4、setDockNestingEnabled:是否允許巢狀佈局
void QMainWindow::setDockNestingEnabled(bool enabled)
設定巢狀佈局
在自編軟體中,博主用到了9個QDockWidget,作為軟體的基本視窗進行佈局。下面介紹建立佈局的方法。
首先是去除中央窗體(這是重點)。QMainWindow中自帶中央窗體,如果不去除的話,可能會造成視窗間有空塊的情況,大家可以自行嘗試。去除後,所有視窗都由QDockWidget構成。
// cpp
QWidget* p = takeCentralWidget(); //刪除中央窗體
if (p)
delete p;
setDockNestingEnabled(true ); //允許巢狀dock
建立多個視窗
首先對setFeatures函式內的引數進行解釋。
dock->setFeatures(QDockWidget::DockWidgetMovable); // 設定可移動
dock->setFeatures(QDockWidget::DockWidgetFloatable); // 設定可浮動
dock->setFeatures(QDockWidget::DockWidgetClosable); // 設定可關閉
dock->setFeatures(QDockWidget::AllDockWidgetFeatures); // 以上三種都包含
如果想對視窗大小進行限制呢?QDockWidget也有相應的函式。
dock ->setFixedWidth(int w);
dock ->setFixedHeight(int h);
dock ->setFixedSize(int w, int h);
dock ->setMinimumWidth(int minw);
dock ->setMinimumHeight(int minh);
dock ->setMinimumSize(int minw, int minh)
dock ->setMaximumWidth(int maxw);
dock ->setMaximumHeight (int maxh);
dock ->setMaximumSize(int maxw, int maxh)
實現程式碼:
// 標頭檔案
QDockWidget *dock_Image; // 影象視窗
QDockWidget* dock_Tool;// 工具箱視窗
QDockWidget* dock_Geom;// 幾何變換視窗
QDockWidget* dock_Gray;// 灰度變換視窗
QDockWidget* dock_Enhance;// 影象增強視窗
QDockWidget* dock_Morp;// 形態學處理視窗
QDockWidget* dock_Color;// 顏色模型視窗
QDockWidget* dock_Prop;// 屬性視窗
QDockWidget* dock_Output;// 輸出視窗
// cpp
// QDockWidget* dock_Image = new QDockWidget(tr("影象"), this); // 上節中已定義,如果只想做本節內容,可取消註釋
dock_Image->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); // 設定為可移動可浮動,但不可關閉
dock_Image->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); // 可移動範圍:左右
dock_Image->setMinimumSize(600, 600); // 設定最小寬高
dock_Tool = new QDockWidget(tr("工具箱"), this); // 工具箱視窗,若想設定特徵或移動範圍,方法同上。
dock_Geom = new QDockWidget(tr("幾何變換"), this); // 幾何變換視窗
dock_Gray = new QDockWidget(tr("灰度變換"), this); // 灰度變換視窗
dock_Enhance = new QDockWidget(tr("影象增強"), this); // 影象增強視窗
dock_Morp = new QDockWidget(tr("形態學處理"), this); // 形態學處理視窗
dock_Color = new QDockWidget(tr("顏色模型"), this); // 顏色模型視窗
dock_Prop = new QDockWidget(tr("屬性"), this); // 屬性視窗
dock_Output = new QDockWidget(tr("輸出"), this); // 輸出視窗
// 進行佈局
setCentralWidget(dock_Image); // 指定為中心視窗
addDockWidget(Qt::LeftDockWidgetArea, dock_Tool);
addDockWidget(Qt::BottomDockWidgetArea, dock_Output);
addDockWidget(Qt::RightDockWidgetArea, dock_Geom);
addDockWidget(Qt::RightDockWidgetArea, dock_Gray);
addDockWidget(Qt::RightDockWidgetArea, dock_Enhance);
addDockWidget(Qt::RightDockWidgetArea, dock_Morp);
addDockWidget(Qt::RightDockWidgetArea, dock_Color);
addDockWidget(Qt::RightDockWidgetArea, dock_Prop);
// 分割視窗
splitDockWidget(dock_Tool, dock_Image, Qt::Horizontal); // 水平
splitDockWidget(dock_Geom, dock_Output, Qt::Vertical); // 垂直
// 合併視窗
tabifyDockWidget(dock_Geom, dock_Gray);
tabifyDockWidget(dock_Gray, dock_Enhance);
tabifyDockWidget(dock_Enhance, dock_Morp);
tabifyDockWidget(dock_Morp, dock_Color);
tabifyDockWidget(dock_Output, dock_Prop);
dock_Geom->raise(); // raise()函式可使指定視窗置於最前
// connect(dock_Tool, SIGNAL(visibilityChanged(bool)), this, SLOT(isDockTool()));
// 當窗體隱藏或顯示時,其訊號為visibilityChanged(bool)函式,此處僅作簡單演示,槽函式是自定義的,其他視窗同理。
實現效果: