没找到直接设置文字居中的方式,查询资料,可以使用setDefaultWidget()将一个QLabel设置为QAction的默认窗口小部件。通过设置QLabel文本靠左,居中或者靠右,具体实现如下:
方法一:
auto *btn = new QPushButton("我是一个按钮");
btn->setFixedSize(200,60);
QGridLayout *layout = new QGridLayout(this);
layout->addWidget(btn);
QMenu *menu = new QMenu(btn);
QWidgetAction *action1 = new QWidgetAction(menu);
QWidgetAction *action2 = new QWidgetAction(menu);
QLabel *label1 = new QLabel("测试1");
QLabel *label2 = new QLabel("测试2");
label1->setFixedWidth(200);
label1->setAlignment(Qt::AlignCenter);
label2->setAlignment(Qt::AlignHCenter);
action1->setDefaultWidget(label1);
action2->setDefaultWidget(label2);
menu->addAction(action1);
menu->addAction(action2);
menu->setFixedWidth(200);
btn->setMenu(menu); //很重要,使按钮变成菜单按钮
connect(action1,&QWidgetAction::triggered,this,[=]
{
btn->setText(label1->text());
});
connect(action2,&QWidgetAction::triggered,this,[=]
{
btn->setText(label2->text());
});
效果图:
方法二:
由于使用方法一设置样式的时候,不知道是不是因为姿势不对的原因,QMenu下拉菜单的样式不能设置成功,又发现了一个可以使QAction中的文字居中显示的方法。
```cpp
//通过样式表设置之后,也能实现使文字居中,效果挺好,使用padding-left在左侧填充了80像素..padding 就是内容与边框的空隙
setStyleSheet("QMenu::item:selected{background-color:green;}"
"QMenu::item{padding-left:80px;padding-top:5px;padding-bottom:5px;}")
auto *btn = new QPushButton("我是一个按钮");
btn->setFixedSize(200,60);
QGridLayout *layout = new QGridLayout(this);
layout->addWidget(btn);
btn->setIcon(QIcon(":/icon.png"));//设置图标
btn->setIonSize(QSize(40,40));
QMenu *menu = new QMenu(btn);
QAction *action1 = new QAction(menu);
QAction *action2 = new QAction(menu);
menu->addAction(action1);
menu->addAction(action2);
menu->setFixedWidth(200);
btn->setMenu(menu); //很重要,使按钮变成菜单按钮
connect(action1,&QWidgetAction::triggered,this,[=]
{
btn->setText(action1->text());
});
connect(action2,&QWidgetAction::triggered,this,[=]
{
btn->setText(action2->text());
});