crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> динамические диалоговые окна, как использовать?
zamnach
  опции профиля:
сообщение 18.7.2008, 15:26
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 36
Регистрация: 18.7.2008
Пользователь №: 239

Спасибо сказали: 0 раз(а)




Репутация:   0  


хелло!
пытаюсь динамически загружать форму (*.ui) в приложение по книге Бланшет "Qt4..."
код примерно такой:
//-----------hello.h
#include <QtGui/QMainWindow>
#include <QtUiTools>
#include <QUiLoader>
#include <QWidget>
#include <QFileDialog>
#include "ui_hello_qt.h"


//-----------hello.cpp
void Hello_Qt::OpenForm()
{
        QUiLoader uiLoader;
        QFileDialog dlg;
    
        QString str=QFileDialog::getOpenFileName(this,"Open Form","", "*.ui");
        if(str!="")
        {
                QFile file(str);
                file.open(QFile::ReadOnly);
                form = uiLoader.load(&file,this);
                file.close();
        }
}//openform


компилятор 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  


Цитата(Litkevich Yuriy @ 18.7.2008, 16:34) *
а в файл проекта (*.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  


Цитата(zamnach @ 22.7.2008, 17:25) *
утановил тока 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, то форма нигде не появляется.
в чем засада?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


8 чел. читают эту тему (гостей: 8, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 0:14