QDockWidget 在QMainWindow中一直顯示的問題解決方案

pamxy發表於2013-06-24

轉自:http://blog.csdn.net/fly542/article/details/6678527

在實際程式設計過程中,發現當在QDockWidget中呼叫setWidget函式的時候,如果widget是由QMainWindow繼承而來,且設定了繼承類的父物件,將導致在程式開始執行的時候就會出現QDockWidget的widget物件,注意不是QDockWidget而是他的widget物件!從而得不到想到要的dock效果以下將示例程式碼展示如下進行說明:

  1. class MyDockWidget : public QMainWindow  
  2.   
  3. /// >測試放在dockwidget中的自定義widget物件  
  4.   
  5.     MyDockWidget(QWidget * parent);  
  6. ......  
  7.   
  8. };  
  9.   
  10. class MainWindow : public QMainWindow  
  11.   
  12. {  
  13.     MainWindow ();  
  14.   
  15. ........  
  16.   
  17. };  
  18.   
  19. MainWindow::MainWindow  
  20.   
  21. {  
  22.     QDockWidget * dock1 = new QDockWidget(this);  
  23.     MyDockWidget  * myWidget = new MyDockWidget(dock1); /// 嘿,注意這裡了!  
  24. dock1->setWidget(myWidget)  
  25.     dock1->hide(); //// >注意此處是希望dock1在開始的時候隱藏起來,嘿嘿,你覺得能隱藏嗎??  
  26.     this->addDockWidget(Qt::NoDockWidgetArea, dock1);  
  27.   
  28.    QDockWidget * dock2 = new QDockWidget(this);  
  29.    MyDockWidget  * myWidget2 = new MyDockWidget;  
  30.    dock2->setWidget(myWidget2)  
  31.    dock2->hide();/// >再猜猜這裡會不會顯示那?  
  32.    this->addDockWidget(Qt::NoDockWidgetArea, dock2);  
  33.   
  34. }  

在上面的程式碼中,dock1中的myWidget會顯示出來,dock2會隱藏的!

如果MyDockWidget 不是繼承自QMainWindow則可以設定父物件,實現隱藏視窗的目的!


相關文章