Иногда требуется создать меню которое включает в себя другие Widget'ы, приведу пример такого меню из программы psi :
Как то я уже пытался получить ответ на официальном форуме QT, но ответа не дождался, пришлось додумывать самому как это сделать.
Вот соб-но линк по сабжу
Как видно из рис.1 widget'ы которые там присутствуют, выровнены с помощью QGridLayout. Теперь код, который создает аналогичное меню.
m_lpStatusIconMenu = new QMenu();
QList<QString> qIconPath;
qIconPath << ":/Icons/Icons/Images&icon/icons/angry.png"
<< ":/Icons/Icons/Images&icon/icons/bat.png";
//Создаем Layout сетку
QGridLayout *Layout = new QGridLayout(ui->toolButton_2);
//Создаем кнопку
QToolButton * lpButton = new QToolButton(this);
//Устанавливаем у кнопки стиль(border(рамка) = 0 px)
lpButton->setStyleSheet("border: 0px solid #8f8f91; border-radius: 20px");
//Устанавливаем иконку
lpButton->setIcon(QIcon(qIconPath.at(0)));
//Добавляем в "сетку" где 0, 0 это позиция строка и столбец.
Layout->addWidget(lpButton, 0, 0);
//Создаем еще одну кнопку
lpButton = new QToolButton(this);
//Устанавливаем иконку
lpButton->setIcon(QIcon(qIconPath.at(1)));
//Устанавливаем иконку
Layout->addWidget(lpButton, 0, 1);
//Добавляем в "сетку" где 0, 1 это позиция строка и столбец.
//Теперь нашу сетку добавляем непосредственно в меню, которое будет показываться.
m_lpStatusIconMenu->setLayout(Layout);
//И это меню устанавливаем для кнопки QToolButton.
ui->toolButton_2->setMenu(m_lpStatusIconMenu);
Результат работы :
Как можно наблюдать 1 иконка не имеет рамки
т.к StyleSheet задан явно.
Вот таким вот способом можно комбинировать,
добавляя в меню различные widget'ы.