为什么QMenu的分隔符不显示文本?

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);
    ...

看到了那个问题,但我认为还有更简单的解决方案。而且更本地化。 - Rinat
如果您可以使用Qt 5.1,那么addSection(const QString&)看起来可能会起作用。 - Alyssa Haroldsen
是的,这是最正确的方法 :) 但是addSection只显示一行。 刚刚在这里读到了评论。问题是特定于操作系统(Win 7)。好的,感谢您的帮助!现在该怎么处理这个问题? - Rinat
啊,我没看到那个。如果需要在Windows中工作,最好的选择似乎是一个自定义小部件。 - Alyssa Haroldsen
1个回答

5
我需要在我的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"));

1
这个答案属于原始问题 - Kuba hasn't forgotten Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接