Russian Qt Forum
Ноябрь 25, 2024, 01:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QWizard - неправильное отображение.  (Прочитано 8603 раз)
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();
Результат:

Хотя должено быть:

Причем заметьте что почему-то он даже вернюю панель с кнопками "?" и "X" не отображает. Почему? Я никак не пойму.
Записан
Dendy
Гость
« Ответ #1 : Январь 02, 2009, 00:51 »

А что в m_ui лежит? Ваша непоказываемая страница?
Записан
edwardoid
Гость
« Ответ #2 : Январь 02, 2009, 01:02 »

если до этого Qt предлагал как вариант наследовать Класс с UI то сейчас он создает объект этого класса. По сути ничего не меняется, просто доступ к элементам через m_ui.
Записан
Dendy
Гость
« Ответ #3 : Январь 02, 2009, 01:13 »

Это мы то в курсе. Так что лежит в m_ui? Страница ваша?
Записан
edwardoid
Гость
« Ответ #4 : Январь 02, 2009, 01:37 »

там лежит весь QWizard с двумя страницами.
Записан
Dendy
Гость
« Ответ #5 : Январь 02, 2009, 01:50 »

Может я чего не в курсе, но в моём Qt 4.4.3 нету возможности нарисовать Wizard в Дизайнере. А в документации показаны только примеры создания руками путём добавления отдельных QWizardPage. Поделитесь содержимым ui файла?
Записан
edwardoid
Гость
« Ответ #6 : Январь 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
Записан
Dendy
Гость
« Ответ #7 : Январь 02, 2009, 02:34 »

Файл открылся, внутри видна иерархия, но визуально - всё в куче, мусор короче. Какая у вас версия Qt?
Записан
edwardoid
Гость
« Ответ #8 : Январь 02, 2009, 02:42 »

Какой файл открылся? И что в куче? Содержание ui файла или что?
4.4.3
Записан
Dendy
Гость
« Ответ #9 : Январь 02, 2009, 02:49 »

Ага, элементы видны только с первой страницы, со второй спрятаны. Заметил, что первая страница без лейоута, клацнул на wizardPage1 -> Обьединить в горизонтальный лейоут, сохранил. Запустил - первая страница заработала. Со второй такое проделать нельзя. Вобщем, насколько я понял этот функционал в дизайнере недоделан. Советую подождать Qt 4.5. А пока - создавайте отдельные UI файлы для каждой страницы и добавляйте руками в визард, типа:

Код:
MyWizard()
{
    QWizardPage * pageOne = new QWizardPage;
    pageOneUi->setupUi( pageOne );
    addPage( pageOne );
}
Записан
edwardoid
Гость
« Ответ #10 : Январь 02, 2009, 03:19 »

а так больше памяти надо, да?
Записан
Dendy
Гость
« Ответ #11 : Январь 02, 2009, 03:34 »

Оперативной что-ли? Одинаково. Для машины разницы нет кто сгенерирует код, программист или Дизайнер. Загляните в ui_CreateProject.h и посмотрите сами тело setupUi(), ничего военного там нет.
Записан
edwardoid
Гость
« Ответ #12 : Январь 02, 2009, 03:45 »

Ничего не изменилось. Если пишу новый класс наследующий QWizard и добавляю страницы которые представленны отдельными классами нарисованными и сгенерированными Qt Creator то опять же такая ситуация.

Как ты отобразили первую страницу тоже не понял. Там был Grid layout, а что вы потом сделали, а главное как сделали не понял.

насчет памяти понял.
Записан
edwardoid
Гость
« Ответ #13 : Январь 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;
}

Записан
Dendy
Гость
« Ответ #14 : Январь 02, 2009, 04:18 »

Если честно не знаю как работает Qt Creator, возможно просто вызывает Дизайнер. Мой совет - забить на попытку мешать в один UI все страницы визарда - так больше понимания будет в программе. Создаёте обычный QWidget в обычном Дизайнере, выпиливаете на нём первую страницу, добавляете через addPage().

Вот вам пример: http://dendy.org.ua/wz.tar.gz
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.264 секунд. Запросов: 21.