crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 17:05