问题:
使用PushButton添加QMenu设置下拉按钮时无法使QMenu与PushButton宽度相同,如图。
解决后样式:
解决方法:
思路上还是设置QMenu的大小与QPushButton的大小宽度保持一致,对于窗口改变的时候QPushButton适应性缩放因此宽度也会改变,所以不能对其设置固定大小。于是使用connect连接按钮与菜单,当按钮发出"按下 pressed"信号时,菜单触发一个函数改变其宽度与按钮宽度相同,代码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QMenu>
#include <QAction>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QMenu *menuBtn1;
QMenu *menuBtn2;
menuBtn1 = new QMenu();
menuBtn2 = new QMenu();
//连接按钮和菜单,当按钮按下时,菜单改变其宽度与按钮一致
connect(ui->btn_2,&QPushButton::pressed,menuBtn2,[=](){
menuBtn2->setMinimumWidth(ui->btn_2->width());
});
connect(ui->btn_1,&QPushButton::pressed,menuBtn1,[=](){
menuBtn1->setMinimumWidth(ui->btn_1->width());
});
QAction *actM1 = new QAction("菜单1",menuBtn1);
QAction *actM2 = new QAction("菜单2",menuBtn1);
QAction *actM3 = new QAction("菜单1",this);
QAction *actM4 = new QAction("菜单2",this);
QAction *actM5 = new QAction("菜单3",this);
QAction *actM6 = new QAction("菜单4",this);
menuBtn1->addAction(actM1);
menuBtn1->addAction(actM2);
menuBtn2->addAction(actM3);
menuBtn2->addAction(actM4);
menuBtn2->addAction(actM5);
menuBtn2->addAction(actM6);
ui->btn_1->setMenu(menuBtn1);
ui->btn_2->setMenu(menuBtn2);
/** 如果使用这部分代码会导致第一次的时候长度不相同,但是以后点击时的长度都会相同
connect(ui->btn_2,&QPushButton::pressed,menuBtn2,[=](){
menuBtn2->setMinimumWidth(ui->btn_2->width());
});
**/
}
Widget::~Widget()
{
delete ui;
}
UI界面设置如下:
*注意: **
如果在程序中先将菜单添加到按钮上然后再设置connect(就是代码中注释的部分)会出现第一次点击时宽度不会相同,但后续的点击都会设置宽度相同。
结尾:
解决方案时在网上找到了这个方法,不过他木有给代码,不过根据他的描述应该是这个样子吧是 ヾ(≧▽≦)o :
(原文链接:https://stackoverflow.com/questions/30289794/make-qmenu-have-equal-width-as-parent-qpushbutton)