Контекстное меню, Свои необычные контекстные меню |
Здравствуйте, гость ( Вход | Регистрация )
Контекстное меню, Свои необычные контекстные меню |
edwardoid |
29.6.2009, 9:50
Сообщение
#1
|
Участник Группа: Участник Сообщений: 171 Регистрация: 1.5.2008 Из: Ереван, Армения Пользователь №: 164 Спасибо сказали: 0 раз(а) Репутация: 0 |
Есть идея создать необычное контекстное меню. Скажем нечто вроде:
[img=http://img189.imageshack.us/img189/2200/77666994.png] Как это реализовать? От какого класса наследовать виджет? QMenu? Пробовал от QFrame - не получилось. В чем проблема, помогите плз. |
|
|
Litkevich Yuriy |
29.6.2009, 10:29
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
edwardoid |
29.6.2009, 10:58
Сообщение
#3
|
Участник Группа: Участник Сообщений: 171 Регистрация: 1.5.2008 Из: Ереван, Армения Пользователь №: 164 Спасибо сказали: 0 раз(а) Репутация: 0 |
проблема в том, что не смог отобразить, тупо не видно. Я даж не знаю кого сделать ему parent-ом: главное окно или виджет для которого я контекстное меню создаю?
|
|
|
flankerr |
29.6.2009, 15:26
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: 0 |
Создавай свой класс, наследуйся от того же (как вариант) QDialog. И у тебя полная свобода творчества. Потом лови нажатие правой кнопки грызуна и выводи свой диалог, а скажем если твой диалог теряет фокус ввода то - закрывай диалог. Вот тебе и будет контекстное меню. А парент не особо важен ИМХО, хоть вообще без.
Сообщение отредактировал flankerr - 29.6.2009, 16:55 |
|
|
edwardoid |
29.6.2009, 15:32
Сообщение
#5
|
Участник Группа: Участник Сообщений: 171 Регистрация: 1.5.2008 Из: Ереван, Армения Пользователь №: 164 Спасибо сказали: 0 раз(а) Репутация: 0 |
Создовай свой класс, наследуйся от того же (как вариант) QDialog. И у тебя полная свобода творчества. Потом лови нажатие правой кнопки грызуна и выводи свой диалог, а скажем если твой диалог теряет фокус ввода то - закрывай диалог. Вот тебе и будет контекстное меню. А парент не особо важен ИМХО, хоть вообще без. А как его передвинуть на нужно место? QDialog::move() не помогает. И плюс не знаю как уследить за тем, что он потерял фокус Сообщение отредактировал edwardoid - 29.6.2009, 15:34 |
|
|
Kagami |
29.6.2009, 15:55
Сообщение
#6
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Если не задавать родителя, то меню будет плавать в своем окне. Можно отключить ему декорации и вывести поверх всех окон. Перемещение о проверка потери фокуса не проблема. Но есть одно но - при выводе меню главное окно становится неактивным... Если это устраивает, то могу выложить свои наброски.
|
|
|
edwardoid |
29.6.2009, 15:58
Сообщение
#7
|
Участник Группа: Участник Сообщений: 171 Регистрация: 1.5.2008 Из: Ереван, Армения Пользователь №: 164 Спасибо сказали: 0 раз(а) Репутация: 0 |
в любом случае выложи пожалуйста, покопаюсь в них, мож и так пойдет
|
|
|
Kagami |
29.6.2009, 16:10
Сообщение
#8
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Чуть-чуть поправил, теперь работает как надо. Только лень делать весь API для динамического добавления/удаления кнопок, смены их картинок и т.д. Также, хоть я и сделал производный от QPushButton класс, я не стал с ним пока ничего делать. Но он может понадобиться потом, например, в конструкторе можно забить начальные размеры и т.д. Может быть когда-нибудь потом доделаю, если настроение будет
Сообщение отредактировал Kagami - 29.6.2009, 16:11
Прикрепленные файлы
|
|
|
flankerr |
29.6.2009, 16:54
Сообщение
#9
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: 0 |
|
|
|
Kagami |
29.6.2009, 17:11
Сообщение
#10
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Я это дело уже обошел с помощью флагов окна. Qt::Popup то что надо в данном случае
UPD: Если заменить QWidget на QFrame для меню, то можно сделать рамку. Что-то я сразу об этом не подумал Сообщение отредактировал Kagami - 29.6.2009, 17:24 |
|
|
Текстовая версия | Сейчас: 30.12.2024, 20:12 |