Qt布局管理: 停靠窗口QDockWidget類(純代碼實現)


轉載:好兒郎~志在四方

詳細描述:

QDockWidget類提供了一個窗體部件,其可以停靠在QMainWindow,或其本身作為一個在桌面上的頂級窗口(也就是父窗體)。

QDockWidget類提供了dock widget的概念,dock widget也就是我們熟悉的工具面板或者是工具窗口。

Dock window是放置在QMainWindow窗口周圍的dock widget區域中的小部件。

圖形描述如下:

Dock windows可以在幾個區域中移動,或者是懸浮。該類提供的API允許程序員限制dock widgets的移動,懸浮和關閉,以及它可以被放置的區域。

成員類型:

QDockWidget對象包含一些特性,例如:移動、懸浮、關閉等等,這些都是枚舉類型。

創建停靠窗體的流程:

  • 創建一個QDockWidget對象的停靠窗體。
  • 設置此停靠窗體的屬性,通常可以使用setFeatures()以及setAllowedAreas()兩種方法。
  • 新建一個要插入停靠窗體的控件,常用的有QListWidget和QtextEdit。
  • 將控件插入停靠窗體,調用QDockWidget()和setWidget()成員函數。
  • 使用addDockWidget()方法,在MainWindow中加入此停靠窗體。

實例:

  • 窗口1可以在左邊和右邊移動;
  • 窗口2 沒有相關的任何特性;
  • 窗口3具有相關的所有特性;

步驟:

1、新建GUI應用,項目名自定義,基類選擇QMainWindow,注意要取消"創建界面"復選框。

MainWindow類構造函數的說明:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

2、MainWindow.cpp文件,也就是MainWindow類構造函數的實現,代碼如下:

#include "mainwindow.h"
#include <QTextEdit>
#include <QDockWidget>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("DockWidget"));
    QTextEdit *text = new QTextEdit(this);
    text->setText(tr("主窗口"));
    text->setAlignment(Qt::AlignCenter);
    setCentralWidget(text);

    QDockWidget *dock = new QDockWidget(tr("DockWindow1"),this);
    dock->setFeatures(QDockWidget::DockWidgetMovable); //指定停靠窗體的樣式,此處為可移動
    dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
    QTextEdit *text1 = new QTextEdit();
    text1->setText(tr("窗口一"));
    dock->setWidget(text1);
    addDockWidget(Qt::RightDockWidgetArea,dock);

    dock = new QDockWidget(tr("DockWindow2"),this);
    dock->setFeatures(QDockWidget::NoDockWidgetFeatures); //沒有相關的權限
    QTextEdit *text2 = new QTextEdit();
    text2->setText(tr("窗口二"));
    dock->setWidget(text2);
    addDockWidget(Qt::RightDockWidgetArea,dock);

    dock = new QDockWidget(tr("DockWindow3"),this);
    dock->setFeatures(QDockWidget::AllDockWidgetFeatures); //具有全部特性
    QTextEdit *text3 = new QTextEdit();
    text3->setText(tr("窗口三"));
    dock->setWidget(text3);
    addDockWidget(Qt::RightDockWidgetArea,dock);

}

MainWindow::~MainWindow()
{

}

3、主函數中的代碼如下

#include "mainwindow.h"
#include <QApplication>
#include <QFont>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFont font("楷體",20,QFont::Bold);
    a.setFont(font);

    MainWindow w;
    w.show();
    w.setFixedSize(600,400);    //設置窗體為固定的大小,防止用戶通過拖拽改變其大小
    return a.exec();
}

4、運行效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM