GUI внутри динамической библиотеки, Как засунуть модальное окно внутрь DLL? |
Здравствуйте, гость ( Вход | Регистрация )
GUI внутри динамической библиотеки, Как засунуть модальное окно внутрь DLL? |
silart |
31.3.2008, 5:19
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 31.3.2008 Пользователь №: 138 Спасибо сказали: 0 раз(а) Репутация: 0 |
Кто-нибудь пробовал создать на Qt такую Dll, чтобы внутри нее создавались виджеты?
Можно создать на Qt просто динамическую библиотеку, но в ней нельзя создавать виджеты, потому что объект QApplication не создается. (При обращении к графическим функциям вылазит страшное сообщение, что QPaintDevice был создан до QApplication) Нужен ли он вообще для модальных окон? Если нужен, как его создать, он ведь не умеет конструктора по умолчанию? Вот пример dll, что сгенерировал мастер: CODE class LIBRARY_EXPORT Library
{ public: Library(); ~Library(); void CreateReport(QSqlDatabase db, const QString& path, const ParameterList& params, QWidget* parent = 0); void MessageBox(const QString& title, const QString& msg, QWidget* parent = 0); private: }; |
|
|
ViGOur |
31.3.2008, 8:06
Сообщение
#2
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Тебе нужна именно динамическая библиотека?
|
|
|
ViGOur |
31.3.2008, 8:40
Сообщение
#3
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Ну вот я набросал простой пример:
main.cpp экзешник.
Собственно код самой либы: Хоть диалог и не модальный, но все создается и запускается из библиотеки.
|
|
|
silart |
31.3.2008, 9:39
Сообщение
#4
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 31.3.2008 Пользователь №: 138 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ну вот я набросал простой пример: Спасибо конечно, но немного не то... Нужно чтобы dll-ка экспортировала функцию, в которую передавался помимо всего прочего указатель на QWidget, являющимся родительским окном. А внутри экспортируемой функции создавалось модальное окно (родитель то был передан). Вот пример либы: CODE #include <QtCore/QString> #include <QtGui/QApplication> #include <QtGui/QMessageBox> #include <QtGui/QWidget> QApplication* pApp = NULL; void Init() { int argc = 0; char* argv[1]; *argv = ""; pApp = new QApplication(argc, argv); } void Cleanup() { delete pApp; } void CreateReport(const QString& title, const QString& text, QWidget* parent) { QMessageBox::critical(0, title, text); //parent return; } Что интересно, но так работает, только окно создается немодальное. Когда ставим parent на место, вылазит страшное сообщение о том, что событие послано другому потоку, не создавшего виджет. Пробовал я сделать отдельный поток специально для вызова QMessageBox::critical, там матерится что виджет создается не из GUI-потока. Пример: CODE class Internal : public QThread { Q_OBJECT private: QString title; QString text; QWidget* parent; public: Internal(const QString& tit, const QString& txt, QWidget* p) : title(tit), text(txt), parent(p) {} void run() { QMessageBox::critical(parent, title, text); } }; Может кто сталкивался с подобным геморроем? Помогите пожалуйста. |
|
|
ViGOur |
31.3.2008, 9:49
Сообщение
#5
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
У меня все работает, в аттаче проект...
Прикрепленные файлы
|
|
|
silart |
31.3.2008, 9:51
Сообщение
#6
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 31.3.2008 Пользователь №: 138 Спасибо сказали: 0 раз(а) Репутация: 0 |
И все это нужно мне для того, чтобы сделать такую библиотеку, которая генерирует отчет openrpt.
Ссылка взята с этого форума. Может кто непосредственно с openrpt работал? мне нужно его в свою программу вставить. У них там все в кучу навалино, куча инклудов, проблематично в свою программу вставить. Кто-нибудь использует openrpt? |
|
|
ViGOur |
31.3.2008, 10:15
Сообщение
#7
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
С этого и нужно было начинать...
Где-то я видел описание его использования, если найду, выложу. |
|
|
silart |
31.3.2008, 10:35
Сообщение
#8
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 31.3.2008 Пользователь №: 138 Спасибо сказали: 0 раз(а) Репутация: 0 |
Скачал я ваш проект. Только не получилось собрать его в первозданном виде. moc какие-то пути не смог найти у меня. Я сделал свой проект, так же как ваш. Блин, тоже самое. Пишет что QPaintDevice был создан до QApplication. Не знаю что и делать. Вот засада, блин.
Я и в main() пытался вызвать и внутри обработчика слота, все то же самое. И с помощью QLibrary, и жестким связыванием - никак не работает. У меня QT версии 4.2.2 собран статически. То есть не таскает за собой системные dll. |
|
|
silart |
31.3.2008, 10:40
Сообщение
#9
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 31.3.2008 Пользователь №: 138 Спасибо сказали: 0 раз(а) Репутация: 0 |
С этого и нужно было начинать... Где-то я видел описание его использования, если найду, выложу. Я скачал с официального сайта один pdf-ник, но там как сами отчетики делать в редакторе. Как его к своему проекту прикрутить не написано. Найдите пожалуйста, очень нужно. На этих отчетах весь мир клином сошелся. Время идет, проект стоит... |
|
|
ViGOur |
31.3.2008, 11:13
Сообщение
#10
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Давай, сначала попробуем собрать мой проект, раз он не собирается.
Может если у тебя получится его собрать, тогда будет все в порядке и с openrpt. |
|
|
Текстовая версия | Сейчас: 27.12.2024, 23:32 |