crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> QWizard, динамическое построение списка страниц
FladeX
  опции профиля:
сообщение 21.3.2009, 14:22
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


Уже что-то, спасибо!
Допустим есть конструкция вида
 int LicenseWizard::nextId() const
{
     switch (currentId()) {
     }
}

Как оттуда узнать состояния чекбоксов (напоминаю, что они на первой странице визарда расположены)?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.3.2009, 19:13
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(FladeX @ 21.3.2009, 17:22) *
узнать состояния чекбоксов
насколько я помню, в мастерах Qt есть понятие "полей", и используется манипуляция с полями, а не с виджетами, т.е. ты их должен создавать/инициализировать/изменять. Поля видны на всех страницах мастера.

П.С. с терминами могу ошибаться

Пример, хоть и на аглицком
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FladeX
  опции профиля:
сообщение 21.3.2009, 21:57
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо, вроде именно то что надо.
Только вот не компилиться теперь:
moc_expertsystem.o:(.rodata._ZTV10Func02Page[vtable for Func02Page]+0xf0): undefined reference to `Func02Page::nextId() const'
moc_expertsystem.o:(.rodata._ZTV10Func01Page[vtable for Func01Page]+0xf0): undefined reference to `Func01Page::nextId() const'
moc_expertsystem.o:(.rodata._ZTV9IntroPage[vtable for IntroPage]+0xf0): undefined reference to `IntroPage::nextId() const'

Это что за ошибка такая?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.3.2009, 22:16
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(FladeX @ 22.3.2009, 0:57) *
Это что за ошибка такая?
Цитата(FladeX @ 22.3.2009, 0:57) *
moc_expertsystem.o
возможно ты добавил где-то макрос Q_OBJECT, а qmake при этом не вызывал. Либо объявление класса и его реализацию поместил в один файл неподключив соответсявующий, автоматически создаваемый, файл (в твоем случае moc_expertsystem.cpp)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kalombo
  опции профиля:
сообщение 22.3.2009, 10:13
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 5.8.2008
Пользователь №: 252

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вклинюсь сюда тоже со своим вопросом, надеюсь никому не помешаю. Вопрос такой. Создал я значит свой класс производный от QWizard, для него сделал несколько страниц производных от класс QWizardPage. И вот на одной из страниц у меня есть QTableWIdget, как к нему обращаться с других страниц к примеру? В моем случае мне надо обращаться к этому виджету в методе класса QWizard::accept(), что позволило мне решить проблему следующим образом. Я создал для страницы на которой QTableWidget паблик метод, возвращающий ссылку на этот виджет и потом в классе QWizard вызываю этот метод. Такой способ решения мне кажется не очень красивым, а как с другой страницы получить доступ к этому виджету вообще непонятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 22.3.2009, 11:32
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Полагаю, что одним из этих методов:

QTableWidget *tbw = wizard()->page(id)->getTableWidgetPointer();
QTableWidget *tbw = wizard()->page(id)->findChild<QTableWidget *>("mytablewidgetname");
QTableWidget *tbw = wizard()->page(id)->justPublicTableWidgetPointer;


Вообще в QWizardPage есть методы registerField() и field(). Это глобальные методы, если ты регистрируешь свое поле, то оно доступно через метод field() из любой страницы, загвоздка в том, что это работает только на следующие поля-классы:

Цитата
QAbstractButton
QAbstractSlider
QComboBox
QDateTimeEdit
QLineEdit
QListWidget
QSpinBox


Есть еще метод QWizard::setDefaultProperty(), который позволяет расширить список классов. Например:

    setDefaultProperty("QTableWidget", "currentItem", SIGNAL(currentItemChanged()));
    ...
    QTableWidgetItem *item = field("QTableWidget").value<QTableWidgetItem *>();


По идее любому своему объекту (QObject) можно добавлять динамические свойства и получать их из любой страницы. На самом деле это эквивалентно такому:

Wizard::Wizard(QWidget *parent) : public QWizard(parent)
{
    setProperty("pointerToMyTable", qVariantFromValue(tableWidgetPtr));
}

WizardPage1::WizardPage1(QWidget *parent) : public QWizardPage(parent)
{
    QTableWidget *table = parent()->property("pointerToMyTable").value<QTableWidget *>();
}


Но это в теории, сам я с этим классом никогда не работал.

Сообщение отредактировал SABROG - 22.3.2009, 12:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FladeX
  опции профиля:
сообщение 25.3.2009, 13:07
Сообщение #17


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


То есть для чекбоксов получается так:
    setDefaultProperty("QCheckBox", "currentItem", SIGNAL(currentItemChanged()));

    func01 = new QCheckBox(QObject::trUtf8("Чекбокс"));

    registerField("introfunc01", func01);

И потом обращаться как:
field(introfunc01)->isChecked(true)

Но не получается (
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 25.3.2009, 15:00
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(FladeX @ 25.3.2009, 13:07) *
field(introfunc01)->isChecked(true)


Че за бред :wacko:

field возвращает QVariant, а там уже может быть что-угодно, а не указатель на QCheckBox. Ты уж определись, что ты используешь registerField или setDefaultProperty. Эти функции делают одно и то же по сути.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FladeX
  опции профиля:
сообщение 3.4.2009, 16:05
Сообщение #19


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


То есть получается что для чекбоксов registerField вообще не подходит?
А с setProperty так и не разобрался, как их использовать в случае чекбоксов...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FladeX
  опции профиля:
сообщение 14.5.2009, 11:07
Сообщение #20


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


Подскажите что можно сделать с чекбоксами :)
На первой странице несколько чекбоксов, каждый из которых соответсвует одной странице. При checked страница будет доступна в визарде, при !checked не будет. >_<
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 17:41