Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: L.Marvell от Августа 27, 2005, 13:52



Название: Custom widget plugin
Отправлено: L.Marvell от Августа 27, 2005, 13:52
Создал свой собственный виджет со списком установленных в системе шрифтов, наследуемый от QListWidget. Делал так, чтобы название шрифта отображалось тем шрифтом, которое оно отображает (сори за каламбур). Подключил плагин к дизайнеру. Проблема в том, что когда ложу плагин на форму, то список отображается разными шрифтами, а в просмотре и в уже скомпилином проекте названия отображаются обычным шрифтом. Поделитесь мыслями в чем может быть загвоздка.


Название: Custom widget plugin
Отправлено: L.Marvell от Августа 27, 2005, 15:53
Что самое интересное, когда я добавляю этот же виджет вручную, а не через дизайнер, то все работает отлично...


Название: Custom widget plugin
Отправлено: L.Marvell от Августа 27, 2005, 16:41
Итак... Проблема обнаружена (наверное), осталось только найти выход. А проблема в том, что в дизайнере говорится, что объект порожден от класса QListWidget, хотя должен бы от JCFontListWidget, который в свою очередь наследован от QListWidget.
У меня тут мысль возникла. Есть 4 файла:
jcfontlistwidget.h
jcfontlistwidget.cpp
jcfontlistwidgetplugin.h
jcfontlistwidgetplugin.cpp

Собранный плагин ложится в %QTDIR%\plugins\designer. Но ведь он ссылается на jcfontlistwidget.h, а система о нем ничегошеньки не знает! Т.е. .h и .cpp тоже нужно куда-то положить или это я уже с ума схожу? В Асистенте про это вроде ничего не сказано. Нуждаюсь в помощи знающих.


Название: Custom widget plugin
Отправлено: joktar от Августа 29, 2005, 04:41
Цитата: "L.Marvell"
Итак... Проблема обнаружена (наверное), осталось только найти выход. А проблема в том, что в дизайнере говорится, что объект порожден от класса QListWidget, хотя должен бы от JCFontListWidget, который в свою очередь наследован от QListWidget.
У меня тут мысль возникла. Есть 4 файла:
jcfontlistwidget.h
jcfontlistwidget.cpp
jcfontlistwidgetplugin.h
jcfontlistwidgetplugin.cpp

Собранный плагин ложится в %QTDIR%\plugins\designer. Но ведь он ссылается на jcfontlistwidget.h, а система о нем ничегошеньки не знает!

А должна знать.
Цитата: "L.Marvell"

Т.е. .h и .cpp тоже нужно куда-то положить или это я уже с ума схожу? В Асистенте про это вроде ничего не сказано. Нуждаюсь в помощи знающих.

Т.е.проблема с тем, что не подключается jcfontlistwidget.h?
Я делал по "Qt3:C++ программирование GUI на C++" (перевод "C++ GUI Programming with Qt3"), там в главе 5 есть расписаный пример интеграции в Designer. Книга это в сети есть как на русском так и на англйском варианте(вот URL'ов не помню)

Про QStringList x3d_renderWidgetPlugin::keys() const
{
        return QStringList() << "x3d_renderwidget";
}
и(особенно) QString x3d_renderWidgetPlugin::includeFile(const QString &) const
{
        return "x3d_renderwidget.h";
}
Не забыл?(Имена естественно свои,проверялось на 3.3.4)


Название: Custom widget plugin
Отправлено: L.Marvell от Августа 29, 2005, 13:07
Да вот собственно делал по примеру в Асистенте. Плагин собрался, к дизайнеру подключился, но вот такой трабл. А вот этого я не понял:

Цитировать
Про QStringList x3d_renderWidgetPlugin::keys() const
{
return QStringList() << "x3d_renderwidget";
}
и(особенно) QString x3d_renderWidgetPlugin::includeFile(const QString &) const
{
return "x3d_renderwidget.h";
}
Не забыл?(Имена естественно свои,проверялось на 3.3.4)


Название: Custom widget plugin
Отправлено: joktar от Августа 29, 2005, 18:03
Цитата: "L.Marvell"
Да вот собственно делал по примеру в Асистенте. Плагин собрался, к дизайнеру подключился, но вот такой трабл. А вот этого я не понял:
Цитировать
Про QStringList x3d_renderWidgetPlugin::keys() const
{
return QStringList() << "x3d_renderwidget";
}
и(особенно) QString x3d_renderWidgetPlugin::includeFile(const QString &) const
{
return "x3d_renderwidget.h";
}
Не забыл?(Имена естественно свои,проверялось на 3.3.4)

Это кусок моего плагина
::keys возращает имя реализованного плагинов виджета(у меня-x3d_renderwidget)
QStringList x3d_renderWidgetPlugin::keys() const
{
return QStringList() << "x3d_renderwidget";
}
(а includeFile возвращает какой надо подкючать .h-файл)
и(особенно) QString x3d_renderWidgetPlugin::includeFile(const QString &) const
{
return "x3d_renderwidget.h";
}
У тебя естественно вместо x3d_renderwidget.h должен быть твой header, вместо x3d_renderwidget - имя твоего widget'а а вместо
x3d_renderWidgetPlugin - соотвественно твой plugin-класс


Название: Custom widget plugin
Отправлено: L.Marvell от Августа 29, 2005, 18:38
А, шут меня побери, стормозил. Ну да, есть у меня эти два метода, только вместо keys - name. Забыл сказать, юзаю Qt 4.0.1 open source под вынь.

Код:
QString JCFontListWidgetPlugin::name() const
{
return QLatin1String("JCFontListWidget");
}

QString JCFontListWidgetPlugin::includeFile() const
{
return QLatin1String("jcfontlistwidget.h");
}