[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