Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Общение между двумя объектами!


Автор: Racot 14.4.2012, 16:09
Код
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow1 *w = new MainWindow1();
    MainWindow2 *w2 = new MainWindow2();

    w->show();

    return a.exec();
}



У меня есть 2 формы классов MainWindow1 и MainWindow2.На каждой есть по кнопке, по нажатию которой должна появляется другая форма, а эта скрывается. То есть в слоте обработки нажатия на кнопку должно быть примерно так:
Код:

Код
void MainWindow1::on_pushButton_clicked()
{
  w2->show();
  w1->hide();  
}



но класс MainWindow1 ничего же не знает о объекте w2. Как это делается? Можно MainWindow1 *w и
MainWindow2 *w2 объявлять глобально.Но я читал что  это не правильно.(тем более допустим в java нет глобальных переменных, но там же как то это реализовывается). В общем кто реализовывал многооконные интерфейсы - помогите!! 

Модератор: не забываем пользоваться кнопочкой "Код"

Автор: borisbn 14.4.2012, 16:55
Передавай указатель на одно окно другому
Код

class MainWindow1 {
...
public:
   void setOther( QWidget * other ) { m_other = other; }
...
private:
   QWidget * m_other;
};

void MainWindow1::on_pushButton_clicked() {
    m_other->show();
    this->hide();  
}

у второго класса полностью идентично.
а в main делаешь так
Код

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow1 *w = new MainWindow1();
    MainWindow2 *w2 = new MainWindow2();
    w->setOther( w2 );
    w2->setOther( w );

    w->show();

    return a.exec();
}


Добавлено через 1 минуту и 50 секунд
Цитата(Racot @  14.4.2012,  16:09 Найти цитируемый пост)
Можно MainWindow1 *w и
MainWindow2 *w2 объявлять глобально.Но я читал что  это не правильно

Правильно читал. Без этого всегда можно и нужно обходиться.

Автор: Racot 14.4.2012, 16:59
Как только создаю в каждом из классов указатели друг на друга.....то компилятор мне выдаёт -


..\Temp_pro\/mainwindow2.h:15: error: ISO C++ forbids declaration of 'MainWindow1' with no type
..\Temp_pro\/mainwindow2.h:15: error: expected ';' before '*' token

borisbn  а ты  сам пробывал?
или подскажи что енто за ошибка))) 

Автор: Racot 14.4.2012, 18:03
А всё .......разобрался!!!!! Спасибо!!!

Автор: bsa 14.4.2012, 23:28

M
bsa
Пометь тему решенной

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