Название: Как вызвать виджет из dll Отправлено: Bolonat от Август 04, 2017, 12:30 Здравствуйте!
Работаю в Qt Creator 4.3.1, на Qt 5.9.1 Использую компилятор MinGW 5.3 (Windows10 64x). Мне нужно при нажатии кнопки в основном приложении вызвать виджет из dll. Создала dll. Ниже привожу экспортируемый класс Test. Если конструктор класса оставить пустым, то при нажатии на кнопку появляется ошибка: QWidget: Must construct a QApplication before a QWidget. А если в конструкторе класса создаю объект QApplication, то при компиляции dll появляется ошибка: invalid use of incomplete type 'class QApplication. Если в dll нельзя создавать QApplication, то как правильно вызвать виджет из dll? Примеры в сети в основном сделаны на Q4 и предлагают создать QApplication. Код: #ifndef TEST_H Код: #include "test.h" Вызов в основном приложении: Код: void MainWindow::on_pushButton_2_clicked() Название: Re: Как вызвать виджет из dll Отправлено: __Heaven__ от Август 04, 2017, 16:40 Насчёт как сделать это правильно - не знаю. Но от ошибки, скорее всего, поможет #include <QApplication>
Название: Re: Как вызвать виджет из dll Отправлено: Bepec от Август 04, 2017, 19:10 https://qtsimple.blogspot.ru/2013/10/dll-noqt.html
Моё давнее исследование на эту тему :D Название: Re: Как вызвать виджет из dll Отправлено: Bolonat от Август 04, 2017, 19:11 Точно! И если изменить pr():
Код: void Test::pr() //Метод который вызывается при нажатии кнопки в основном приложении То все работает! Спасибо огромное! Название: Re: Как вызвать виджет из dll Отправлено: Bolonat от Август 04, 2017, 19:49 Спасибо за исследование! Правда, оно не совсем для новичков... Я вот не совсем поняла, зачем для создания файла в dll создавать отдельный поток и в нем QCoreApplication? Я думала QCoreApplication нужен для того, чтобы отлавливать события, а здесь никаких событий вроде не ожидается...
Название: Re: Как вызвать виджет из dll Отправлено: Bepec от Август 06, 2017, 12:37 Ну, тема там немного отличается, а QCoreApplication создаётся для того же, для чего вы создаёте QApplication - для работы сигнал слотовых-соединений, и как следствие - нормальной работы виджетов в куче :)
Название: Re: Как вызвать виджет из dll Отправлено: Igors от Август 07, 2017, 07:11 Если конструктор класса оставить пустым, то при нажатии на кнопку появляется ошибка: QWidget: Must construct a QApplication before a QWidget. Ну так и создайте QApplication в основном приложенииНазвание: Re: Как вызвать виджет из dll Отправлено: Bepec от Август 07, 2017, 13:14 Вопрос в том, есть ли в основном приложении Qt :D
Название: Re: Как вызвать виджет из dll Отправлено: Bolonat от Август 09, 2017, 07:40 Да, решение явно неверное. При попытке запустить dll под отладчиком получаю ошибку: ASSERT failure in QCoreApplication: "there should be only one application object". Подобное описано и здесь (http://www.qtcentre.org/archive/index.php/t-9403.html). Если в dll передавать QApplication, то тогда непонятно зачем вообще создавать dll. :(
Название: Re: Как вызвать виджет из dll Отправлено: Igors от Август 09, 2017, 07:47 Если в dll передавать QApplication, то тогда непонятно зачем вообще создавать dll. :( Причин может быть много. Какие-то трудности/приключения возможны если главное приложение НЕ использует Qt, иначе проблем вообще нет |