[Qt-interest] Fwd: MainWindow and few QWidgets as a pages - is that right way?
franki
franki at franki.eu.org
Thu Nov 19 15:01:21 CET 2009
Thursday 19 of November 2009 01:25:11 David Narvaez napisał(a):
> ---------- Forwarded message ----------
> From: David Narvaez <david.e.narvaez at gmail.com>
> Date: Wed, Nov 18, 2009 at 7:22 PM
> Subject: Re: [Qt-interest] MainWindow and few QWidgets as a pages - is that
> right way?
> To: franki <franki at franki.eu.org>
>
>
> StackedWidget should be subclassing QStackWidget, not QWidget. Modify
> stacked.h and stacked.cpp accordingly.
It works!
Thanks a lot.
Marek
>
> *David E. Naváez*
> Member of the Institute of Electrical and Electronics Engineers
> Member of the Computer Society of the IEEE
> Member of the Association for Computer Machinery
> Member of the Society for Indsutrial and Applied Mathematics
>
> On Wed, Nov 18, 2009 at 5:17 PM, franki <franki at franki.eu.org> wrote:
> > Tuesday 17 of November 2009 17:23:14 BOUCARD Olivier napisał(a):
> > > Hi,
> > >
> > > Actually the Qt's way to do this kind of display is to use
> > > QStackedWidget as QMainWindow central widget.
> >
> > Hi,
> >
> > Thank You for answer,
> > QStackedWidget looks like what I'm looking for. I've made small example,
> > i've
> > put QStackedWidget inside Main Window template in designer, and some
> > button's
> > inside pages, and switching from page to page through action in QMenu
> > works fine, but in my example QStackedWidget isn't really centralWidget
> > of QMainWindow, is it?
> > So in second attempt I've made in designer file (mainwindow.ui) using
> > MainWindow template
> > and second file (stacked.ui) where basic widget is QStackedWidget in
> > witch my
> > interface should be really build.
> > Then I tried to initialize (setupUi) class with QStackedWidget after
> > initializing QMainWindow also through setupUi, and then made
> > setCentralWidget
> > with widget from QStackedWidget
> > I belive that this is way it should be done?
> > But there is error during compilation:
> >
> > stacked.cpp: In constructor 'StackedWidget::StackedWidget(QWidget*)':
> > stacked.cpp:7: error: no matching function for call
> > to 'Ui::StackedWidget::setupUi(StackedWidget* const)'
> > ui_stacked.h:43: note: candidates are: void
> > Ui_StackedWidget::setupUi(QStackedWidget*)
> >
> > So I probably messed up with class names or so.
> > I've tried to change class and widget names, and some other things, but
> > no luck, could You give me a hint?
> >
> > Best Regards
> > Marek
> >
> > > ________________________________
> > > 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
> >
> > _______________________________________________
> > Qt-interest mailing list
> > Qt-interest at trolltech.com
> > http://lists.trolltech.com/mailman/listinfo/qt-interest
More information about the Qt-interest-old
mailing list