- All (478)
- jom (0)
- Qt Linguist (7)
- Qt Eclipse Integration (9)
- Qt Designer (7)
- Qt Creator (4)
- Qt build system: qmake (31)
- Qt build system: configure (3)
- Qt Assistant (5)
- Printing (4)
- Porting from Qt 3 to Qt 4 (1)
- Plugins (7)
- Qt Visual Studio AddIn (2)
- Qt/MFC Migration (2)
- QtScript (3)
- MDI (2)
- XML (1)
- Widgets (22)
- WebKit (5)
- Tools and Containers (2)
- Threads (2)
- Text Handling (10)
- SQL (6)
- QtTest (1)
- QtService (1)
- Platform: Windows (49)
- Platform: Unix (16)
- Platform: Mac OS X (18)
- Image Formats (2)
- I/O (2)
- Graphicsview (8)
- Font handling (9)
- Event System (18)
- Drag and Drop (4)
- Dialogs (6)
- Desktop integration (3)
- ActiveQt (3)
- Itemviews (60)
- Layout (4)
- Qt Quick (10)
- Qt SDK (1)
- Licensing (2)
- Platform: Embedded Linux (38)
- Painting (32)
- OpenGL (4)
- Object Model (6)
- Network (5)
- Multimedia (3)
- Miscellanous (23)
- Main Window (19)
- Look and Feel (23)
- Development (0)
- Getting Involved (0)
- Routines (0)
How can I get a QStackedWidget to automatically switch size depending on the content of the page?
When having a QStackedWidget [doc.qt.nokia.com] that contains pages that you want to display in different sizes, then it can adjust its size automatically when switching pages if you follow these steps:
- set the size policy of the invisible pages to ignored
- set the size policy of the page that is going to be visible to e.g preferred
- call adjustSize() [doc.qt.nokia.com] in order to adjust the size to the sizeHint() [doc.qt.nokia.com].
This article() [doc.qt.nokia.com] in Qt Quarterly demonstrates how this can be done. It is written for Qt 3, but the concept remains the same for Qt 4:
The example below illustrates how this can be done:
- #include <QtGui>
- {
- Q_OBJECT
- public:
- {
- table->setColumnCount(10);
- table->setRowCount(10);
- layout->addWidget(table);
- }
- {
- int newWidth = 0;
- int newHeight =0;
- for (int i = 0; i < table->columnCount(); i++) {
- newWidth+= table->columnWidth(i);
- }
- for (int y = 0; y < table->rowCount(); y++) {
- newHeight+= table->rowHeight(1);
- }
- newWidth+= table->verticalHeader()->width() + 2 *table->frameWidth();
- newHeight+= table->horizontalHeader()->height() +2 *table->frameWidth();
- }
- private:
- };
- {
- Q_OBJECT
- public:
- {
- SubWidget *firstPage = new SubWidget(stackWidget);
- secondPageLayout->addWidget(edit2);
- stackWidget->addWidget(firstPage);
- stackWidget->addWidget(secondPage);
- layout->addWidget(secondButton);
- layout->addWidget(firstButton);
- layout->addWidget(stackWidget);
- connect(firstButton, SIGNAL(clicked()), this, SLOT(test1()));
- connect(secondButton, SIGNAL(clicked()), this, SLOT(test2()));
- }
- public slots:
- void test1()
- {
- changeCurrent(1);
- }
- void test2()
- {
- changeCurrent(0);
- }
- private:
- void changeCurrent(int idx)
- {
- if (stackWidget->currentWidget() !=0) {
- }
- stackWidget->setCurrentIndex(idx);
- adjustSize();
- }
- };
- #include "main.moc"
- int main(int argc, char** argv)
- {
- Widget window;
- window.show();
- return app.exec();
- }

No comments