Главная > Основная > Создание чекабельной кнопки с меню

Создание чекабельной кнопки с меню

Итак, в этом посте мы рассмотрим создание чекабельной (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 — класса, позволяющего вставить в меню любой виджет. Также будет создан сам виджет, который мы будем вставлять в меню (возьмём какой-нибудь QLineEdit). Ничего сложного нет. В конце просто добавляем его в меню как простой QAction:

#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();
}

Вот такая получилась штучка:

Естественно, можно вставлять и более серьёзные объекты, никто не запрещает :)

Собственно, всё. Всем удачи =)

  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.
Необходимо войти на сайт, чтобы написать комментарий.