14 / 13 / 4
Регистрация: 30.09.2015
Сообщений: 134

Связь между формами

07.10.2015, 12:29. Показов 6969. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите решить проблему пожалуйста.
Есть 2 формы MainWindow и MultiWorkForm. нужно организовать передачу данных между ними.
Передать данные из маинвиндо в Мултиформ я могу.а вот обратно не получается( те не получается создать указатель на MainWindow);
Mainwindow.h
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include<QFtp>
#include<QTreeWidget>
#include<QTreeWidgetItem>
#include<QUrlInfo>
#include<QtNetwork>
#include<QHash>
#include<QString>
#include<QFile>
#include<QStringList>
#include<QByteArray>
#include<QComboBox>
#include<QTextBrowser>
#include<QMessageBox>
#include<QDir>
#include"multiworkform.h"
 
class QProgressDialog;
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
   
signals:
    void sentData(QStringList ip,QStringList Dir);
 
private slots:
  .......
 
 
private:
    Ui::MainWindow *ui;
    MultiWorkForm *w2;
  
};
 
#endif // MAINWINDOW_H

тут вроде все норм, задаю потом в Mainwindow.cpp w2(new MultiWorkForm) и обращаюсь через w2

multiworkform.h
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef MULTIWORKFORM_H
#define MULTIWORKFORM_H
#include <QWidget>
#include"mainwindow.h"
 
 
namespace Ui {
class MultiWorkForm;
 
}
 
class MultiWorkForm : public QWidget
{
    Q_OBJECT
 
public:
    explicit MultiWorkForm(QWidget *parent = 0);
    ~MultiWorkForm();
signals:
    //void MultiWorkForm::closeEvent ( QCloseEvent * e );
private slots:
     void getData(QStringList data,QStringList Dir);
private:
    Ui::MultiWorkForm *ui;
   MainWindow *w1;
 
};
 
#endif // MULTIWORKFORM_H

а вот тут компилятор ругается на MainWindow *w1;('MainWindow' does not name a type),причем если оставить заголовок #include"mainwindow.h", то перестает работать и указатель на вторую форму(Оставлял только инклюд во втором хедере). а если удалить инклюд, то выдает тоже самое('MainWindow' does not name a type) и не понимает что такое MainWindow()

пробовал в MultiWorkFORM.cpp просто вызывать первую форму через MainWindow w; w.show(); Получаю краш((
подскажите плиз,где я косячу?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.10.2015, 12:29
Ответы с готовыми решениями:

Взаимодействия между формами
Доброго времени суток! Подскажите, пожалуйста, как лучше поступить. Вообщем, есть две формы, одна главная и одна второстепенная, которая...

Взаимодействие между формами
Созданы два класса с формами mainwindow и dialog. Добавляю в раздел public указатель формы ui в dialog.h, однако ее виджеты не доступны в...

Переход между формами
Здравствуйте, форумчане. Создаю программу с множеством форм. Много переходов между формами. Переход 1-2-3 сделал, а как сделать переход...

32
205 / 165 / 41
Регистрация: 25.10.2013
Сообщений: 527
07.10.2015, 20:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SkaDi Посмотреть сообщение
получилось сделать и через указатели и через слоты, Огромное спасибо за помощь!!!!slava_stepankof, Shtirliz72, Воротислав
Пожалуй мне стоит получше разобраться в классах)
Следует. Нужно прочесть какую-нибудь книгу для начинающий по С++. Это немного займёт, максимум - часов 8, но знаний напорядок прибавится и так наугад вы уже больше не будете действовать.

P.S. Спасибо на форуме по другому говорят - в правом нижнем углу сообщения есть кнопка "+1 Спасибо". Вот её и надо нажимать. Успехов! +)
0
8 / 8 / 3
Регистрация: 20.10.2015
Сообщений: 50
02.06.2016, 18:32
Здравствуйте!
Пусть это будет некропост. Но вопрос по теме, в её развитие.
Как правильно обратиться к объектам другой формы которые определены в дизайнере?
Как правильно объявить и использовать ui другой формы? Вот возникла такая задача, в коде главного окна использовать ui дочернего и наоборот. Есть простые способы?
0
14 / 13 / 4
Регистрация: 30.09.2015
Сообщений: 134
03.06.2016, 14:27  [ТС]
Цитата Сообщение от pdn_mail Посмотреть сообщение
Здравствуйте!
Пусть это будет некропост. Но вопрос по теме, в её развитие.
Как правильно обратиться к объектам другой формы которые определены в дизайнере?
Как правильно объявить и использовать ui другой формы? Вот возникла такая задача, в коде главного окна использовать ui дочернего и наоборот. Есть простые способы?
нужно передать указатель на обьект в ту форму , где нужно с ним работать, например так
0
14 / 13 / 4
Регистрация: 30.09.2015
Сообщений: 134
03.06.2016, 14:49  [ТС]
test.rar
вот пример передачи указателя в вызываемую форму и обратно, через публичные слоты
можно также сделать через сигналы-слоты;
0
8 / 8 / 3
Регистрация: 20.10.2015
Сообщений: 50
03.06.2016, 15:20
Так это понятно, я даже это делаю проще, без сигналов и слотов, просто объявляю глобальные переменные для объектов и туда пишу указатели на объекты при создании.
Я спрашиваю про то, как получить указатель на ui другой формы так, чтобы с него можно было получить доступ ко всем объектам формы сразу, как это делается в самой форме этого ui.
Например в главном окне обращаться к объектам формы созданной в дизайнере примерно так
UiForm->someButton->setText("bla");
0
14 / 13 / 4
Регистрация: 30.09.2015
Сообщений: 134
03.06.2016, 17:41  [ТС]
ну передавайте указатель this
0
8 / 8 / 3
Регистрация: 20.10.2015
Сообщений: 50
04.06.2016, 07:33
Цитата Сообщение от SkaDi Посмотреть сообщение
ну передавайте указатель this
Ок, но как мне его объявить в другой форме, не так же
C++ (Qt)
1
2
3
Ui::MainWindow *uimw;
или
Ui::Form *uiform
Другая форма имеет свой такой же namespace Ui::, как тогда заюзать чужой namespace?
0
14 / 13 / 4
Регистрация: 30.09.2015
Сообщений: 134
06.06.2016, 19:31  [ТС]
pdn_mail,
просто MainWindow *ui_from_mainwindow;

Проблема заключается в том, что если вы добавите в хедер второй формы #include "mainwindow.h" и в хедере mainwindow будет подключен хедер формы, то прога крашнется. поэтому вып придется вести указатель через все функции, что очень сложно.

ябы на вашем месте передавал в форму массив указателей детей от mainwindow, и работал бы с ним. Обратите внимание на QWidget::findchild();
0
60 / 56 / 21
Регистрация: 31.03.2014
Сообщений: 234
07.06.2016, 09:17
Хочется узнать, а зачем вообще это надо? В смысле зачем нужен доступ к виджетам родительского окна из дочернего?
0
07.06.2016, 09:26

Не по теме:

Да, мало ли зачем. К примеру создали в дочернем окне новую модель, плагин там или ещё что, неважно, но вот появилась новая моделька вне главной формы и надо её присобачить к виджету на главной форме.
Не в этом суть, просто в отличии от нормальных IDE, где всё созданное в дизайнере при желании может быть доступно откуда угодно, здесь как-то сильно отделено, это ограничивает и замедляет разработку простых вещей.

0
 Аватар для Wyn
1073 / 654 / 230
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
07.06.2016, 09:35
Цитата Сообщение от ldir82 Посмотреть сообщение
В смысле зачем нужен доступ к виджетам родительского окна из дочернего?
Плохая архитектура приложения.
0
60 / 56 / 21
Регистрация: 31.03.2014
Сообщений: 234
07.06.2016, 10:19
Wyn, это понятно. Я собственно и спрашивал, в данной ситуации зачем. Я когда начинал свое знакомство с Qt после PureBasic'a, тоже искал ответ на этот вопрос. Потом понял, что был не прав. Вот и хотел помочь человеку. Быть может у него подобная ситуация.
0
14 / 13 / 4
Регистрация: 30.09.2015
Сообщений: 134
08.06.2016, 21:08  [ТС]
Цитата Сообщение от pdn_mail Посмотреть сообщение
Да, мало ли зачем. К примеру создали в дочернем окне новую модель, плагин там или ещё что, неважно, но вот появилась новая моделька вне главной формы и надо её присобачить к виджету на главной форме.
Не в этом суть, просто в отличии от нормальных IDE, где всё созданное в дизайнере при желании может быть доступно откуда угодно, здесь как-то сильно отделено, это ограничивает и замедляет разработку простых вещей.
я сомневаюсь что вам нужно управлять ВСЕМИ виджетами от mainwindow, поэтому можно спокойно передавать указатель на 1н или 2 или 3 и тд виджетов, это раз.
и два, то что вы можете изменять любой виджет mainwindows прописав сигнал-слот от любой другой формы, с любыми параметрами изменения( что будет наверное правильнее всего)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.06.2016, 21:08

Qt передача qsqltablemodel между формами
Приветствую, дорогие форумчане. На данном этапе разработки пытаюсь организовать поиск(фильтр) из одной формы, а данные берутся из БД. ...

Передача параметров между формами Qt
Здравствуйте. У меня есть 2 окна - одно MainWindow из которого вызывается окно Widget' а. В Widget происходит ввод текста. Мне необходимо...

Передача данных между формами
Я уже голову сломала...не понимаю, что не так((( Знаю тут куча тем такого рода но ответа на мой вопрос нет. Вот нарисовала картинку... ...

Передача данных между формами
Я знаю, тема уже была и наверняка не раз, но прошу помощи есть MainWindow в нем вызывается диалоговое окно1, из окна1 нужно вызвать...

Не передаётся текстовая строка между формами
что имеию: приват переменную которая должна содержать текст, для задания которой написал сеттитл 1) обработчик клика на 1 форме void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Опции темы

Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru