динамические диалоговые окна, как использовать? |
Здравствуйте, гость ( Вход | Регистрация )
динамические диалоговые окна, как использовать? |
zamnach |
18.7.2008, 15:26
Сообщение
#1
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
хелло!
пытаюсь динамически загружать форму (*.ui) в приложение по книге Бланшет "Qt4..." код примерно такой: //-----------hello.h
//-----------hello.cpp
компилятор msvs2005 Team Suite ругается примерно такими словами: 1>hello_qt.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall QUiLoader::~QUiLoader(void)" (??1QUiLoader@@UAE@XZ) referenced in function "private: void __thiscall Hello_Qt::OpenForm(void)" (?OpenForm@Hello_Qt@@AAEXXZ) 1>hello_qt.obj : error LNK2019: unresolved external symbol "public: class QWidget * __thiscall QUiLoader::load(class QIODevice *,class QWidget *)" (?load@QUiLoader@@QAEPAVQWidget@@PAVQIODevice@@PAV2@@Z) referenced in function "private: void __thiscall Hello_Qt::OpenForm(void)" (?OpenForm@Hello_Qt@@AAEXXZ) 1>hello_qt.obj : error LNK2019: unresolved external symbol "public: __thiscall QUiLoader::QUiLoader(class QObject *)" (??0QUiLoader@@QAE@PAVQObject@@@Z) referenced in function "private: void __thiscall Hello_Qt::OpenForm(void)" (?OpenForm@Hello_Qt@@AAEXXZ) 1> <путь>\Hello_Qt.exe : fatal error LNK1120: 3 unresolved externals //================================= без кода, связанного с QUiLoader приложение запускается, по нажатию кнопки диалог открывается. почему компилятор не находит деструктор QUiLoader? таки как подгружать динамически форму? Спасибо
Причина редактирования: для кода используем тэг code=cpp
|
|
|
Litkevich Yuriy |
18.7.2008, 15:34
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
а в файл проекта (*.pro) не забыл подключить ничего?
типа: FORMS = my.ui (см. пример из твоей книги) |
|
|
zamnach |
18.7.2008, 15:50
Сообщение
#3
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
а в файл проекта (*.pro) не забыл подключить ничего? типа: FORMS = my.ui (см. пример из твоей книги) ручками (qmake) сделал файл *.pro, добавил туда строку CONFIG += uitools (как в книге..., до вопроса на форуме ) только я не знаю как прикрутить этот файл к solution MSVS + ко всему, я на этапе компиляции не знаю имя файла формы. я ее хочу выбирать, загружать в приложение и работать с контролами выбранной формы. это реализуемо в рамках Qt? |
|
|
Litkevich Yuriy |
18.7.2008, 16:06
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
сначала добейся чтобы в консоли все компилилось, а поповоду "как сделать файл проекта для студии" см. Асистент, там ключи к qmake есть он вместо мэйкфалов будет файл проекта для студии генерить из *.pro
Creating Visual Studio Project Files еще смотри пример World Time Clock Builder Example (%QTDIR%\examples\designer\worldtimeclockbuilder) |
|
|
zamnach |
22.7.2008, 13:25
Сообщение
#5
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
заработало! спасибо за ссылки
снес все Qt (demo и evaluate) утановил тока evaluate добавил нужные либы в проект VC и вуаля код загрузки ui CODE void Hello_Qt::OpenForm() { QUiLoader uiLoader; QString str=QFileDialog::getOpenFileName(this,"Open Form","", "*.ui"); if(str!="") { QFile file(str); file.open(QFile::ReadOnly); form = uiLoader.load(&file); file.close(); if(form) form->show(); } } Не затруднит ли Вас, коллеги, ответить на след. вопросы: 1. почему VC не создает exe файлы, хотя программы из под компилера запускаются 2. как делать exe файлы? через бесплатный компилер типа minGW? 3. в проекте VC подправил форму, а приложении все равно запускается старая форма. почему? заранее благодарю. |
|
|
Litkevich Yuriy |
22.7.2008, 13:49
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
утановил тока evaluate что за evaluate? скачай обычный опенсорс, собери спомощью студии и все. Исполняемые файлы должны создаваться, как собрать с помощью студии ищи по форуму, много раз объясняли. см. тут: Сборка qt + vs2005, помогите ! и вот QT+VS2005, Установка и интеграция, покороче, но без подробностей |
|
|
zamnach |
24.7.2008, 12:40
Сообщение
#7
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
почитал, скачал, с бубном установил-таки под VC.
Всем спасибо, я пошел учить матчасть. |
|
|
zamnach |
25.7.2008, 15:42
Сообщение
#8
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
еще вопрос возник, товарищи!
как разместить загруженный из файла widget на главном окне приложения внутри какого-нить контрола: виджета, групбокса, фрейма? мне удалось только путем закидывания моего виджета в stackedWidget. нет такого как в билдере: типа newObject->SetParent(oldObject) и newObject рисуется в прямоугольной области oldObject ? спасибо |
|
|
Litkevich Yuriy |
25.7.2008, 15:46
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
не понял. то пример что ты привел к загрузке виджета из файла отношения не имеет, просто назначение родителя.
QWidget::QWidget ( QWidget * parent = 0, Qt::WindowFlags f = 0 ) и void QWidget::setParent ( QWidget * parent ) |
|
|
zamnach |
25.7.2008, 16:44
Сообщение
#10
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
вот кусок моего кода
CODE void LoadFrm::openForm() { QWidget *form; QUiLoader uiLoader; QString str=QFileDialog::getOpenFileName(this,"Open Form","", "*.ui"); if(str!="") { QFile file(str); file.open(QFile::ReadOnly); form = uiLoader.load(&file); file.close(); if(form) { //form->setParent(ui.frame); //1 ui.stackedWidget->addWidget(form); //2 ui.stackedWidget->setCurrentWidget(form); //3 form->show(); } } } сейчас форма из файла кладется в stackedWidget. если раскомментировать стр.1 и закомментировать строки 2 и 3, то форма нигде не появляется. в чем засада? |
|
|
Текстовая версия | Сейчас: 26.11.2024, 11:29 |