Qt QMenu右对齐文本

Qt QMenu右对齐文本,qt,qtstylesheets,qmenu,Qt,Qtstylesheets,Qmenu,我需要将我的QMenu中的文本右对齐,而不是左对齐 QMenu menu; menu.setStyleSheet("QMenu{background: #2e353d; color: #bfbfbf; margin: 0px;}" "QMenu::item{font-size: 10pt; padding: " + QString::number(6*globalDPI) + "px " + QString::number(30*globalDPI) + "px " + QString::num

我需要将我的
QMenu
中的文本右对齐,而不是左对齐

QMenu menu;
menu.setStyleSheet("QMenu{background: #2e353d; color: #bfbfbf; margin: 0px;}"
"QMenu::item{font-size: 10pt; padding: " + QString::number(6*globalDPI) + "px " + QString::number(30*globalDPI) + "px " + QString::number(6*globalDPI) + "px " + QString::number(20*globalDPI) + "px; border: 0px solid transparent; margin: 0px;}"
"QMenu::item:selected{background: #373f49; color: #fff;}");

menu.addAction("Debug Log");
menu.addAction("Website");
menu.addAction("Changelog");
menu.addAction("About");

menu.exec(myButton->mapToGlobal(QPoint(0,32*globalDPI)));
我尝试将
text align:right
添加到样式表中的
QMenu
QMenu::item
。我已尝试使用
setLayoutDirection
将布局方向设置为从右向左。我尝试添加
子控制位置:对到样式表。没有任何效果,菜单中的文本保持左对齐

QMenu menu;
menu.setStyleSheet("QMenu{background: #2e353d; color: #bfbfbf; margin: 0px;}"
"QMenu::item{font-size: 10pt; padding: " + QString::number(6*globalDPI) + "px " + QString::number(30*globalDPI) + "px " + QString::number(6*globalDPI) + "px " + QString::number(20*globalDPI) + "px; border: 0px solid transparent; margin: 0px;}"
"QMenu::item:selected{background: #373f49; color: #fff;}");

menu.addAction("Debug Log");
menu.addAction("Website");
menu.addAction("Changelog");
menu.addAction("About");

menu.exec(myButton->mapToGlobal(QPoint(0,32*globalDPI)));

有什么想法吗?

在使用QStyle绘制QMenu时,您将无法更改QMenu文本的对齐方式,因为它是编码的。一种解决方法是使用QProxyStyle,通过在QStyleOptionMenuItem中传递一个空文本进行绘制,然后绘制文本(我显示的文本绘制是有限的,因为我并不是在所有情况下都进行绘制,例如带有多行和其他选项的QMenu)

#包括
类menuRouxyStyle:公共QProxyStyle{
公众:
使用QProxyStyle::QProxyStyle;
void drawControl(ControlElement元素,常量QStyleOption*opt,qPaint*p,常量QWidget*w)常量覆盖
{
if(element==QStyle::CE_MenuItem){
if(常量QStyleOptionMenuItem*o=qstyleoption_cast(opt)){
QStyleOptionMenuItem=*o;
QString text=o->text;
menuitem.text=“”;
QProxyStyle::drawControl(元素和菜单项、p、w);
如果(o->text.isEmpty())
返回;
整型裕度=4;
int text_flags=Qt::AlignVCenter | Qt::AlignRight | Qt::TextDontClip | Qt::TextSingleLine;
p->drawText(菜单项矩形调整(边距,边距,-边距,-边距),文本标志,文本);
返回;
}
}
QProxyStyle::drawControl(元素、选项、p、w);
}
};
类Widget:publicqwidget{
公众:
小部件(QWidget*parent=nullptr):QWidget(parent){
setContextMenuPolicy(Qt::CustomContextMenu);
连接(此,&QWidget::customContextMenuRequested,此,&Widget::on_customContextMenuRequested);
}
私人:
请求的自定义上下文菜单无效(常量QPoint和pos){
QMenu菜单;
menu.setStyle(新的MenuProxyStyle(menu.style());
menu.addAction(“调试日志”);
菜单。添加操作(“网站”);
menu.addAction(“变更日志”);
menu.addAction(“关于”);
menu.exec(mapToGlobal(pos));
}
};
int main(int argc,char*argv[]){
QApplication应用程序(argc、argv);
小部件w;
w、 调整大小(640480);
w、 show();
返回app.exec();
}

谢谢您的回答!我担心我可能不得不做那样的事。。。我很感激你的详细回答,这会让我的生活更轻松:)