qml: добиться хромоподобного меню

Я хотел бы получить с помощью QML меню с одним пунктом меню, как это делает хром. У него есть эта кнопка с тремя горизонтальными полосами, и когда вы нажимаете на нее, вы получаете одно меню. Последние версии Firefox также следуют тому же принципу. Это позволяет не тратить слишком много горизонтального пространства в графическом интерфейсе приложения, выделять обычные меню, занимающие всю ширину окна.

Мне не удалось воспроизвести именно этот графический интерфейс с QML. Из того, что я видел, вы можете либо использовать QML ApplicationWindow, а затем MenuBar, но тогда он занимает всю ширину окна... Или иметь кнопку-переключатель для запуска меню, а затем использовать автономный Menu и его метод popup(), но затем он всплывает прямо под курсором, а не точно под кнопкой, чтобы открыть меню, что выглядит не очень хорошо. Это действительно больше злоупотребляет механизмом контекстного меню.

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

Можно ли добиться именно такого поведения в чистом QML (без C++)?


person Emmanuel Touzery    schedule 17.01.2015    source источник


Ответы (1)


На данный момент я сделал последний вариант, который я упомянул: поддельное меню в окне. Это рисование с использованием холста, которое позволяет мне сделать небольшую заостренную стрелку от меню к кнопке переключения меню, как это делается и в Firefox.

Минус, как я уже сказал, заключается в том, что меню не может выйти из окна, плюс все очень ручное (эффект наведения мыши для пунктов меню...), поэтому меня все еще интересуют другие решения.

EDIT: хорошо, через некоторое время я понял большой плюс моего подхода: я могу ставить пользовательские виджеты, а не только ярлыки в меню. Так что я думаю, что это абсолютно правильный подход сейчас.

person Emmanuel Touzery    schedule 17.01.2015