【Qt 设置QMenu与QPushButton同样大小】

问题:
使用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)
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>