Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: aliks-os от Июль 05, 2011, 14:45



Название: Динамическая загрузка формы и ее сохранение
Отправлено: aliks-os от Июль 05, 2011, 14:45
Делаю загрузку виджета (созданного через дизайнер) и тут же ее сохранение

Код:
    QFile file(settings.value("/Settings/pathForm","").toString()+"/"+filename);
    QFormBuilder/*QUiLoader*/ loader;
    file.open(QFile::ReadOnly);
    QWidget *formWidget = loader.load(&file, this);

    QFormBuilder builder;
    QFile file1("c:\myWidget.ui");
    file1.open(QFile::WriteOnly);
    builder.save(&file1,formWidget);
    file1.close();

    file.close();

После таких манипуляций, вновь созданный файл невозможно открыть в дизайнере (происходит ошибка и дизайнер падает).
Подскажите где ошибка и может у кого есть наработки по сохранению виджета/формы в файл.


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: Пантер от Июль 05, 2011, 14:47
А что из себя представляет получившийся файл? Приложи оба файла к мообщению.


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: aliks-os от Июль 05, 2011, 14:50
http://ifolder.ru/24543782

там архив из 2 файлов


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: aliks-os от Июль 05, 2011, 14:57
У меня оба файла валят дизайнер.

Странно....
outwarehouse.ui - открывается без проблем, его создавал в именно в дизайнере.
myWidget.ui - создался при помощи указанного кода и он у меня валит дизайнер


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: Пантер от Июль 05, 2011, 15:03
Не, я ошибся. Валит myWidget.ui. Скорее всего из-за того, что в нем много лишней фигни. Возможно, баг Дизайнера. А в приложение получается myWidget.ui подгрузить?


Название: Re: Динамическая загрузка формы и ее сохране&
Отправлено: aliks-os от Июль 05, 2011, 15:07
Не, я ошибся. Валит myWidget.ui. Скорее всего из-за того, что в нем много лишней фигни. Возможно, баг Дизайнера. А в приложение получается myWidget.ui подгрузить?

Нет, тоже валит. То что там лишней фигни, я тоже заметил  ???
Не хотелось бы вручную заниматься вставкой XML, хотел воспользоваться готовым решением


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: Пантер от Июль 05, 2011, 15:14
На багтрекере пробовал искать? Версия Qt какая?


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: aliks-os от Июль 05, 2011, 15:15
На багтрекере пробовал искать? Версия Qt какая?

не пробовал, версия 4.7.3


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: Пантер от Июль 05, 2011, 15:25
Ничего на бактрекере не нашел такого. Советую создать там таску по этому поводу.


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: aliks-os от Июль 05, 2011, 15:35
уже создал, правда мой английский страдает...
http://bugreports.qt.nokia.com/browse/QTBUG-13683


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: Пантер от Июль 05, 2011, 15:49
Что-то по ссылке совсем не то.


Название: Re: Динамическая загрузка формы и ее сохране&
Отправлено: aliks-os от Июль 05, 2011, 16:08
А такая ссылка?
http://bugreports.qt.nokia.com/browse/QTBUG-20260
Не ту ссылку дал

Вот такой ответ мне дали на багтреккере

Won't fix. Formbuilder::save() saves the internal children of the QTableWidget (scrollbars, etc), which cause problems when reloaded.


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: Пантер от Июль 05, 2011, 16:20
Прикольно. А нафига оно вообще тогда нужно?


Название: Re: Динамическая загрузка формы и ее сохранение
Отправлено: aliks-os от Июль 05, 2011, 16:22
И я о том же...они наверное думают что одни лейбы хранить на форме будут


Название: Re: Динамическая загрузка формы и ее сохране&
Отправлено: iks от Июль 06, 2011, 21:50
Если правильно понял конечную цель данных манипуляций, это сохранить .ui с внесеными изменениями.
Честно говоря не сталкивался с данной проблеммой, но заинтересовал способ решения, мне подумалось пройти сразу через
Код
C++ (Qt)
QFile::copy("pathForm/outwarehouse.ui", "pathForm/myWidget.ui");
и уже копию открыть и работать с ней но как пока не нашел рабочего кода, пробовал
Код
C++ (Qt)
QFile file("pathForm/myWidget.ui");
file.open(QIODevice::ReadWrite);
QWidget *formWidget = QUiLoader().load(&file, this);
но это не то конечно.
Хотя копия само собой в дизайнере нормально открывается.