0

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

左侧下拉菜单

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

this->setLayoutDirection(Qt::RightToLeft);

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

在此处输入图像描述

还有另一种方法可以使菜单从右侧下降吗?

4

1 回答 1

0

可以通过在用于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;
    }
};
于 2014-12-12T21:56:01.313 回答