Russian Qt Forum
Сентябрь 26, 2018, 12:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по созданию нового окна  (Прочитано 2938 раз)
LynXzp
Новичок

Offline Offline

Сообщений: 5


Просмотр профиля
« : Январь 08, 2017, 19:54 »

Можно вопрос по созданию нового окна, скорее даже о стиле и bestpractice. Все работает, но кажется я это сделал с вывертом.

Работаю в Qt Creator, создаю новое окно с помощью мастера "новый файл" -> Qt -> Класс формы Qt Designer ->создается три файла .cpp .h .ui
Окно (логов) будет открываться из меню главного окна (класса и cpp файла), а данные туда будут передаваться из другого cpp. В .h файлах этих двух .cpp пишу #include "logdialog.h".

В logdialog.h:
Код:
extern LogDialog *logDialog;
В logdialog.cpp:
Код:
LogDialog logDialog = NULL;
При первом вызове окна:
Код:
if(logDialog==NULL) logDialog = new LogDialog;

Все работает, но... с главным окном-то нет такого, только:
int main(int argc, char *argv[])
Код:
{ QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec(); }

Но так же сделать нельзя... В общем все конечно работает, проблем нет, но мне ужасно не нравится когда все в разном стиле написано. И я не только новичок в Qt, но и в C++, могу чего-то не знать. Программирование Qt/C++ это побочная необходимость на основной работе.
Записан
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7595


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #1 : Январь 09, 2017, 03:42 »

Можно сделать так же. Просто есть несколько условностей, вроде того, что main.h не существует.
Конкретнее сформулируйте задачу, а уж мы вам поясним.
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
LynXzp
Новичок

Offline Offline

Сообщений: 5


Просмотр профиля
« Ответ #2 : Март 13, 2017, 01:33 »

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

Открепите наверное тему, вопрос остается открытым, но пока не известно в каком направлении его решать.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3827


Просмотр профиля WWW
« Ответ #3 : Март 13, 2017, 06:16 »

>>extern LogDialog *logDialog;
Это явно Дельфи-стиль

Объект надо создавать там где он нужен.
т.е. в слоте главного окна, обрабатывающего действие (QAction), создавай диалог на стеке, как приведено в описании класса QDialog.
В конструкторе класса диалога предусмотри указатель на данные, либо пользуйся внутри диалога классом-Одиночкой (менее предпочтительно).
Записан

Юра.
Snak2013
Новичок

Offline Offline

Сообщений: 13


Просмотр профиля
« Ответ #4 : Март 31, 2017, 12:19 »

Доброго времени суток, пишу свой вопрос в эту тему потому как он тоже касается создания окна. В проекте я добавил диалоговое окно и хочу передать в него параметры полученные ранее, для этого пытаюсь изменить конструктор который создает QTCreator по умолчанию, выглядит это так:
Заголовочный файл:
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QDialog>
#include "stdafx.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QDialog
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0, KompasObjectPtr _kompas = NULL, IApplicationPtr _application = NULL);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    KompasObjectPtr _kompas;
    IApplicationPtr _application;
};

#endif // MAINWINDOW_H

Cpp файл:

Код:
MainWindow::MainWindow(QWidget *parent, KompasObjectPtr _kompas, IApplicationPtr _application) :
    QDialog(parent),
    ui(new Ui::MainWindow)
{
    this->_application = _application;
    this->_kompas = _kompas;
    ui->setupUi(this);
}

Код не компилируется выдавая ошибку :

D:\projects\QTProjects\KompasCalculating\mainwindow.h:23: ошибка: C2248: QDialog::QDialog: невозможно обратиться к private член, объявленному в классе "QDialog"
d:\qt_5.4.0\5.5\msvc2013\include\qtwidgets\qdialog.h(109): см. объявление "QDialog::QDialog"
d:\qt_5.4.0\5.5\msvc2013\include\qtwidgets\qdialog.h(45): см. объявление "QDialog"
Сообщение диагностики возникло в созданной компилятором функции "MainWindow::MainWindow(const MainWindow &)"

Пожалуйста подскажите где я ошибся?

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.066 секунд. Запросов: 23.