crossplatform.ru

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

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> создание собственных диалоговых окон
Litkevich Yuriy
  опции профиля:
сообщение 1.1.2010, 23:13
Сообщение #21


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

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

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




Репутация:   94  


Цитата(breeve @ 2.1.2010, 1:32) *
Можно ли им воспользоваться для этого
Можно, т.к. это указатель на класс pass.
Цитата(breeve @ 2.1.2010, 1:32) *
необходимо после нажатия на ок, чтобы считывалась вся информация и изменяла некоторые переменные в классе pass.
обычная практика для модальных диалогов:
void Pass::slotSettingsClicked()
{
  QString var1;
  int var2;
  
    InputDialog dialog(this);
    dialog.setFoo(...); // некая вспомогательная функция настройки
    
    // Если была нажата поддтверждающая кнопка, то читаем из диалога значения
    if (dialog.exec() == QDialog::Accepted){
        var1 = dialog.value1(); // некая функция возвращающая некое значение
        var2 = dialog.value2(); // некая функция возвращающая некое значение
    }
}

Если диалог не модальный, то данные нужно будет сохранять через указатель на родителя, а так как пользователь может отказаться от введённых данных (кнопка "Отмена"), то сохранение данных нужно вести в одном из переопределённых слотов:
done
accept

Для немодальных диалогов необходимо установить флаг Qt::WA_DeleteOnClose, вместо использования оператора delete, тогда диалог при закрытии удалится автоматически.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 1.1.2010, 23:34
Сообщение #22


Участник
**

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

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




Репутация:   1  


Цитата(Litkevich Yuriy @ 1.1.2010, 23:13) *
Если была нажата поддтверждающая кнопка, то читаем из диалога значения
А как сделать чтобы кнопка стала подтверждающей? Вот у меня кнопка Cancel, при нажатии на нее отправляется сигнал на слот reject(). А как быть с кнопкой ок?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.1.2010, 23:41
Сообщение #23


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

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

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




Репутация:   94  


Цитата(breeve @ 2.1.2010, 2:34) *
Вот у меня кнопка Cancel, при нажатии на нее отправляется сигнал на слот reject().
ты сам эту кнопку создал, или использовал QDialogButtonBox?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 1.1.2010, 23:43
Сообщение #24


Участник
**

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

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




Репутация:   1  


Сам. А что бывают специальные кнопки для диалоговых окон?))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.1.2010, 23:57
Сообщение #25


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

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

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




Репутация:   94  


Цитата(breeve @ 2.1.2010, 2:43) *
специальные кнопки
специальные наборы кнопок, с определёнными сигналами. QDialogButtonBox
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 1.1.2010, 23:57
Сообщение #26


Участник
**

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

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




Репутация:   1  


Наверное последний вопрос по этой теме.. )
Вот у меня в окне настроек SpinBox. И я хочу чтобы первоначально там стояло значение которое находится в переменной класса pass. Как его туда передать? Я имею ввиду, не как установить значение в SpinBox. А как передать значение в класс диалогового окна..

Сообщение отредактировал breeve - 1.1.2010, 23:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.1.2010, 23:59
Сообщение #27


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

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

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




Репутация:   94  


Лучше всего так:
Цитата(Litkevich Yuriy @ 2.1.2010, 2:13) *
dialog.setFoo(...); // некая вспомогательная функция настройки
т.е. заведи функции настроек диалога. В классе где ты создаёшь экземпляр диалога (например, pass) вызови эту функцию.

Посмотри пример:
%QTDIR%\examples\richtext\orderform
хороший пример по применению и созданию диалога, для приложения
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.1.2010, 1:46
Сообщение #28


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

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

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




Репутация:   94  


тему разделил: QDialogButtonBox, как поменять Ок и Отмена местами

П.С. QDialogButtonBox - самостоятельный класс, со своими особенностями
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 20.2.2010, 22:23
Сообщение #29


Участник
**

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

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




Репутация:   1  


Думал никогда не вернусь к этой теме..
Создал класс диалог, как отдельный проект. Запускаю все работает. Создал другой проект Wizard, на одной из страниц которого вставил этот диалог по нажатию кнопки. При нажатии появляется пустое окно.. Не могу понять в чем дело.
mywizard.cpp
#include "mywizard.h"

myWizard::myWizard(QWidget *parent)
    : QWizard(parent)
{
    addPage(createIntroPage());
    addPage(createTestingPage());
}

QWizardPage *myWizard::createIntroPage()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("Стили управления временем"));

    QLabel *label = new QLabel(tr("Пройдя этот тест вы узнаете какой стиль управления временем "
                                  "присущ именно вам!"));
    label->setWordWrap(true);
    QVBoxLayout *vLay = new QVBoxLayout;
    vLay->addWidget(label);
    page->setLayout(vLay);
    return page;
}
QWizardPage *myWizard::createTestingPage()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("Задание"));

    QPushButton *begin = new QPushButton(tr("Начать"));
    connect(begin, SIGNAL(clicked()), this, SLOT(myTest()));

    QLabel *label = new QLabel(tr("Рассмотрите приведенные ниже высказывания и определите, "
                                  "применимо ли это к вам или отражает ли высказвание вашу"
                                  " точку зрения. Если высказывание не противоречит вашей "
                                  "точке зрения или применимо к вам - поставьте галочку. Не"
                                  " пытайтесь найти 'правильный' ответ, а отвечайте так,"
                                  " как это есть на самом деле. Постарайтесь быть максимально"
                                  " откровенными."));
    label->setWordWrap(true);
    QVBoxLayout *vLay = new QVBoxLayout;
    vLay->addWidget(label);
    vLay->addSpacing(200);
    vLay->addWidget(begin);
    page->setLayout(vLay);

    return page;
}

void myWizard::myTest()
{
    Test test(this);

    test.exec();
    //test.show();
}
/*QWizardPage *myWizard::createResultPage()
{
}*/
mywizard.h
#ifndef MYWIZARD_H
#define MYWIZARD_H

#include <QtGui>
#include "test.h"

class myWizard : public QWizard
{
    Q_OBJECT

public:
    myWizard(QWidget *parent = 0);
    ~myWizard(){};
private:
    QWizardPage *createIntroPage();
    QWizardPage *createTestingPage();
    QWizardPage *createResultPage();
private slots:
    void myTest();
};

#endif // MYWIZARD_H
test.cpp
#include "test.h"

Test::Test(QWidget *parent)
//    : QWidget(parent)
    : QDialog(parent)//, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
{
    scroll = new QScrollArea;
    gbx = new QGroupBox;
    questions = new QCheckBox[40];
    done = new QPushButton(tr("Готово"));
    connect(done, SIGNAL(clicked()), this, SLOT(doneSlot()));

    QFile file("questions.txt");
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;
    QTextStream in(&file);
    int i = 0;
    while (!in.atEnd()) {
        que[i] = in.readLine();
        //process_line(que[i]);
        i++;
    }


    vLay = new QVBoxLayout;
    qLay = new QVBoxLayout;
    hLay = new QHBoxLayout;

    for(int i = 0;i<40;i++)
    {
        questions[i].setText(que[i]);
        qLay->addWidget(&questions[i]);
    }

    gbx->setLayout(qLay);
    scroll->setWidget(gbx);
    hLay->addSpacing(650);
    hLay->addWidget(done);
    vLay->addWidget(scroll);
    vLay->addLayout(hLay);
    setFixedWidth(800);
    setLayout(vLay);
}

void Test::doneSlot()
{
    for(int i = 0;i < 40;i++)
    {
        result[i] = questions[i].isTristate();
        //emit accepted();
    }
}
test.h
#ifndef TEST_H
#define TEST_H

#include <QtGui>

class Test : public QDialog
{
    Q_OBJECT

public:
    Test(QWidget *parent);
    ~Test(){};
private:
    QCheckBox *questions;
    bool result[40];
    QScrollArea *scroll;
    QVBoxLayout *vLay;
    QVBoxLayout *qLay;
    QHBoxLayout *hLay;
    QPushButton *done;
    QGroupBox *gbx;
    QString que[40];
private slots:
    void doneSlot();
};

#endif // TEST_H
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 20.2.2010, 22:27
Сообщение #30


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

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Ну так может он файл questions.txt найти не может?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 3.1.2025, 4:05