LINUX.ORG.RU

[QT] Взаимодействие между окнами программы

 


0

0

Добрый день! Подскажите пожалуйста:
-Есть пролграммы - в ней два окна: главное и второе...
Так вот объясните мне как из этого второго окна мне изменить, скажем, значение в поле главного окна?

Наоборот могу - а так сиг фолт...
Спасибо!

Чего, еще раз и помедленнее :)

>Есть пролграммы - в ней два окна: главное и второе..
Программа одна или две, что значит второе и чем оно отличается от главного? Оно дочернее у QWorkspace (MDI интерфейс) или это QDialog (модальный или немодальный)

[off]
Ей богу, как у Задорного: "отец токарь, мать тоже русская"
[/off]

> Так вот объясните мне как из этого второго окна мне изменить, скажем, 
> значение в поле главного окна? 
Кусочек кода будьте добры - того, что работает и того, что сигфолтит.

+ Версия Qt

phoenix ★★★★
()
Ответ на: комментарий от phoenix

Например:


// mainwindow.cpp
#include "mainwindow.h" //glavnoje okno
#include "checkform.h" // vtoroje okno


// eto vizov vtorogo okna - formy - vsio rabotaet
void MainWindow::showCheckForm()
{
Checkform * ch = new Checkform();
ch->label1->setText("Ok");
ch->show();
delete ch;
}
/* У нас в этом окне - MainWindow - есть QTextEdit и вот теперь вопрос - как мне передать из второй формы CheckForm значение в этот QTextEdit */

//checkform.cpp

#include "mainwindow.h"

void Checkfrom::sendText()
{
MainWindow *mw;
mw->TextView->setText("not work");

}

Severus_Zley
() автор топика
Ответ на: комментарий от Severus_Zley

void Checkfrom::sendText()
{
  MainWindow *mw;
  mw->TextView->setText("not work");
}
Вы действительно хотите чтоб этот код работал или просто прикалываетесь???
Если первое - немедлненно читайте Страуструпа, или любую другую книгу.
Кстати, ести компилировать в -Wall, то g++ наверняка поскажет, что mw неинициализированна.

Небольшое пояснение:
MainWindow* mw - это объявление переменной, никакого отношения к экземпляру
MainWindow, из которого была создана Checkform оно не имеет.
Напрашиваются 2 простых решения: передавать в конструктор Checkform указатель
на родительское окно и уже для него делать ptr->TextView->... или
из в MainWindow::showCheckForm() выковыривать искомые значения из chechform

phoenix ★★★★
()
Ответ на: комментарий от phoenix

Нет, я действительно не прикалывался - просто не знал - я только учусь:)...

А по-подробнее можно...

То есть в checkform.h / .cpp :\
QDialog(..., MainWindow *mw,....)

или как?

Толдько не смейтесь и вправду не сталкивался с подобным...

Спасибо!

Severus_Zley
() автор топика
Ответ на: комментарий от Severus_Zley

Ok, унял приступы LOL-а.

1) Читайте книжки

2) Можно сделать так (вариант раз)
class CheckForm: public QDialog {
...
public:
  CheckForm ( MainWindow* parent = 0, const char* name = 0, bool modal = FALSE, WFlags f = 0 )
};

Т.е. вместо стандартного QWidget* передавать именно MainWindow* и мутить чего вздумается с parent внутри.
Но IMHO это не лучший способ, не факт что CheckForm всегда будет 
создаваться там, где есть MainWindow, я бы сделал так (второй вариант),
работает для модальных окон:

MainForm::showCheckForm()
{
  CheckForm* cf = new CheckForm(...);
  cf->setModal(TRUE);
  cf->show();

  this->textfield1->setText(cf->getTextForField1());
  this->textfield2->setText(cf->getTextForField2());
//  .... итд
  delete cf;
}

3) Можно еще сообщения (QEvent) слать из CheckForm, а в MainWindow на них реагировать :)

phoenix ★★★★
()
Ответ на: комментарий от phoenix

///public:
// CheckForm ( MainWindow* parent = 0, const char* name = 0, bool modal //= FALSE, WFlags f = 0 )
///};

В принципе я это и имел ввиду...
А вообще, огромное спасибо за объяснения!

Severus_Zley
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.