Russian Qt Forum

Qt => Вопросы новичков => Тема начата: kaw от Май 28, 2014, 15:58



Название: signal slot между формами!
Отправлено: 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) );
}

Заранее спасибо!


Название: Re: signal slot между формами!
Отправлено: _Vitaliy_ от Май 28, 2014, 16:42
как вариант для начала http://easy-qt.blogspot.com/2012/10/1.html (http://easy-qt.blogspot.com/2012/10/1.html)


Название: Re: signal slot между формами!
Отправлено: kaw от Май 28, 2014, 20:47
Во чел вот помог :)
Это пример 100 раз вкуривал, у меня другие условия. И мой  вариант рабочий. Выводит только предупреждение что
Код:
ConsultantGUI *consult  = new ConsultantGUI();
которое прописано в mainwindow.h работать будет только при наличии С++11
Для данного  типа помощников  расскажу отличие:
1) у меня нет инициатора сендора так как к кнопке не могу прицепить т.к. надо проверить все условия поэтому сигнал посылается сразу после соблюдения всех условий.
2) Вторая форма создается тоже после прохождения тех же условий.  Если строку подключения сигнала со слотом прописать тут же то сигнал не отрабатывает, только в конструкторе и из-за этого инициализирую форму2 в mainwindow.h