I have a MainWindow subclassed by QMainWindow, and also a QDockWindow on the bottom of the MainWindow. Then I add a QWidgetStack into the QDockWindow. The QWidgetStack contains two QHBox. Each QHBox is a toolbar. Finally, I want to switch on/off between the two toolbar by clicking a toolbutton, that is why I use a QWidgerStack in the QDockWindow.

However, despite of the swicth on/off functionality, the QDockWindow has a ridiculous presentation or performance, it can not show correctly!

Below is my code, Please Help Me!

Qt Code:
  1. #include <qapplication.h>
  2. #include <qstring.h>
  3. #include <qmainwindow.h>
  4. #include <qdockwindow.h>
  5. #include <qtextedit.h>
  6. #include <qtoolbar.h>
  7. #include <qtoolbutton.h>
  8. #include <qpopupmenu.h>
  9. #include <qwidgetstack.h>
  10. #include <qhbox.h>
  11. #include <qlayout.h>
  12.  
  13.  
  14. class MainWindow:public QMainWindow
  15. {
  16. public:
  17. MainWindow(const QString& filename );
  18. QDockWindow *toolBarDockWindow;
  19. QWidgetStack *toolBarStack;
  20. QWidgetStack *mainWindowStack;
  21. QToolButton* fileButton;
  22. QToolButton* editButton;
  23. QToolButton* graphicButton;
  24. QTextEdit *textEdit;
  25.  
  26. private:
  27. void init();
  28. QString m_filename;
  29. };
  30.  
  31. MainWindow::MainWindow(const QString& filename)
  32. :QMainWindow(0,0,WDestructiveClose)
  33. {
  34. int screenW;
  35. int screenH;
  36. screenW = QApplication::desktop()->width();
  37. screenH = QApplication::desktop()->height();
  38. this->resize(screenW,screenH);
  39. m_filename = QString::null;
  40. init();
  41. }
  42.  
  43. void MainWindow::init()
  44. {
  45. toolBarDockWindow = new QDockWindow (QDockWindow::InDock,this,"toolbardockwindow",0);
  46. toolBarDockWindow->setOrientation(Qt::Horizontal);
  47. toolBarDockWindow->setHorizontallyStretchable(TRUE);
  48. toolBarDockWindow->setVerticallyStretchable(TRUE);
  49. toolBarDockWindow->setMovingEnabled(FALSE);
  50. QColor tbBkgColor;
  51. tbBkgColor.setHsv(205,167,189);
  52. toolBarDockWindow->setPaletteBackgroundColor(tbBkgColor);
  53. this->moveDockWindow(toolBarDockWindow,Qt::DockBottom);
  54.  
  55. toolBarStack = new QWidgetStack(toolBarDockWindow);
  56. QHBox* editToolBar = new QHBox(toolBarStack);
  57. editToolBar->setSpacing(6);
  58. editToolBar->setMargin(6);
  59. QHBox* graphicToolBar = new QHBox(toolBarStack);
  60. graphicToolBar->setSpacing(6);
  61. graphicToolBar->setMargin(6);
  62. toolBarStack->addWidget(editToolBar,0);
  63. toolBarStack->addWidget(graphicToolBar,1);
  64.  
  65. fileButton = new QToolButton(editToolBar,"filebutton");
  66. fileButton->setUsesTextLabel(TRUE);
  67. fileButton->setTextLabel("File",FALSE);
  68. fileButton->setFont(QFont("Times",20,QFont::Bold));
  69. fileButton->setPopupDelay(10);
  70.  
  71. QPopupMenu *fileMenu = new QPopupMenu(this);
  72. fileMenu->insertItem("New File",this,SLOT(fileNew()),Qt::Key_F1);
  73. fileMenu->insertItem("Load File",this,SLOT(fileOpen()),Qt::Key_F2);
  74. fileMenu->insertItem("Save File",this,SLOT(fileSave()),Qt::Key_F3);
  75. fileMenu->insertItem("Save File As...",this,SLOT(fileSaveAs()),Qt::Key_F4);
  76. fileButton->setPopup(fileMenu);
  77.  
  78. editButton = new QToolButton(editToolBar,"editbutton");
  79. editButton->setUsesTextLabel(TRUE);
  80. editButton->setTextLabel("Edit",FALSE);
  81. editButton->setFont(QFont("Times",20,QFont::Bold));
  82.  
  83. graphicButton = new QToolButton(editToolBar,"graphicButton");
  84. graphicButton->setUsesTextLabel(TRUE);
  85. graphicButton->setTextLabel("Graphic",FALSE);
  86. graphicButton->setFont(QFont("Times",20,QFont::Bold));
  87.  
  88. QSpacerItem* editToolBarSpacer = new QSpacerItem(0,0 ,QSizePolicy::Expanding,QSizePolicy::Minimum);
  89. editToolBar->layout()->addItem(editToolBarSpacer);
  90.  
  91. toolBarStack->raiseWidget(0);
  92.  
  93. textEdit = new QTextEdit(this,"textedit");
  94. textEdit->setTextFormat(Qt::PlainText);
  95. textEdit->setFocus();
  96. this->setCentralWidget(textEdit);
  97. }
  98.  
  99. int main(int argc, char *argv[])
  100. {
  101. QApplication app(argc,argv);
  102. QString filename = QString::null;
  103. MainWindow *mainWindow = new MainWindow(filename);
  104. app.setMainWidget(mainWindow);
  105. mainWindow->show();
  106.  
  107. return app.exec();
  108. }
To copy to clipboard, switch view to plain text mode