带菜单的 QPushButton - 从右侧下拉

Posted

技术标签:

【中文标题】带菜单的 QPushButton - 从右侧下拉【英文标题】:QPushButton with menu - drop from right side 【发布时间】:2014-12-12 21:06:09 【问题描述】:

我有一个很长的QPushButton(嗯,它的一个子类),附有一个菜单。下拉菜单指示器位于按钮的右侧,但按下时菜单会从左下角下拉。在我看来,这对我的用户来说会很笨拙且不直观。

我查看了QPushButton源代码,并尝试过:

this->setLayoutDirection(Qt::RightToLeft);

确实将菜单移动到右侧,但它破坏了按钮,因为它还将指示器移动到左侧并使菜单向后移动。

还有其他方法可以让菜单从右侧下降吗?

【问题讨论】:

【参考方案1】:

这可以通过在用于QPushButton 的菜单上安装一个事件过滤器来完成,它会在显示时移动它。

class rightSideMenuFilter : public QObject

public:

    bool eventFilter(QObject * obj, QEvent *event)
    
        QPushButton* parentButton = dynamic_cast<QPushButton*>(obj->parent());
        if (!parentButton)
            return false;

        QMenu* menu = dynamic_cast<QMenu*>(obj);
        if (!menu)
            return false;

        if (event->type() == QEvent::Show && obj == parentButton->menu())
        
            QPoint pos = menu->pos();
            qDebug() << "pos" << pos;

            pos.setX(pos.x() + parentButton->width() - menu->width());
            parentButton->menu()->move(pos);
            return true;
        
        return false;
    
;

【讨论】:

以上是关于带菜单的 QPushButton - 从右侧下拉的主要内容,如果未能解决你的问题,请参考以下文章

qss样式表之QPushButton, 下拉菜单设置等等

qss样式表之QPushButton, 下拉菜单设置等等

qss样式表之QPushButton, 下拉菜单设置等等

bootstrap怎么让下拉菜单从右侧弹出呢,或是

Bootstrap 5:下拉菜单在屏幕右侧消失

Bootstrap 下拉菜单显示在右侧