crossplatform.ru

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


  Ответ в QWizard
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Гость Дата 24.11.2012, 17:12
  посмотрите пожалуйста мою тему, аналогичная ситуация, не получается выцепить значение с предыдущей страницы, хотя все как в примере делаю
http://www.forum.crossplatform.ru/index.php?showtopic=8974
Kagami Дата 19.5.2009, 11:37
  Ну.. все очень просто. В данном случае надо подключать сигналы изменения чекбоксов и комбобоксов к своему слоту, который уже будет в зависимости от их состояния заполнять поле ввода. В твоей программе такой расчет происходит только один раз - при конструировании страницы.
В свой слот надо выносить вот этот кусок:
Раскрывающийся текст
    double h, s1, s2, s3, summa;
    QString hstring, s1string, s2string, s3string;
    hstring = combo0902->currentText();
    s1string = combo0901->currentText();
    s2string = combo0903->currentText();
    s3string = combo0904->currentText();
    h = hstring.toDouble();
    s1 = s1string.toDouble();
    s2 = s2string.toDouble();
    s3 = s3string.toDouble();
    summa = 0;
    if (check0901->isChecked())
    {
        if ((h>=1.5) && (h<2.0))
        {
            // сверхтонкая стяжка
            summa += 1578.1 * s1;
        }
        else if ((h>=2.0) && (h<3.5))
        {
            // тонкая стяжка
            summa += 1623.9 * s1;
        }
        else if ((h>=3.5) && (h<=8.0))
        {
            // нормальная стяжка
            summa += 2040.5 * s1;
        }
    }
    if (check0903->isChecked())
    {
        summa += 4 * sqrt(s2) * 273.0;
    }
    if (check0904->isChecked())
    {
        summa += 2040.5 * s3;
    }

    QString value = QString::number(summa);
    summa09->setText(value);
FladeX Дата 19.5.2009, 11:03
 
cpp
Func09Page::Func09Page(QWidget *parent)
    : QWizardPage(parent)
{
    setTitle(QObject::trUtf8("Заголовок"));
    setSubTitle(QObject::trUtf8("<br>"));
    setPixmap(QWizard::LogoPixmap, QPixmap(":/images/logo.png"));
    setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/func09.png"));

    check0901 = new QCheckBox(QObject::trUtf8("Текст"));
    label0901 = new QLabel(QObject::trUtf8("Текст"));
    combo0901 = new QComboBox;

    label0902 = new QLabel(QObject::trUtf8("Текст"));
    combo0902 = new QComboBox;

    check0903 = new QCheckBox(QObject::trUtf8("Текст"));
    label0903 = new QLabel(QObject::trUtf8("Текст"));
    combo0903 = new QComboBox;

    check0904 = new QCheckBox(QObject::trUtf8("Текст"));
    label0904 = new QLabel(QObject::trUtf8("Текст"));
    combo0904 = new QComboBox;

    summa09 = new QLineEdit;
    registerField("summafunc09", summa09);

    combo0901->setMaximumWidth(250);
    combo0902->setMaximumWidth(250);
    combo0903->setMaximumWidth(250);
    combo0904->setMaximumWidth(250);

    combo0901->insertItem(1, "10");
    //...
    combo0901->insertItem(50, "500");

    combo0902->insertItem(1, "1.5");
    //...
    combo0902->insertItem(14, "8.0");

    combo0903->insertItem(1, "10");
    //...
    combo0903->insertItem(50, "500");

    combo0904->insertItem(1, "10");
    //....
    combo0904->insertItem(50, "500");

    double h, s1, s2, s3, summa;
    QString hstring, s1string, s2string, s3string;
    hstring = combo0902->currentText();
    s1string = combo0901->currentText();
    s2string = combo0903->currentText();
    s3string = combo0904->currentText();
    h = hstring.toDouble();
    s1 = s1string.toDouble();
    s2 = s2string.toDouble();
    s3 = s3string.toDouble();
    summa = 0;
    if (check0901->isChecked())
    {
        if ((h>=1.5) && (h<2.0))
        {
            // сверхтонкая стяжка
            summa += 1578.1 * s1;
        }
        else if ((h>=2.0) && (h<3.5))
        {
            // тонкая стяжка
            summa += 1623.9 * s1;
        }
        else if ((h>=3.5) && (h<=8.0))
        {
            // нормальная стяжка
            summa += 2040.5 * s1;
        }
    }
    if (check0903->isChecked())
    {
        summa += 4 * sqrt(s2) * 273.0;
    }
    if (check0904->isChecked())
    {
        summa += 2040.5 * s3;
    }

    QString value = QString::number(summa);
    summa09->setText(value);

    QGridLayout *layout = new QGridLayout;
    layout->addWidget(check0901, 0, 0);
    layout->addWidget(label0901, 1, 0);
    layout->addWidget(combo0901, 2, 0);
    layout->addWidget(label0902, 3, 0);
    layout->addWidget(combo0902, 4, 0);
    layout->addWidget(check0903, 5, 0);
    layout->addWidget(label0903, 6, 0);
    layout->addWidget(combo0903, 7, 0);
    layout->addWidget(check0904, 0, 1);
    layout->addWidget(label0904, 1, 1);
    layout->addWidget(combo0904, 2, 1);
    layout->addWidget(summa09, 3, 1);
    setLayout(layout);
}

h
class Func09Page : public QWizardPage
{
    Q_OBJECT
public:
    Func09Page(QWidget *parent = 0);

private:
    QLabel *label0901;
    QLabel *label0902;
    QLabel *label0903;
    QLabel *label0904;
    QCheckBox *check0901;
    QCheckBox *check0903;
    QCheckBox *check0904;
    QComboBox *combo0901;
    QComboBox *combo0902;
    QComboBox *combo0903;
    QComboBox *combo0904;
    QLineEdit *summa09;
};

А использовать пытаюсь здесь:
cpp
OutroPage::OutroPage(QWidget *parent)
    : QWizardPage(parent)
{
    setTitle(QObject::trUtf8("Заголовок"));
    setSubTitle(QObject::trUtf8("Подзаголовок"));
    setPixmap(QWizard::LogoPixmap, QPixmap(":/images/logo.png"));
    setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/outro.png"));

    label9901 = new QLabel(QObject::trUtf8("Текст:"));
    line9901 = new QLineEdit;

    QString summa09 = field("summafunc09").toString();
    line9901->setText(summa09);

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(label9901);
    layout->addWidget(line9901);
    setLayout(layout);
}
Kagami Дата 18.5.2009, 20:05
  Немного подробностей реализации бы не помешало :)
FladeX Дата 18.5.2009, 14:30
  Да, теперь все работает. Благодарю!

Еще хочу выводить в QLineEdit (на каждой странице свой) какой-нибудь текст, причем текст зависит от значений QComboBox и QCheckBox, расположенных на странице. Я все написал, но у меня теперь показывает лишь первое значение, которое характерно для дефолтного состояния QComboBox и QCheckBox, а при их изменении значение QLineEdit не изменяется, хотя должно. Подскажите, почему так?
Kagami Дата 14.5.2009, 14:06
  В конструкторе страницы делаем:
registerField("checkBox1", checkBox1);

В nextID():
if (field("checkBox1").toBool()) {
//Если выбрано
...
} else {
//Иначе
...
}

P.S. Если читать документацию внимательней, то необходимость в 80% темах отпадает :)
FladeX Дата 14.5.2009, 13:27
  Kagami, и тем не менее, через registerFields у меня не получилось.
SABROG, генерировать и удалять не нужно. Есть конечный список предопределенных страниц, каждой из которых сопоставлен чекбокс. Если чекбокс отмечен, то эта страница будет отображаться в визарде по кнопке Next. Если чекбокс не отмечен, то страница эта не будет отображаться. Для такой реализации нужно просто перезадать nextId для каждой из страниц. Однако при этом я столкнулся с трудностью - область видимости переменных - чекбоксы-то только на первой странице, а nextId по одному на каждой (каждая страница - отдельный класс, унаследованный от QWizardPage).
SABROG Дата 14.5.2009, 12:13
 
Цитата(FladeX @ 14.5.2009, 12:07) *
Подскажите что можно сделать с чекбоксами :)
На первой странице несколько чекбоксов, каждый из которых соответсвует одной странице. При checked страница будет доступна в визарде, при !checked не будет. >_<

Я тебя правильно понимаю, проблема в том, что в "нелинейном" визарде переход на страницу либо осуществляется либо нет, но она доступна. Ты хочешь динамически генерить и удалять страницы в зависимости от выбора в чекбоксе?
Kagami Дата 14.5.2009, 11:57
  Что-то все коллективно тупят :)
Цитата
The QCheckBox widget provides a checkbox with a text label. More...

#include <QCheckBox>
Inherits QAbstractButton.
FladeX Дата 14.5.2009, 11:07
  Подскажите что можно сделать с чекбоксами :)
На первой странице несколько чекбоксов, каждый из которых соответсвует одной странице. При checked страница будет доступна в визарде, при !checked не будет. >_<
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 11:46