Свойства QComboBox-мембера в дизайнере |
Здравствуйте, гость ( Вход | Регистрация )
Свойства QComboBox-мембера в дизайнере |
Алексей1153 |
29.3.2011, 8:38
Сообщение
#1
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
если в дизайнере положить на форму элемент QComboBox, то его содержимое можно настроить правой кнопкой -> изменить элементы. Так вот, имеется некий класс контрола
контрол добавлен в дизайнер, на нём виден дочерний комбобокс Как сделать так, чтобы щелчком по контролу A можно было бы выбрать тот самый пункт меню с настройкой комбобокса (то есть нужна полная аналогия настройки содержимого одиночного QComboBox ) |
|
|
Алексей1153 |
30.3.2011, 21:13
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
неужели никак ?
|
|
|
PAFOS |
31.3.2011, 8:27
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8 |
Есть одна идея, но придется реализовывать парочку интерфейсов дизайнера...
|
|
|
Алексей1153 |
31.3.2011, 15:55
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
PAFOS, ну давай уже, жги )
Сообщение отредактировал Алексей1153 - 31.3.2011, 15:55 |
|
|
PAFOS |
4.4.2011, 8:42
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8 |
Сорри за долгое молчание )
У дезигнера есть интерфейс QDesignerTaskMenuExtension, который позволяет добавлять свои пункты в это самое меню) => у комбо бокса этот интерфейс реализован. Тебе необходимо у своего виджета реализовать этот интерфейс и проверять, если менюшка вызывается над комбо боксом, то вернуть ему плагин, который и добавляет пунк меню в виджет. Но это тока идеи) сам я этим не занимался Или же внутри своего плагина, создавать плагин комбо бокса и добавлять в своим actions, actions комбо бокса Сообщение отредактировал PAFOS - 4.4.2011, 8:52 |
|
|
Алексей1153 |
4.4.2011, 17:02
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
PAFOS, спасибо, гляну. Как раз сегодня надо этим всем уже вплотную занятся )) Хоть направление немного ясно стало
|
|
|
Алексей1153 |
5.4.2011, 19:53
Сообщение
#7
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
детально ещё не разобрался, но вот мучает вопрос (и ответа я не встретил) - всё это позволяет менять свойства контрола на форме, но а как же заставить дизайнер создать тот код, который в ui при запуске программы вставит добавленные в редакторе элементы списка ?
PS Немного засыпаю от усталости, может поэтому тупняк нападает ))) Сообщение отредактировал Алексей1153 - 5.4.2011, 19:54 |
|
|
PAFOS |
6.4.2011, 9:03
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8 |
Когда дизайнер вызывает QString QDesignerCustomWidgetInterface::domXml () const для твоего виджета, ты должен вернуть xml, описывающий виджет.
В этом методе ты как-то должен вызвать domXml для комбо бокса, он вернет свой xml описатель и ты вставишь его в свой. Сделал на дизайнере форму и комбо бокс с тремя итемами. Вот что выдал дизайнер: Раскрывающийся текст
|
|
|
Алексей1153 |
6.4.2011, 12:54
Сообщение
#9
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
у меня метод domXml () сейчас пустой. Как его заполнять для своего контрорла - не ведаю. Или тупо вызвать оттуда комбовскую функцию domXml () ?
ааа, кажись потихоньку начинает доходить ))) Нужно как-то "перехватить" вызов domXml() у комбы и подставить нужные айтемы, так ? так, снова гоню! Это же у самого контрола теперь такая виртуальная функция - от родителя QDesignerCustomWidgetInterface. Видимо, там и нужно нечто похожее собрать. Спасибо за пинки в нужную сторону ) |
|
|
Алексей1153 |
6.4.2011, 20:42
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
блин, какой-то замкнутый круг выходит
Я определил, что по умолчанию вертает domXml() Сделал возвращение того же, но с двумя свойствами <property name="text0"><string>111</string></property> <property name="text1"><string>222</string></property> эти свойства показались в дизе. И , я так понимаю, это выход - ведь как-то эти свойства в рантайме можно прочитать и заполнить ими комбу. Это ладно. Далее, сделал так: в переопределённом domXml получаю дефолтную строку, вытаскиваю из неё имя переменной, составляю с участием этого имени нужный XML. И тут облом - при запуске диза он где-то неправильно инициализирует контрол, то ли имена пересекаются. После этого контрол не желает вообще перетаскиваться на форму Куда дальше кидаться ? в общем-то, по какому-то признаку нужно уметь определить, лежит ли контрол на форме или он лежит в списке контролов дизайнера. Во втором случае нужно вернуть дефолит - тогда было бы всё ок Сообщение отредактировал Алексей1153 - 6.4.2011, 20:43 |
|
|
Текстовая версия | Сейчас: 28.12.2024, 1:31 |