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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: signal slot между формами!  (Прочитано 2070 раз)
kaw
Гость
« : Май 28, 2014, 15:58 »

Привет всем!
Есть такой вопрос как правильно передать параметр вот мой код он работает, но меня смущает корректность его. Гляньте плиз.
Условие  такие:
есть MainWondow при выполненных  условиях из него создается Dialog и передается один параметр, при этом MainWondow скрывается.

mainwindow.h
Код:
signals:
    void sendData(int arg);

private:
    Ui::MainWindow *ui;
    ConsultantGUI *consult  = new ConsultantGUI();
    QSqlDatabase db;
mainwondow.cpp
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QObject::connect(this,SIGNAL(sendData(int)),consult,SLOT(recieveData(int)));
}

void MainWindow::on_pushButton_2_clicked()
{
    QSqlQuery q;
    q.exec (" SELECT * FROM USERS WHERE LOGIN = '" + ui->lineEdit->text() +"'" );
    q.last();
    if ( q.at() >= 0 )
    {
        q.first();
        if ( q.value( 4 ).toInt() == 0)
        {
            if ( q.value( 2 ).toString().trimmed() != ui->lineEdit_2->text() )
            {
                ...
            } else
            {
                setHidden( true );
                int user = q.value( 0 ).toInt();
                emit sendData( user );
                consult->exec();
            }
        } else
            ...
    } else
    {
      ....
    }
}
consult.h
Код:

private slots:
    void recieveData(int arg);
consult.cpp
Код:
void Consult::recieveData(int arg)
{
    ui->label_7->setText( QString::number(arg) );
}

Заранее спасибо!
Записан
_Vitaliy_
Гость
« Ответ #1 : Май 28, 2014, 16:42 »

как вариант для начала http://easy-qt.blogspot.com/2012/10/1.html
Записан
kaw
Гость
« Ответ #2 : Май 28, 2014, 20:47 »

Во чел вот помог Улыбающийся
Это пример 100 раз вкуривал, у меня другие условия. И мой  вариант рабочий. Выводит только предупреждение что
Код:
ConsultantGUI *consult  = new ConsultantGUI();
которое прописано в mainwindow.h работать будет только при наличии С++11
Для данного  типа помощников  расскажу отличие:
1) у меня нет инициатора сендора так как к кнопке не могу прицепить т.к. надо проверить все условия поэтому сигнал посылается сразу после соблюдения всех условий.
2) Вторая форма создается тоже после прохождения тех же условий.  Если строку подключения сигнала со слотом прописать тут же то сигнал не отрабатывает, только в конструкторе и из-за этого инициализирую форму2 в mainwindow.h
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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