Название: QWizard - неправильное отображение.
Отправлено: edwardoid от Январь 01, 2009, 23:51
Нарисовал QWizard, Qt Creator создал КОРРЕКТНЫЙ /.h файл, но когда создаю пременнутю типа моего класса Визарда скотина не показывает мои Виджеты. почему? C++ (Qt) #ifndef CREATEPROJECT_H #define CREATEPROJECT_H #include <QtGui/QWizard> #include <QPushButton> namespace Ui { class CreateProject; } class CreateProject : public QWizard { Q_OBJECT Q_DISABLE_COPY(CreateProject) public: explicit CreateProject(QWidget *parent = 0); virtual ~CreateProject(); protected: virtual void changeEvent(QEvent *e); private: Ui::CreateProject *m_ui; }; #endif // CREATEPROJECT_H
C++ (Qt) #include "createproject.h" #include "ui_createproject.h" CreateProject::CreateProject(QWidget *parent) : QWizard(parent), m_ui(new Ui::CreateProject) { m_ui->setupUi(this); } CreateProject::~CreateProject() { delete m_ui; } void CreateProject::changeEvent(QEvent *e) { switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } }
Объект создаю так: C++ (Qt) CreateProject create; create.exec();
Результат: (http://img515.imageshack.us/img515/2204/badpg7.th.jpg) (http://"http://img515.imageshack.us/my.php?image=badpg7.jpg") Хотя должено быть: (http://img515.imageshack.us/img515/434/goodwy6.th.jpg) (http://"http://img515.imageshack.us/my.php?image=goodwy6.jpg") Причем заметьте что почему-то он даже вернюю панель с кнопками "?" и "X" не отображает. Почему? Я никак не пойму.
Название: Re: QWizard - неправильное отображение.
Отправлено: Dendy от Январь 02, 2009, 00:51
А что в m_ui лежит? Ваша непоказываемая страница?
Название: Re: QWizard - неправильное отображение.
Отправлено: edwardoid от Январь 02, 2009, 01:02
если до этого Qt предлагал как вариант наследовать Класс с UI то сейчас он создает объект этого класса. По сути ничего не меняется, просто доступ к элементам через m_ui.
Название: Re: QWizard - неправильное отображение.
Отправлено: Dendy от Январь 02, 2009, 01:13
Это мы то в курсе. Так что лежит в m_ui? Страница ваша?
Название: Re: QWizard - неправильное отображение.
Отправлено: edwardoid от Январь 02, 2009, 01:37
там лежит весь QWizard с двумя страницами.
Название: Re: QWizard - неправильное отображение.
Отправлено: Dendy от Январь 02, 2009, 01:50
Может я чего не в курсе, но в моём Qt 4.4.3 нету возможности нарисовать Wizard в Дизайнере. А в документации показаны только примеры создания руками путём добавления отдельных QWizardPage. Поделитесь содержимым ui файла?
Название: Re: QWizard - неправильное отображение.
Отправлено: edwardoid от Январь 02, 2009, 02:21
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>CreateProject</class> <widget class="QWizard" name="CreateProject"> <property name="windowModality"> <enum>Qt::WindowModal</enum> </property> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>431</width> <height>324</height> </rect> </property> <property name="windowTitle"> <string>Wizard</string> </property> <property name="windowIcon"> <iconset> <normaloff>:/ico/Icons/asterisk_orange.png</normaloff>:/ico/Icons/asterisk_orange.png</iconset> </property> <property name="wizardStyle"> <enum>QWizard::ModernStyle</enum> </property> <widget class="QWizardPage" name="wizardPage1"> <widget class="QFrame" name="stepIndicator1"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>130</width> <height>250</height> </rect> </property> <property name="autoFillBackground"> <bool>true</bool> </property> <property name="styleSheet"> <string>background-image:url(:/img/Images/createProject1.png)</string> </property> <property name="frameShape"> <enum>QFrame::NoFrame</enum> </property> </widget> <widget class="QWidget" name="gridLayoutWidget"> <property name="geometry"> <rect> <x>140</x> <y>10</y> <width>285</width> <height>241</height> </rect> </property> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="0"> <widget class="QLabel" name="projectNameLabel"> <property name="text"> <string>Project Name</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QLineEdit" name="lineEdit"/> </item> <item row="1" column="0"> <widget class="QLabel" name="projectDescriptionLbl"> <property name="text"> <string>Description</string> </property> </widget> </item> <item row="1" column="1"> <widget class="QPlainTextEdit" name="plainTextEdit"/> </item> <item row="2" column="1"> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QLabel" name="projectVersionLbl"> <property name="text"> <string>Version</string> </property> </widget> </item> <item> <widget class="QDoubleSpinBox" name="doubleSpinBox"> <property name="singleStep"> <double>0.010000000000000</double> </property> <property name="value"> <double>0.010000000000000</double> </property> </widget> </item> <item> <widget class="QLabel" name="projectBuildLbl"> <property name="text"> <string>Build</string> </property> </widget> </item> <item> <widget class="QSpinBox" name="spinBox"/> </item> </layout> </item> <item row="3" column="1"> <widget class="QCheckBox" name="onlineMode"> <property name="text"> <string>Online services</string> </property> </widget> </item> <item row="4" column="1"> <widget class="QLabel" name="tipLbl"> <property name="text"> <string>Fuck off, asshole</string> </property> </widget> </item> </layout> </widget> </widget> <widget class="QWizardPage" name="wizardPage2"> <widget class="QFrame" name="stepIndicator2"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>130</width> <height>250</height> </rect> </property> <property name="styleSheet"> <string>background-image:url(:/img/Images/createProject2.png)</string> </property> <property name="frameShape"> <enum>QFrame::NoFrame</enum> </property> </widget> <widget class="QWidget" name="gridLayoutWidget_2"> <property name="geometry"> <rect> <x>140</x> <y>0</y> <width>291</width> <height>251</height> </rect> </property> <layout class="QGridLayout" name="gridLayout_2"> <item row="2" column="1"> <widget class="QListWidget" name="listWidget"/> </item> <item row="2" column="2"> <spacer name="horizontalSpacer"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="3" column="1"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> <item row="2" column="0"> <spacer name="horizontalSpacer_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="1"> <spacer name="verticalSpacer_2"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> <item row="1" column="1"> <widget class="QLineEdit" name="lineEdit_2"/> </item> </layout> </widget> </widget> </widget> <resources/> <connections/> </ui>
Рисовал тоже в Qt Creator-e
Название: Re: QWizard - неправильное отображение.
Отправлено: Dendy от Январь 02, 2009, 02:34
Файл открылся, внутри видна иерархия, но визуально - всё в куче, мусор короче. Какая у вас версия Qt?
Название: Re: QWizard - неправильное отображение.
Отправлено: edwardoid от Январь 02, 2009, 02:42
Какой файл открылся? И что в куче? Содержание ui файла или что? 4.4.3
Название: Re: QWizard - неправильное отображение.
Отправлено: Dendy от Январь 02, 2009, 02:49
Ага, элементы видны только с первой страницы, со второй спрятаны. Заметил, что первая страница без лейоута, клацнул на wizardPage1 -> Обьединить в горизонтальный лейоут, сохранил. Запустил - первая страница заработала. Со второй такое проделать нельзя. Вобщем, насколько я понял этот функционал в дизайнере недоделан. Советую подождать Qt 4.5. А пока - создавайте отдельные UI файлы для каждой страницы и добавляйте руками в визард, типа: MyWizard() { QWizardPage * pageOne = new QWizardPage; pageOneUi->setupUi( pageOne ); addPage( pageOne ); }
Название: Re: QWizard - неправильное отображение.
Отправлено: edwardoid от Январь 02, 2009, 03:19
а так больше памяти надо, да?
Название: Re: QWizard - неправильное отображение.
Отправлено: Dendy от Январь 02, 2009, 03:34
Оперативной что-ли? Одинаково. Для машины разницы нет кто сгенерирует код, программист или Дизайнер. Загляните в ui_CreateProject.h и посмотрите сами тело setupUi(), ничего военного там нет.
Название: Re: QWizard - неправильное отображение.
Отправлено: edwardoid от Январь 02, 2009, 03:45
Ничего не изменилось. Если пишу новый класс наследующий QWizard и добавляю страницы которые представленны отдельными классами нарисованными и сгенерированными Qt Creator то опять же такая ситуация.
Как ты отобразили первую страницу тоже не понял. Там был Grid layout, а что вы потом сделали, а главное как сделали не понял.
насчет памяти понял.
Название: Re: QWizard - неправильное отображение.
Отправлено: edwardoid от Январь 02, 2009, 04:04
Даже такой вариант не работает. Открывает визард с двумя чистыми страницами. :-\ createproject.h#ifndef CREATEPROJECT_H #define CREATEPROJECT_H
#include <QWizard> #include <QPushButton> class Step1;
class CreateProject : public QWizard { public: CreateProject(QWidget* parent); ~CreateProject(); private: Step1 *first; Step1 *second; };
class Step1: public QWizardPage { public: Step1(QWidget* parent); ~Step1(); private: QPushButton *bt; };
#endif // CREATEPROJECT_H
createproject.cpp#include "createproject.h"
CreateProject::CreateProject(QWidget* parent): QWizard(parent) { first = new Step1(this); second = new Step1(this); this->addPage(first); this->addPage(second); }
CreateProject::~CreateProject() { delete first; delete second; }
Step1::Step1(QWidget *parent): QWizardPage(parent) { bt = new QPushButton(this); bt->show(); }
Step1::~Step1() { delete bt; }
Название: Re: QWizard - неправильное отображение.
Отправлено: Dendy от Январь 02, 2009, 04:18
Если честно не знаю как работает Qt Creator, возможно просто вызывает Дизайнер. Мой совет - забить на попытку мешать в один UI все страницы визарда - так больше понимания будет в программе. Создаёте обычный QWidget в обычном Дизайнере, выпиливаете на нём первую страницу, добавляете через addPage().
Вот вам пример: http://dendy.org.ua/wz.tar.gz
Название: Re: QWizard - неправильное отображение.
Отправлено: edwardoid от Январь 02, 2009, 04:34
Спасибо, пример помог. Но возникла другая проблема у меня там был QFrame в которой была картинка размером 130*250, сейчас Дизайнер показывает урезанную версию картинки, и я никак не могу изменить размеры QFrame. Из-за размеров такие проблемы. А компилированный вариант и этой полоски не показывает.
Название: Re: QWizard - неправильное отображение.
Отправлено: Dendy от Январь 02, 2009, 09:46
Чтобы QFrame подстраивал размеры под содержимое нужно создать на нём лейоут. Что-то типа: QVBoxLayout * layout = new QVBoxLayout( frame ); layout->addWidget( new QLabel( QPixmap( "pamela_anderson.jpg" ) ) );
|