[Qt-interest] Re : MainWindow and few QWidgets as a pages - is that right way?

BOUCARD Olivier boucard_olivier at yahoo.fr
Tue Nov 17 17:23:14 CET 2009


Hi,

Actually the Qt's way to do this kind of display is to use QStackedWidget as QMainWindow central widget.




________________________________
De : franki <franki at franki.eu.org>
À : qt-interest at trolltech.com
Envoyé le : Mar 17 Novembre 2009, 15 h 06 min 34 s
Objet : [Qt-interest] MainWindow and few QWidgets as a pages - is that right way?

Hello,

I'm about to write application with one MainWindow, and few pages with 
different widgets inside, pages should be displayed inside the same window, 
after involving action from menu, or toolbar (much like clicking on website 
application) 
    So is my approach correct, or should it be done in different way?
    
These "pages", I would like to design in designer as a QWidgets, and when 
page "is requested" I would initialize class with page.setupUi, and use 
setCentralWidget(page) to display widget inside MainWindow. 
If there is already some page displayed and initialized inside MainWindow 
prevoiusly,  should I simply destroy main object prior initialized with 
setupUi(), before I setCentralWidget with new object?

Is that the way application should be build?

I've made small test, but it's seems there is something wrong because when 
application starts, MainWindow is showing correctly, but centralwidget is 
empty (there aren't any widget's inside)
files qtdesign3 - contain MainWindow class
files test1 - contain QWidget that should be displayed as centralWidget

Thank you in advance for your time.
Marek

code below

main.cpp:
#include "qtdesign3.h"

int main(int argc, char *argv[])
{
        QApplication app(argc, argv);
        MainWindow *window = new MainWindow;
        window->setWindowTitle("window test");
         window->show();
         return app.exec();
}

qtdesign3.h:
#include "ui_mainwindow.h"
#include <QLocale>


class MainWindow: public QMainWindow
{
        Q_OBJECT
public:
        MainWindow();
private:
        Ui::MainWindow ui;
};

ui_mainwindow.h:
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QStatusBar>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QAction *actionTest;
    QAction *actionTest2;
    QWidget *centralwidget;
    QMenuBar *menubar;
    QMenu *menuTest;
    QMenu *menuTest2;
    QStatusBar *statusbar;

    void setupUi(QMainWindow *MainWindow)
    {
    if (MainWindow->objectName().isEmpty())
        MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
    MainWindow->resize(800, 600);
    actionTest = new QAction(MainWindow);
    actionTest->setObjectName(QString::fromUtf8("actionTest"));
    actionTest2 = new QAction(MainWindow);
    actionTest2->setObjectName(QString::fromUtf8("actionTest2"));
    centralwidget = new QWidget(MainWindow);
    centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
    MainWindow->setCentralWidget(centralwidget);
    menubar = new QMenuBar(MainWindow);
    menubar->setObjectName(QString::fromUtf8("menubar"));
    menubar->setGeometry(QRect(0, 0, 800, 31));
    menuTest = new QMenu(menubar);
    menuTest->setObjectName(QString::fromUtf8("menuTest"));
    menuTest2 = new QMenu(menubar);
    menuTest2->setObjectName(QString::fromUtf8("menuTest2"));
    MainWindow->setMenuBar(menubar);
    statusbar = new QStatusBar(MainWindow);
    statusbar->setObjectName(QString::fromUtf8("statusbar"));
    MainWindow->setStatusBar(statusbar);

    menubar->addAction(menuTest->menuAction());
    menubar->addAction(menuTest2->menuAction());
    menuTest->addAction(actionTest);
    menuTest2->addAction(actionTest2);

    retranslateUi(MainWindow);

    QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
    
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 
0, QApplication::UnicodeUTF8));
    actionTest->setText(QApplication::translate("MainWindow", "test", 0, 
QApplication::UnicodeUTF8));
    actionTest2->setText(QApplication::translate("MainWindow", "test2", 0, 
QApplication::UnicodeUTF8));
    menuTest->setTitle(QApplication::translate("MainWindow", "test", 0, 
QApplication::UnicodeUTF8));
    menuTest2->setTitle(QApplication::translate("MainWindow", "test2", 0, 
QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

qtdesign3.cpp:
#include <QtGui>

#include "qtdesign3.h"
#include "test1.h"

MainWindow::MainWindow() :
    QMainWindow (0,Qt::Window)
{
     ui.setupUi(this);
        Test1 test(ui.centralwidget);
        QMainWindow::setCentralWidget(&test);
}

test1.h:
#include "ui_test1.h"

class Test1 :public QWidget {
         Q_OBJECT

public:
     Test1(QWidget *parent = 0);
private:
        Ui::Test1 t1;
};

test1.cpp:
#include <QtGui>
#include "test1.h"

Test1::Test1(QWidget *parent)
{
     t1.setupUi(this);
}

ui_test1.h:
#ifndef UI_TEST1_H
#define UI_TEST1_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QGridLayout>
#include <QtGui/QGroupBox>
#include <QtGui/QLineEdit>
#include <QtGui/QPushButton>
#include <QtGui/QSpinBox>
#include <QtGui/QTextEdit>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Test1
{
public:
    QGridLayout *gridLayout;
    QPushButton *pushButton;
    QPushButton *pushButton_2;
    QGroupBox *groupBox;
    QLineEdit *lineEdit;
    QTextEdit *textEdit;
    QSpinBox *spinBox;

    void setupUi(QWidget *Test1)
    {
    if (Test1->objectName().isEmpty())
        Test1->setObjectName(QString::fromUtf8("Test1"));
    Test1->resize(724, 442);
    gridLayout = new QGridLayout(Test1);
    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
    pushButton = new QPushButton(Test1);
    pushButton->setObjectName(QString::fromUtf8("pushButton"));

    gridLayout->addWidget(pushButton, 0, 0, 1, 1);

    pushButton_2 = new QPushButton(Test1);
    pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));

    gridLayout->addWidget(pushButton_2, 2, 0, 1, 1);

    groupBox = new QGroupBox(Test1);
    groupBox->setObjectName(QString::fromUtf8("groupBox"));
    lineEdit = new QLineEdit(groupBox);
    lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
    lineEdit->setGeometry(QRect(30, 30, 113, 25));
    textEdit = new QTextEdit(groupBox);
    textEdit->setObjectName(QString::fromUtf8("textEdit"));
    textEdit->setGeometry(QRect(30, 100, 104, 94));
    spinBox = new QSpinBox(groupBox);
    spinBox->setObjectName(QString::fromUtf8("spinBox"));
    spinBox->setGeometry(QRect(210, 170, 50, 25));

   gridLayout->addWidget(groupBox, 1, 0, 1, 1);


    retranslateUi(Test1);

    QMetaObject::connectSlotsByName(Test1);
    } // setupUi

    void retranslateUi(QWidget *Test1)
    {
    Test1->setWindowTitle(QApplication::translate("Test1", "Test1", 0, 
QApplication::UnicodeUTF8));
    pushButton->setText(QApplication::translate("Test1", "test button1", 0, 
QApplication::UnicodeUTF8));
    pushButton_2->setText(QApplication::translate("Test1", "test button2", 0, 
QApplication::UnicodeUTF8));
    groupBox->setTitle(QApplication::translate("Test1", "grupa1", 0, 
QApplication::UnicodeUTF8));
    Q_UNUSED(Test1);
    } // retranslateUi

};

namespace Ui {
    class Test1: public Ui_Test1 {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_TEST1_H
_______________________________________________
Qt-interest mailing list
Qt-interest at trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt-interest



      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20091117/3f1d046e/attachment.html 


More information about the Qt-interest-old mailing list