QT基于QToolButton的下拉式菜单

前言:本文介绍了两种模式的下拉式菜单,一共有3种,另一种是QToolButton::DelayedPopup,之后用到在加进去。

1)QToolButton::InstantPopup下拉式菜单,会在右下角显示一个小的箭头,当按下工具按钮时,菜单立即显示出来。在此模

式下,按钮本身的动作不会被触发,如图:

2)QToolButton::MenuButtonPopup下拉式菜单,在这种模式下,工具按钮显示一个特殊的箭头,表示有一个菜单。当按下按

钮的箭头部分时,将显示菜单,当按下下拉式按钮时,将执行该按钮响应的动作,如图:

程序设计:

void myMainWindow::createSelectionPopMenu()
{
    //创建下拉菜单
    QMenu *menuSelection = new QMenu(this);
    menuSelection->addAction(ui->actSelAll);
    menuSelection->addAction(ui->actSelNone);
    menuSelection->addAction(ui->actSelInvs);

    //设置弹出菜单的样式QToolButton::MenuButtonPopup
    ui->tBtnSelectItem->setPopupMode(QToolButton::MenuButtonPopup);
    //设置按钮样式
    ui->tBtnSelectItem->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
    //为按钮设置默认Action
    ui->tBtnSelectItem->setDefaultAction(ui->actSelPopMenu);
    //为按钮设置下拉菜单
    ui->tBtnSelectItem->setMenu(menuSelection);


    //工具栏的下拉式菜单按钮,QToolButton::InstantPopup
    QToolButton *aBtn =new QToolButton(this);
    aBtn->setPopupMode(QToolButton::InstantPopup);
    aBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    aBtn->setDefaultAction(ui->actSelPopMenu);
    aBtn->setMenu(menuSelection);

    //将下拉菜单添加到工具栏
    ui->mainToolBar->addWidget(aBtn);
    //设置分隔符
    ui->mainToolBar->addSeparator();
}

效果图

注:本程序中的QToolButton::MenuButtonPopup下拉式菜单的按钮关联了反选的操作

在这里插入图片描述

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过设置QToolButton的popupMode属性为QToolButton::MenuButtonPopup,然后使用QMenu中的addAction()方法添加菜单项,并设置QMenu的属性为Qt::RightAlignment来实现将下拉菜单靠近右侧。 示例代码如下: ```cpp QToolButton *toolButton = new QToolButton(parent); toolButton->setPopupMode(QToolButton::MenuButtonPopup); QMenu *menu = new QMenu(toolButton); menu->addAction("Item 1"); menu->addAction("Item 2"); menu->addAction("Item 3"); menu->setStyleSheet("QMenu::item { padding: 2px 20px 2px 20px; }"); menu->setStyleSheet("QMenu { menu-scrollable: 1; }"); menu->setStyleSheet("QMenu { menu-item-spacing: 2px; }"); menu->setAttribute(Qt::WA_TranslucentBackground); menu->setWindowFlags(Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint); menu->setStyleSheet("QMenu { background-color: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 : 1, stop : 0 #f8f8f8, stop : 0.5 #ffffff, stop : 0.6 #e0e0e0, stop : 1 #d6d6d6); } QMenu::item:selected { background-color: #acacac; }"); menu->setStyleSheet("QMenu::separator { height: 1px; background-color: #d6d6d6; }"); menu->setStyleSheet("QMenu::indicator { width: 12px; height: 12px; }"); menu->setStyleSheet("QMenu::indicator:unchecked { image: url(:/res/unchecked.png); }"); menu->setStyleSheet("QMenu::indicator:checked { image: url(:/res/checked.png); }"); menu->setStyleSheet("QMenu::right-arrow { margin-right: 5px; width: 12px; height: 12px; }"); menu->setStyleSheet("QMenu::item:selected { background-color: #acacac; }"); menu->setStyleSheet("QMenu::item { padding: 2px 20px 2px 20px; }"); menu->setStyleSheet("QMenu { menu-scrollable: 1; }"); menu->setStyleSheet("QMenu { menu-item-spacing: 2px; }"); menu->setStyleSheet("QMenu::separator { height: 1px; background-color: #d6d6d6; }"); menu->setStyleSheet("QMenu::indicator { width: 12px; height: 12px; }"); menu->setStyleSheet("QMenu::indicator:unchecked { image: url(:/res/unchecked.png); }"); menu->setStyleSheet("QMenu::indicator:checked { image: url(:/res/checked.png); }"); menu->setStyleSheet("QMenu::right-arrow { margin-right: 5px; width: 12px; height: 12px; }"); menu->setWindowFlags(Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint); menu->setWindowFlags(Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint); menu->setAttribute(Qt::WA_TranslucentBackground); menu->setStyleSheet("QMenu { background-color: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 : 1, stop : 0 #f8f8f8, stop : 0.5 #ffffff, stop : 0.6 #e0e0e0, stop : 1 #d6d6d6); } QMenu::item:selected { background-color: #acacac; }"); menu->setStyleSheet("QMenu::separator { height: 1px; background-color: #d6d6d6; }"); menu->setStyleSheet("QMenu::indicator { width: 12px; height: 12px; }"); menu->setStyleSheet("QMenu::indicator:unchecked { image: url(:/res/unchecked.png); }"); menu->setStyleSheet("QMenu::indicator:checked { image: url(:/res/checked.png); }"); menu->setStyleSheet("QMenu::right-arrow { margin-right: 5px; width: 12px; height: 12px; }"); toolButton->setMenu(menu); ``` 需要注意的是,以上代码中的菜单表只是为了美化菜单的样,具体样可以根据需要进行调整。另外,菜单的右对齐可能会因为窗口大小和屏幕分辨率的不同而产生差异,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值