Создание чекабельной кнопки с меню
Итак, в этом посте мы рассмотрим создание чекабельной (checkable) кнопки с выпадающим меню (в котором будут не пункты меню, а виджеты)
Пример будет совсем простым чтобы не морочить никому голову. Итак, приступим.
Поскольку пример «совсем простой», то создадим файл main.cpp и будем делать всё в нём. Начнём с создания кнопки QToolButton с возможностью отметить её:
#include <QApplication> #include <QtGui> int main(int argc, char **argv) { QApplication app(argc, argv); QToolButton btn; btn.setText("Checkable"); btn.setCheckable(true); btn.show(); return app.exec(); }
Теперь добавим сюда меню и режим отображения, чтобы кнопка выглядела так:
![]()
#include <QApplication> #include <QtGui> int main(int argc, char **argv) { QApplication app(argc, argv); QMenu *menu = new QMenu; //Создаём меню QToolButton btn; btn.setText("Checkable"); btn.setMenu(menu); //Добавляем меню //И выставляем режим его отображения btn.setPopupMode(QToolButton::MenuButtonPopup); btn.setCheckable(true); btn.show(); return app.exec(); }
Следующим шагом будет создание экземпляра QWidgetAction — класса, позволяющего вставить в меню любой виджет. Также будет создан сам виджет, который мы будем вставлять в меню (возьмём
#include <QApplication> #include <QtGui> int main(int argc, char **argv) { QApplication app(argc, argv); QWidgetAction *wa = new QWidgetAction(0); //Экземпляр класса //И впихиваем в него QLineEdit wa->setDefaultWidget(new QLineEdit("QLineEdit")); QMenu *menu = new QMenu; menu->addAction(wa); //Добавляем виджет QToolButton btn; btn.setText("Checkable"); btn.setMenu(menu); btn.setPopupMode(QToolButton::MenuButtonPopup); btn.setCheckable(true); btn.show(); return app.exec(); }
Вот такая получилась штучка:

Естественно, можно вставлять и более серьёзные объекты, никто не запрещает
Собственно, всё. Всем удачи =)