Проблемы с обновлением диалогового окна из другого

#c

#c

Вопрос:

у меня есть 2 немодальных диалоговых окна, оба запускаются из mainwindow. По сути, я пытаюсь передать строку нажатием кнопки с первого на второй, но безуспешно. итак, оба диалоговых окна объявлены в mainwindow.ч вот так:

 Dialog1 *dg1;
Dialog2 *dg2;
  

и созданный в mainwindow.cpp:

 dg1 = new Dialog1(this);
dg2 = new Dialog2(this);
  

мне нужно передать строку из dg1 в dg2, вызвав функцию, которая обновляет TextEdit для dg2. Я пытался:

 #include "Dialog2.h"
...

Dialog2 dg2;
dg2.callfunction(string);
  

но никаких признаков того, что строка попала туда. Как мне это сделать?

Комментарии:

1. Упомянутые вами Dialog2 экземпляры dg2 не связаны между собой.

2. Да, вам нужен доступ к исходной dg2 переменной, которая использовалась для создания Dialog2 .

3. спасибо, ребята, я сделал объявление dg2 общедоступным, и из dg1 я получил к нему доступ следующим образом, MainWindow mw; mw.dg2-> callfunction (строка); по-прежнему нет результата.

4. Являются ли dg1 и dg2 членами некоторого класса? Или это глобальные переменные?

Ответ №1:

Есть три способа решить это:

  1. Сигнал и слот: Создайте сигнал для dialog1 и слот для dialog2. Оба должны иметь QString в качестве параметра. Подключите их в главном окне, где создаются диалоги.

  2. Связь по установщику: Дайте dialog1 установщик, который принимает указатель на dialog2. Запомните указатель dialog2 в переменной-члене. Вызовите callfunction из dialog2 в dialog1, используя этот указатель. Вызовите средство установки указателя, в котором создаются диалоговые окна. Не забудьте очистить указатель, если dialog2 больше не доступен, и проверить правильность указателя перед доступом к нему.

  3. Связь по ссылке: Добавьте ссылку dialog2 в качестве параметра в конструктор dialog1. Запомните эту ссылку в переменной-члене. Вызовите callfunction из dialog2 в dialog1, используя эту ссылку. Для этого вам нужно создать dialog2 перед dialog1. Это работает безопасно, только если dialog2 всегда живет дольше, чем dialog1.

Вы должны быть в состоянии продвигаться вперед с этой информацией.

Я бы выбрал 1.

Я предлагаю прочитать больше о необходимых основах. Прочитайте о сигналах и слотах Qt. Прочитайте об указателях, ссылках и конструкторах C .