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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QWizard, QWizardPage, Не могу получить текст из QComboBox  (Прочитано 5047 раз)
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« : Июнь 05, 2008, 08:30 »

Есть визард с несколькими страничками. На одной из стриниц QWizardPage есть QComboBox *poet с двумя c
строками "Пушкин" и "Есенин". В этой странице регистрирую поле registerField("stopBit*", poet);. В визарде в accept() пытаюсь получить

QString select = field("stopBit").toString();

в результате получаю в select либо "0", либо "1". Т.е. индекс. А нужен текст. "Пушкин" или "Есенин". По умолчанию в поле stopBit будет регистрироваться свойство currentIndex для QComboBox по сигналу currentIndexChanged(). Как Изменить умолчания?  Нужно чтоб регистриовалось свойство currentText. В примерах Qt ни чего подобного не нашел.

Пробывал   registerField("stopBit", poet, "currentText"); - при такой регистрации select получается  "Пушкин" или "Есенин". То что нужно. Но тогда кнопка "Next"("Finish") не блокируеться при невыбранном поэте.
Пробывал   registerField("stopBit*", poet, "currentText"); - кнопка "Next"("Finish") блокируеться, но при выборе не разблокируетя и соответственно в accept() я не попадаю.

Кто-нибудь пробывал поменять свойства или сигналы определенные по умолчанию и перечисленные в описании void QWizardPage::registerField? Какой синтакс у функций QWizard::setDefaultProperty() и QWizardPage::registerField()?

registerField("stopBits*", "currentText", "currentIndexChanged()"); //такой?
или
registerField("stopBits*", "QString currentText", "currentIndexChanged(const QString&)"); //такой?

ps
Примерный код
finddialog.h
Код:
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <QWizard>

class ConnectionWizard : public QWizard
{
public:
ConnectionWizard();
~ConnectionWizard();
void accept();
};

class MyPage : public QWizardPage
{
public:
MyPage(QWidget *parent = 0);
~MyPage();
};

#endif

main.cpp
Код:
#include <QApplication>
#include <QtGui>
#include "finddialog.h"

ConnectionWizard::ConnectionWizard()
 : QWizard()
{
setModal(true);
addPage(new MyPage);
}

ConnectionWizard::~ConnectionWizard(){}

void ConnectionWizard::accept()
 {
QString a = field("stopBit").toString();
//здесь ставлю т.остановки
QDialog::accept();
 }

MyPage::MyPage(QWidget *parent)
     : QWizardPage(parent)
 {

QLabel* stopLabel = new QLabel(trUtf8("книга:"));
QComboBox *poet = new QComboBox;
poet->addItem(trUtf8("Пушкин"));
poet->addItem(trUtf8("Есенин"));
poet->setCurrentIndex(-1);
stopLabel->setBuddy(poet);

registerField("stopBit*", poet, "QString currentText", "currentIndexChanged(const QString& currentText )");

     QGridLayout *layout = new QGridLayout;
layout->addWidget(stopLabel, 0, 0);
layout->addWidget(poet, 0, 1);
     setLayout(layout);
 }

MyPage::~MyPage(){}

int main(int argc, char *argv[])
{
      QApplication app(argc, argv);
  ConnectionWizard dialog;
dialog.exec();
  return 0;
}
« Последнее редактирование: Июнь 05, 2008, 10:34 от juvf » Записан
uriel
Гость
« Ответ #1 : Июнь 05, 2008, 08:42 »

Если посмотреть в исходники класса QWizard, то можно заметить, что по-умолчанию свойства задаются следующим образом:
Код:
const int NFallbackDefaultProperties = 7;

const struct {
    const char *className;
    const char *property;
    const char *changedSignal;
} fallbackProperties[NFallbackDefaultProperties] = {
    // If you modify this list, make sure to update the documentation (and the auto test)
    { "QAbstractButton", "checked", SIGNAL(toggled(bool)) },
    { "QAbstractSlider", "value", SIGNAL(valueChanged(int)) },
    { "QComboBox", "currentIndex", SIGNAL(currentIndexChanged(int)) },
    { "QDateTimeEdit", "dateTime", SIGNAL(dateTimeChanged(QDateTime)) },
    { "QLineEdit", "text", SIGNAL(textChanged(QString)) },
    { "QListWidget", "currentRow", SIGNAL(currentRowChanged(int)) },
    { "QSpinBox", "value", SIGNAL(valueChanged(int)) }
};
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #2 : Июнь 05, 2008, 10:33 »

спасибо.

рагистрация registerField("speed*", speedQComboBox, "currentText", SIGNAL(currentIndexChanged(QString)) ); решила мою проблему.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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