为什么 QMenu 的分隔符不显示文本?
Why QMenu's separator doesn't show text?
我的目标是制作带有标签分隔符的菜单。
所以,我是运行这个代码:
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();
得到这个
而不是这个(我用 MS Paint 创建的 :))
怎么了?
编辑: 是的,还有另一个类似的问题(Non interactive items in QMenu),但也许存在更简单的方法?
其中一个解决方案 正在使用 "Fusion" 主题 :) 我刚刚将下面的代码添加到 int main
函数中:
int main(int argc, char *argv[]) {
QApplication::setStyle("Fusion");
QApplication a(argc, argv);
...
I need a text styled separator for my Qt menu. How can I do that?
我是这样解决问题的:
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"));
我的目标是制作带有标签分隔符的菜单。 所以,我是运行这个代码:
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();
得到这个
而不是这个(我用 MS Paint 创建的 :))
怎么了?
编辑: 是的,还有另一个类似的问题(Non interactive items in QMenu),但也许存在更简单的方法?
其中一个解决方案 正在使用 "Fusion" 主题 :) 我刚刚将下面的代码添加到 int main
函数中:
int main(int argc, char *argv[]) {
QApplication::setStyle("Fusion");
QApplication a(argc, argv);
...
I need a text styled separator for my Qt menu. How can I do that?
我是这样解决问题的:
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"));