在實際編程過程中,發現當在QDockWidget中調用setWidget函數的時候,如果widget是由QMainWindow繼承而來,且設定了繼承類的父物件,將導致在程式開始啟動並執行時候就會出現QDockWidget的widget對象,注意不是QDockWidget而是他的widget對象!從而得不到想到要的dock效果以下將範例程式碼展示如下進行說明:
class MyDockWidget : public QMainWindow{ /// >測試放在dockwidget中的自訂widget對象 MyDockWidget(QWidget * parent);......};class MainWindow : public QMainWindow{ MainWindow ();........};MainWindow::MainWindow{ QDockWidget * dock1 = new QDockWidget(this); MyDockWidget * myWidget = new MyDockWidget(dock1); /// 嘿,注意這裡了!dock1->setWidget(myWidget) dock1->hide(); //// >注意此處是希望dock1在開始的時候隱藏起來,嘿嘿,你覺得能隱藏嗎?? this->addDockWidget(Qt::NoDockWidgetArea, dock1); QDockWidget * dock2 = new QDockWidget(this); MyDockWidget * myWidget2 = new MyDockWidget; dock2->setWidget(myWidget2) dock2->hide();/// >再猜猜這裡會不會顯示那? this->addDockWidget(Qt::NoDockWidgetArea, dock2);}
在上面的代碼中,dock1中的myWidget會顯示出來,dock2會隱藏的!
如果MyDockWidget 不是繼承自QMainWindow則可以設定父物件,實現隱藏視窗的目的!