Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
14 / 13 / 4
Регистрация: 30.09.2015
Сообщений: 134

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

07.10.2015, 12:29. Показов 6949. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru