Results 1 to 2 of 2

Thread: Tiny problem in using QCanvas/QCanvasView and QWidgetStack

  1. #1
    Join Date
    Nov 2006
    Posts
    58
    Thanks
    1
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Tiny problem in using QCanvas/QCanvasView and QWidgetStack

    I have a QMainWindow and a QWidgetStack as its central widget. The QWidgetStack contains two widgets which are QTextEdit and QCanvasView. And then I switch the two widgets to show by turns by clicking a pushbutton. The switching performance works well. But when I change the central widget from QTextEdit to the QCanvasView, it appears a two white lines on the canvasview. Since I have not added any code for drawing items, this is very strange. I am confused!
    Below is my code:

    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. #include <qcanvas.h>
    13.  
    14. class MainWindow:public QMainWindow
    15. {
    16. Q_OBJECT
    17. public:
    18. MainWindow(const QString& filename );
    19. QDockWindow *toolBarDockWindow;
    20. QWidgetStack *toolBarStack;
    21. QWidgetStack *centralWidgetStack;
    22. QToolButton* graphicButton;
    23. QToolButton* quitButton;
    24. QTextEdit *textEdit;
    25. QCanvasView* canvasView;
    26. QCanvas* m_canvas;
    27. public slots:
    28. void switchToolBarMode();
    29. void switchCentralWidgetMode(int);
    30. private:
    31. void init();
    32. QString m_filename;
    33. bool m_toolBarMode;
    34. };
    35.  
    36.  
    37. MainWindow::MainWindow(const QString& filename)
    38. :QMainWindow(0,0,WDestructiveClose)
    39. {
    40. int screenW;
    41. int screenH;
    42. screenW = QApplication::desktop()->width();
    43. screenH = QApplication::desktop()->height();
    44. this->resize(screenW,screenH);
    45. m_filename = QString::null;
    46. m_toolBarMode = TRUE;
    47. init();
    48. }
    49.  
    50. void MainWindow::init()
    51. {
    52. toolBarDockWindow = new
    53. QDockWindow(QDockWindow::InDock,this,"toolbardockwindow",0);
    54. toolBarDockWindow->setOrientation(Qt::Horizontal);
    55. toolBarDockWindow->setHorizontallyStretchable(TRUE);
    56. toolBarDockWindow->setVerticallyStretchable(TRUE);
    57. toolBarDockWindow->setMovingEnabled(FALSE);
    58. this->moveDockWindow(toolBarDockWindow,Qt::DockBottom);
    59.  
    60. toolBarStack = new QWidgetStack(toolBarDockWindow);
    61. toolBarDockWindow->setWidget(toolBarStack);
    62. QWidget* editToolBar = new QWidget(toolBarStack);
    63. QHBoxLayout* editToolBarLayout = new QHBoxLayout(editToolBar,6,6);
    64. QWidget* graphicToolBar = new QWidget(toolBarStack);
    65. QHBoxLayout* graphicToolBarLayout = new QHBoxLayout(graphicToolBar,6,6);
    66. toolBarStack->addWidget(editToolBar,0);
    67. toolBarStack->addWidget(graphicToolBar,1);
    68. graphicButton = new QToolButton(editToolBar,"graphicutton");
    69. graphicButton->setUsesTextLabel(TRUE);
    70. graphicButton->setTextLabel("Graphic",FALSE);
    71. graphicButton->setFont(QFont("Times",20,QFont::Bold));
    72. editToolBarLayout->addWidget(graphicButton);
    73.  
    74. QSpacerItem* editToolBarSpacer = new
    75. QSpacerItem(0,0,QSizePolicy::Expanding,QSizePolicy::Minimum);
    76. editToolBarLayout->addItem(editToolBarSpacer);
    77. quitButton = new QToolButton(graphicToolBar,"quitbutton");
    78. quitButton->setUsesTextLabel(TRUE);
    79. quitButton->setTextLabel("Return",FALSE);
    80. quitButton->setFont(QFont("Times",20,QFont::Bold));
    81. graphicToolBarLayout->addWidget(quitButton);
    82.  
    83.  
    84. QSpacerItem* graphicToolBarSpacer = new QSpacerItem(0,0,QSizePolicy::Expanding,QSizePolicy::Minimum);
    85. graphicToolBarLayout->addItem(graphicToolBarSpacer);
    86.  
    87. toolBarStack->raiseWidget(0);
    88. connect(graphicButton,SIGNAL(clicked()),this,SLOT(switchToolBarMode()));
    89. connect(quitButton,SIGNAL(clicked()),this,SLOT(switchToolBarMode()));
    90.  
    91. centralWidgetStack = new QWidgetStack(this);
    92. textEdit = new QTextEdit(centralWidgetStack,"textedit");
    93. textEdit->setTextFormat(Qt::PlainText);
    94. textEdit->setFocus();
    95. centralWidgetStack->addWidget(textEdit,0);
    96.  
    97. canvasView = new QCanvasView(centralWidgetStack,"canvasview");
    98. m_canvas = new QCanvas(this);
    99. m_canvas->resize(centralWidgetStack->width(),centralWidgetStack->height());
    100. m_canvas->setBackgroundColor(black);
    101. canvasView->setCanvas(m_canvas);
    102. centralWidgetStack->addWidget(canvasView,1);
    103. centralWidgetStack->raiseWidget(0);
    104.  
    105. this->setCentralWidget(centralWidgetStack);
    106. connect(toolBarStack,SIGNAL(aboutToShow(int)),this,SLOT(switchCentralWidgetMode(int)));
    107. }
    108.  
    109. void MainWindow::switchCentralWidgetMode(int i)
    110. {
    111. centralWidgetStack->raiseWidget(i);
    112.  
    113. }
    114.  
    115. void MainWindow::switchToolBarMode()
    116. {
    117. if(m_toolBarMode){
    118. toolBarStack->raiseWidget(1);
    119. }else{
    120. toolBarStack->raiseWidget(0);
    121. }
    122. m_toolBarMode = !m_toolBarMode;
    123. }
    124.  
    125. int main(int argc, char *argv[])
    126. {
    127. QApplication app(argc,argv);
    128. QString filename = QString::null;
    129. MainWindow *mainWindow = new MainWindow(filename);
    130. app.setMainWidget(mainWindow);
    131. mainWindow->show();
    132.  
    133. return app.exec();
    134. }
    135.  
    136. #include "mainwindow.moc"
    To copy to clipboard, switch view to plain text mode 

    I think the problem is the canvas resize process. Because after I comment off the "m_canvas->resize()"
    the white lines disappear. But the Qt's documents say that when constructs a canvas without giving its constructor a width and height arguements, you should resize it before using it. So how should I resize the canvas?

    Thanks a lot.

  2. #2
    Join Date
    Feb 2006
    Location
    Romania
    Posts
    2,744
    Thanks
    8
    Thanked 541 Times in 521 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Tiny problem in using QCanvas/QCanvasView and QWidgetStack

    Qt Code:
    1. canvasView = new QCanvasView(centralWidgetStack,"canvasview");
    2. m_canvas = new QCanvas(this);
    3. m_canvas->resize(centralWidgetStack->width(),centralWidgetStack->height());
    To copy to clipboard, switch view to plain text mode 
    Here centralWidgetStack hasn't been yet resized to fit it's contents. It hasn't been shown yet.

    I suggest resizing the canvas prior to switching between widgets ( maybe in switchToolbarMode() ).

    regards

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.