Custom Widget не виден на форме, как правильно написать paintEvent и sizeHint |
Здравствуйте, гость ( Вход | Регистрация )
Custom Widget не виден на форме, как правильно написать paintEvent и sizeHint |
zamnach |
6.8.2008, 16:31
Сообщение
#1
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
пытаюсь сделать плагин, наследуя QLineEdit.
мой Edit отличается от QLineEdit только наличием свойства AddName (+метод set и приватный член типа QString) плагин собирается и устанавливается в Дизайнер. на форму кидаю свой Edit - все ОК, задаю св-во AddName. при предварительном просмотре ничего на форме не видно. смекаю - надо свой метод написать paintEvent и sizeHint как вызвать "стандартный" paintEvent и sizeHint, тот который родительский (внешне мой контрол ничем не отличается от родителя)? мозх плавится((. Спасибо. |
|
|
void* |
6.8.2008, 17:19
Сообщение
#2
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
|
|
|
Litkevich Yuriy |
6.8.2008, 17:19
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
а зачем paintEvent свой?
можешь код плагина привести? P.S. Если код длинный, то лучше обернуть в тэг [expand=исходники][/expand] |
|
|
zamnach |
6.8.2008, 17:51
Сообщение
#4
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
а зачем paintEvent свой? можешь код плагина привести? P.S. Если код длинный, то лучше обернуть в тэг [expand=исходники][/expand] все заработало. ошибка была в след-м: код плагина был примерно такой: QString CamLineEditPlugin::name() const { return "CamLineEdit";// было AnotherName } QWidget *CamLineEditPlugin::createWidget(QWidget *parent) { return new CamLineEdit(parent); } я для благозвучности имени, присваиваемому объекту по-умолчанию вместо "CamLineEdit" забил AnotherName. И как-то игнорировал сообщения от дизайнера при взятии(drag) своего объекта с палитры: "A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class AnotherName. It returned a widget of class CamLineEdit." а после ваших постов решил перевести на русский сей мессидж. исправил и все заработало. в связи с этим, новый вопрос: каким образом для custom widget можно задавать имя объекта по умолчанию, например чтобы при добавлении на форму нового объекта имя у него было AnotherName_[число]? и другие какие-нить свойства, унаследованные от родителя? спасибо |
|
|
zamnach |
7.8.2008, 17:04
Сообщение
#5
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
обнаружилось странное, товарищи!
есть два проекта: 1-й: плагин в котором создается наследник CamLineEdit (QLineEdit + доп. св-во типа QString) 2-й: приложение, динамически загружающее файлы форм (содержащие CamLineEdit) там в цикле перебираются все контролы, лежащие на форме, приводятся dynamic_cast к типу указателя на CamLineEdit Поведение 2-го проекта после запуска на исполнение зависит от режима компиляции обоих проектов. Вариант А. Плагин собирается debug (в designer пишется, что плагин установлен некорректно. однако формы, созданные ранее - нормально открывает и свойства контролов CamLineEdit показывает правильно ) вариант A-1. приложение запускается debug. при выполнении поля CamLineEdit не заполняются. вариант A-2. приложение запускается release. при выполнении поля CamLineEdit не заполняются. портится heap (при выходе из программы появляются об этом сообщения) Вариант B. Плагин собирается release (в designer пишется, что плагин нормально установлен) вариант B-1. приложение запускается в debug. при выполнении поля не заполняются. В окне Output msvc пишется "QFormBuilder was unable to create a custom widget of the class 'CamLineEdit'; defaulting to base class 'QLineEdit'." вариант B-2. приложение запускается release. поля заполняются CamLineEdit. портится heap (при выходе из программы появляются об этом сообщения) =============================== "кто виноват и что делать" как донести до QFormBuilder (и до QUiLoader) информацию о том как динамически "create a custom widget of the class 'CamLineEdit'"? спасибо |
|
|
Litkevich Yuriy |
7.8.2008, 17:09
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Есть такое правило, чесно сказать незнаю потрохов его:
Плагины для дизайнера должны быть в релиз версии, чтобы пользоватся в дизайнере и использовать в своем ПО. Ещё такой момент: 1) в файле проекта указваешь: CONFIG += release 2) собираешь командой make release и плагин и ПО, тогда при прочих правильностях все должно работать. |
|
|
zamnach |
11.8.2008, 11:54
Сообщение
#7
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
все заработало, почему - пока не знаю. но по программерской поговорке менять ниче не буду)).
Еще вопросик возник: как сделать возможным для моего виджета использовать в дополнительных свойствах русские буквы? Есть property: Q_PROPERTY(QString euObjectName READ euObjectName WRITE seteuObjectName) а в редакторе свойств Дизайнера в него можно забивать строки только англ.буквами. спасибо |
|
|
zamnach |
28.11.2008, 16:23
Сообщение
#8
|
Студент Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: 0 |
Есть property: Q_PROPERTY(QString euObjectName READ euObjectName WRITE seteuObjectName) а в редакторе свойств Дизайнера в него можно забивать строки только англ.буквами. спасибо отвечу сам себе): для возможности работы в дизайнере с русскими буквами в свойствах custom widget: надо убрать из имени свойств (при создании виджета) след. четыре буквы "Name", без кавычек. в это трудно поверить, но запись в проекте Q_PROPERTY(QString euObject READ euObject WRITE setEuObject) вместо того что приведено в цитате, решает проблему русских букв в свойствах виджета. Сувж. |
|
|
Текстовая версия | Сейчас: 24.1.2025, 6:33 |