Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
nammidd
10 / 10 / 2
Регистрация: 05.06.2016
Сообщений: 180
1

Классы, использование полей и методов друг друга

19.03.2017, 14:45. Просмотров 168. Ответов 1
Метки нет (Все метки)

Здравствуйте, не могли бы вы мне подсказать, это скорее относится к C++ чем к Qt.

У меня есть класс NewItemDialog чей экземпляр создаётся в классе MainWindow, в классе MainWindow я могу спокойно использовать поля и методы класса NewItemDialog, но в классе NewItemDialog я не могу обратно обращаться к классу MainWindow, как мне это можно реализовать?

// MainWindow обычное окно с деревом, NewItemDialog второе обычное окно которое открывается по нажатию кнопки, оно же должно вести общение с MainWindow, т.е. хотя-бы на данный момент создавать там пункты в дереве.

all.h
C++ (Qt)
1
2
3
4
5
6
#ifndef ALL_H
#define ALL_H
 
#include <QtWidgets>
 
#endif // ALL_H
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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include "all.h"
#include "newitemdialog.h"
 
class MainWindow : public QObject
{
    Q_OBJECT
 
public:
    MainWindow();
    void show();
 
private:
    QMainWindow                 *_MainWindow;
    QWidget                     *center;
    QHBoxLayout                 *hbox;
    QTreeWidget                 *treeWidget;
    QToolBar                    *tools;
 
    NewItemDialog               *newItemDiaglog;
 
};
 
#endif // MAINWINDOW_H
newitemdialog.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef NEWITEMDIALOG_H
#define NEWITEMDIALOG_H
 
#include "all.h"
 
class NewItemDialog : public QObject
{
    Q_OBJECT
 
public slots:
    void newItem();
};
 
#endif // NEWITEMDIALOG_H
main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "all.h"
#include "mainwindow.h"
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
 
    MainWindow *mainWindow = new MainWindow;
 
    mainWindow->show();
 
    return app.exec();
}
mainwindow.cpp
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
#include "mainwindow.h"
 
MainWindow::MainWindow()
{
    newItemDiaglog =    new NewItemDialog;
    _MainWindow =       new QMainWindow;
    center =            new QWidget;
    treeWidget =        new QTreeWidget;
    hbox =              new QHBoxLayout;
    _MainWindow->setCentralWidget(center);
    center->setLayout(hbox);
    hbox->addWidget(treeWidget);
 
    tools = _MainWindow->addToolBar("Tools");
    QAction *newItem = new QAction("&New Item", this);
    QObject::connect(newItem, &QAction::triggered, newItemDiaglog, &NewItemDialog::newItem);
    tools->addAction(newItem);
}
 
void MainWindow::show()
{
    _MainWindow->show();
}
newitemdialog.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "newitemdialog.h"
 
void NewItemDialog::newItem()
{
    QDialog *newItemDialog = new QDialog(nullptr, Qt::WindowCloseButtonHint);
    newItemDialog->show();
 
    /*
    QTreeWidgetItem *item = new QTreeWidget;
    item->setText(0, "Text");
    mainWindow->treeWidget->insertTopLevelItem(item);
    */
 
    /* Вот то что мне примерно нужно, но как получать доступ к моему экземпляру класса mainWindow
     * который находится в main.cpp я не знаю */
    /* Если что, то мне не обязательно нахождение mainWindow в main.cpp, может быть следует
     * его расположить где-нибудь в другом месте для коммуникаций, я не знаю... */
}
 Комментарий модератора 
Ставьте теги правильно!
Правила именования тем и оформления сообщений в разделе Qt
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2017, 14:45
Ответы с готовыми решениями:

Вызов обработчиков друг из друга
Здравствуйте! есть обработчики события void...

QSlider и QProgressbar наложить друг на друга
Такой вопрос . Имеется ProgressBar , который отвечает за мощность в задании....

QVBoxLayout: виджеты наезжают друг на друга
Доброго времени суток. После долгого перерыва вернулся к Qt, слепил...

Процессы мониторят состояния друг друга
добрый день. с qt только начал ознакомление. нужно сделать следующую...

Работа с потоками(приостановка потоков и восстановление друг из друга)
Есть основной класс mainwindow и два объекта класса(можно разделить на два...

1
nmcf
6519 / 5747 / 2617
Регистрация: 14.04.2014
Сообщений: 24,493
19.03.2017, 19:01 2
Ну либо передавай указатель на QTreeWidget через конструктор NewItemDialog, либо используй слоты и сигналы. У главного окна слот, у диалога сигнал.
Почему элементы окна на коленке создаются? Редактор форм используй.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2017, 19:01

Как идентифицировать друг от друга ответы запросов QNetworkAccessManager
Не могу понять как отличить друг от друга ответы на запросы...

При выполнении функции надписи Label накладываются друг на друга
Программа должна выводить информацию о дисках в системе (локальных, cddvd-romax...

QtScript, классы и вызов их методов
Каким образом вызвать метод класса QtScript? Например у меня есть класс:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru