带菜单的 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 - 从右侧下拉的主要内容,如果未能解决你的问题,请参考以下文章