QPushButton с меню - падение с правой стороны

У меня длинный 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; }
};
</qmenu*></qpushbutton*>

licensed under cc by-sa 3.0 with attribution.