6

我的目标是制作带有标签分隔符的菜单。所以,我正在运行这段代码:

QMenu *menu = new QMenu;

QAction *group1 = menu->addSeparator();
group1->setText("Group of actions #1");
menu->addAction("Action #1");
menu->addAction("Action #2");
menu->addAction("Action #3");

QAction *group2 = menu->addSeparator();
group2->setText("Group of actions #2");
menu->addAction("Action #1");
menu->addAction("Action #2");
menu->addAction("Action #3");

QToolButton btn;
btn.setText("Click me");
btn.setMenu(menu);
btn.setPopupMode(QToolButton::InstantPopup);

btn.show();

得到了这个

QMenu 的分隔符文本未显示

而不是这个(我是由 MS Paint 创建的 :))

在此处输入图像描述

怎么了?

编辑:是的,还有另一个像这样的问题(QMenu 中的非交互式项目),但可能存在更简单的方法吗?

解决方案之一是使用“Fusion”主题 :) 我刚刚将以下代码添加到int main函数中:

int main(int argc, char *argv[]) {
    QApplication::setStyle("Fusion");
    QApplication a(argc, argv);
    ...
4

1 回答 1

4

我的 Qt 菜单需要一个文本样式的分隔符。我怎样才能做到这一点?

我这样解决问题:

QWidgetAction* MyWidget::createTextSeparator(const QString& text)
{
    auto* pLabel = new QLabel(text);
    pLabel->setMinimumWidth(this->minimumWidth() - 4);
    // grayish style
    pLabel->setStyleSheet("background: #FF4B4B4B;");
    // possible alignment
    // pLabel->setAlignment(Qt::AlignCenter);
    auto* separator = new QWidgetAction(this);
    separator->setDefaultWidget(pLabel);
    return separator;
}

pMenu->addAction(createTextSeparator("Group of actions"));
于 2016-06-22T21:36:43.233 回答