關於停靠窗口,現在我們所見的許多軟件都存在停靠窗口,如Visual Studio軟件的類視圖、屬性視圖和資源視圖都是停靠窗口的實際案例;停靠窗口作為主窗口的一部分,可以停靠、浮動、顯示隱藏等;
該博文主要講解在Qt下的停靠窗口的實現;主窗口為單文檔窗口,繼承於QMainWindow類,該類包含了標准的菜單欄,工具欄,內容窗口,狀態欄等;停靠窗口類為QDockWidget;主要是使用上述的兩個類;界面效果如下圖所示:
下面一步一步講解實現方式:
一、菜單的實現
菜單主要使用QMenu和QAction兩類,如圖中所示,主要有File和View菜單;代碼如下所示:
m_pFMenu =menuBar()->addMenu("&File");
m_pExit = new QAction(tr("&Exit"), this);
m_pExit->setShortcuts(QKeySequence::Quit);
connect(m_pExit, SIGNAL(triggered()), this, SLOT(close()));
m_pFMenu->addAction(m_pExit);
View菜單主要控制三個停靠窗口的顯示和隱藏:
m_pVMenu=menuBar()->addMenu("&View");
m_pVMenu->addAction(m_pDockWidget1->toggleViewAction());
m_pVMenu->addAction(m_pDockWidget2->toggleViewAction());
m_pVMenu->addAction(m_pDockWidget3->toggleViewAction());
二、內容窗口的實現
內容窗口作為主窗口的主要展示窗口,其隨着主窗口的伸縮而伸縮,該程序中使用QTextEdit類作為顯示文本信息
//創建QTextEdit對象
m_pTextEdit = new QTextEdit(this);
setCentralWidget(m_pTextEdit);
三、停靠窗口的實現
該程序使用三個停靠窗口,都放置在主窗口的左邊;其中左邊最頂端的停靠窗口實現如下代碼所示:
//創建QDockWidget對象
m_pDockWidget1 = new QDockWidget(this);
m_pDockWidget1->setWindowTitle("dock date");
//設置可停靠區域
m_pDockWidget1->setAllowedAreas(Qt::AllDockWidgetAreas);
//設置m_pDockWidget1內的部件
m_pCale = new QCalendarWidget(m_pDockWidget1);
m_pCale->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
m_pCale->setGridVisible(true);
m_pDockWidget1->setWidget(m_pCale);
//主窗口中添加dock
addDockWidget(Qt::LeftDockWidgetArea, m_pDockWidget1);
OK。。。基本就講解完了,是不是很方便很簡潔也很好懂;我把代碼也共享出來,不對之處,望大家提出來共同討論!!!
源碼下載地址:http://files.cnblogs.com/appsucc/DockWindow.rar