我有一个很长的QPushButton
(嗯,一个子类),附有一个菜单。下拉菜单指示符位于按钮的右侧,但按下时,菜单从左下角落下。在我看来,这对我的用户来说会很笨拙和不直观。
我查看了QPushButton
源代码,并尝试了:
this->setLayoutDirection(Qt::RightToLeft);
确实将菜单移到了右侧,但它打破了按钮,因为它也将指示器移到了左侧并使菜单向后移动。
还有另一种方法可以让菜单从右侧掉落吗?
答案 0 :(得分: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;
}
};