Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Диалог


Автор: RobRoj7779 22.11.2010, 22:48
Здравствуйте, 
Помогите, пожалуйста.
Пытаюсь передать параметры в приложение.
Параметры выставляю в диалоговой форме.
Диалог вывожу. параметры меняю. Но в приложении они не отображаются.
Где ошибка? Не знаю.
Код

class DialogImpl : public QDialog, public Ui::Dialog
{
Q_OBJECT
public:
    DialogImpl( QWidget * parent = 0, Qt::WFlags f = 0 );
    int NbrRsh, NbrDvs;


Код

dialog = new DialogImpl(this);
if(dialog->exec()){
    int nbr1 = dialog->NbrRsh;     int nbr2 = dialog->NbrDvs;
    Ln1 = QString::fromLocal8Bit("Номер расширителя = ");
    Ln1 += QString::number(nbr1);
    lbInfo3->setText(Ln1);
    Ln2 = QString::fromLocal8Bit("Номер устройства = ");
    Ln2 += QString::number(nbr2);
    lbInfo4->setText(Ln2);
}

Автор: Khorynthium 23.11.2010, 01:51
Эм, а ты значения установленные в диалоге точно в int NbrRsh, NbrDvs; заносишь?

Автор: RobRoj7779 23.11.2010, 04:13
Да, для проверки выводил эти значения на форму диалога.

Автор: borisbn 23.11.2010, 09:22
RobRoj7779, покажи cpp-шник, в котором реализован DialogImpl

Автор: RobRoj7779 23.11.2010, 22:16
Здравствуйте.
Код

#include <QtGui>
#include "dialogimpl.h"
//
DialogImpl::DialogImpl( QWidget * parent, Qt::WFlags f) 
    : QDialog(parent, f)
{
    setupUi(this);
}
// ------------------------------- Выбор номеров ---------------
void DialogImpl::set_Select()

    QString Ln;
    NbrRsh = dblSpnBx_NumbrRash->value();
    NbrDvs = dblSpnBx_NumbrDvs->value();
    Ln = QString::fromLocal8Bit("NbrRsh = ");
    Ln += QString::number(NbrRsh);
    Ln += QString::fromLocal8Bit("; NbrDvs = ");
    Ln += QString::number(NbrDvs);
    lbInfo->setText(Ln);
}

Код

#ifndef DIALOGIMPL_H
#define DIALOGIMPL_H
//
#include <QDialog>
#include "ui_dialog.h"
#include "fileStru.h"
//
class DialogImpl : public QDialog, public Ui::Dialog
{
Q_OBJECT
public:
    DialogImpl( QWidget * parent = 0, Qt::WFlags f = 0 );
    int NbrRsh, NbrDvs;

private slots:
    void set_Select();

};
#endif

Автор: SABROG 24.11.2010, 09:23
А где ты вызываешь слот set_Select()?

Автор: borisbn 24.11.2010, 09:27
А где connect на set_Select() ?

Автор: RobRoj7779 24.11.2010, 19:06
Здравствуйте. Мне нужно извиниться перед Вами. 
Видимо не достаточно полно описал задачу.
Реальная задача - это конфигуратор устройства с множеством настроек.
Настройки сгруппированы в закладки. Я решил задачу примитивно, без диалога.
Но по-моему в моем случае применение диалога для ввода дополнительных параметров было бы красиво и грамотно.
Применение диалога только осваиваю. Книга Бланшет особо не помогла. Поэтому обратился за профессиональной помощью к Вам.
Реальный код достаточно большой поэтому привожу тестовый, учебный вариант. 
В примере две закладки. При открытии второй выводится окно диалога (slot set_Select) При установке двух параметров int NbrRsh, NbrDvs;
в диалоге и закрытия диалога значения этих параметров должны отобразиться на второй закладке. Не отображаются.

Вопрос: А разве для модальной формы нужен conect?

Добавлено через 10 минут и 5 секунд
Извините. set_Select() в диалоге на кнопке выбора параметров.
Выбираю значения параметров при помощи SpinBox (value). Затем кнопка выбора, установки параметров.
Далее закрываю форму диалога.
В закладке в виде строки хотел отобразить выбранные параметры в диалоге. Их нет.
Помогите, пожалуйста разобраться.

Автор: SABROG 24.11.2010, 22:45
Цитата(RobRoj7779 @  24.11.2010,  19:06 Найти цитируемый пост)
Помогите, пожалуйста разобраться. 

К сожалению, без настоящих исходных кодов чем-то помочь затруднительно.

Автор: RobRoj7779 25.11.2010, 07:34
Здравствуйте.
Тестовый пример полный. Надеюсь на его примере научиться применять диалоги.
Код

#include "mainwindowimpl.h"
#include "dialogimpl.h"
//
MainWindowImpl::MainWindowImpl( QWidget * parent, Qt::WFlags f) 
    : QMainWindow(parent, f)
{
    setupUi(this);
}
// ----------------------- Выбор основной закладки -----------------------
void MainWindowImpl::pageSelSt()
{
    QString Ln1, Ln2;
    int nbr1;
    int nbr2;
    int indexSt;
    dialog = new DialogImpl(this);
    indexSt = tabWidgetStat->currentIndex();
    switch (indexSt){
        case 0: {
            Ln2 = QString::fromLocal8Bit("Выбрана основная закладка №1 ");
            lbInfo1->setText(Ln2);
            pageSelCh1();
            break;
        }
        case 1: {
            Ln2 = QString::fromLocal8Bit("Выбрана основная закладка №2 ");
            lbInfo1->setText(Ln2);
            pageSelCh2();
// -------------------------------------------------------
            if(dialog->exec()){
                nbr1 = dialog->NbrRsh;    nbr2 = dialog->NbrDvs;
            }
            Ln1 = QString::fromLocal8Bit("Номер расширителя = ");
            Ln1 += QString::number(nbr1);
            lbInfo3->setText(Ln1);
            Ln2 = QString::fromLocal8Bit("Номер устройства = ");
            Ln2 += QString::number(nbr2);
            lbInfo4->setText(Ln2);
//            delete dialog;
// -------------------------------------------------------
            break;
        }
    }
}
// ----------------------- Выбор дочерней закладки #1 --------------------
void MainWindowImpl::pageSelCh1()
{
    QString Ln2;
    int indexCh1;
    
    indexCh1 = tabWidgetChild1->currentIndex();
    switch (indexCh1){
        case 0: {
            Ln2 = QString::fromLocal8Bit("Выбрана дочерняя закладка №1 ");
            lbInfo2->setText(Ln2);
            break;
        }
        case 1: {
            Ln2 = QString::fromLocal8Bit("Выбрана дочерняя закладка №2 ");
            lbInfo2->setText(Ln2);
            break;
        }
    }
}
// ----------------------- Выбор дочерней закладки #2 --------------------
void MainWindowImpl::pageSelCh2()
{
    QString Ln2;
    int indexCh2;
    indexCh2 = tabWidgetChild2->currentIndex();
    switch (indexCh2){
        case 0: {
            Ln2 = QString::fromLocal8Bit("Выбрана дочерняя закладка №1 ");
            lbInfo2->setText(Ln2);
            break;
        }
        case 1: {
            Ln2 = QString::fromLocal8Bit("Выбрана дочерняя закладка №2 ");
            lbInfo2->setText(Ln2);
            break;
        }
    }
}
//

Код

//
#include <QMainWindow>
class DialogImpl;
#include "ui_mainwindow.h"
//
class MainWindowImpl : public QMainWindow, public Ui::MainWindow
{
Q_OBJECT
public:
    MainWindowImpl( QWidget * parent = 0, Qt::WFlags f = 0 );
    DialogImpl *dialog;
private slots:
    void pageSelSt();
    void pageSelCh1();
    void pageSelCh2();
};
#endif

Автор: SABROG 25.11.2010, 20:25
Цитата(RobRoj7779 @  25.11.2010,  07:34 Найти цитируемый пост)
Тестовый пример полный.

К сожалению не полный. Мне нужен код, который я смогу скомпилировать и запустить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)