Сделать меню отображения QToolButton сверху в Qt 5.9

Есть ли способ для QToolButton отображать связанный с ним QMenu сверху, а не снизу?

Я видел этот ответ, который меня порадовал, но он на Python, и я действительно не знаю, как его правильно портировать.

Я также просмотрел исходный код QMenu, но это довольно сложно, поэтому я не знаю, как решить эту проблему.

На кнопке также есть маленькая стрелка, показывающая, что она выскочит. Вот ситуация

Это самая нижняя часть моего окна, поэтому я бы хотел, чтобы оно открывалось на случай, если оно станет слишком большим.


person Telokis    schedule 13.11.2017    source источник


Ответы (1)


Вы можете сделать это с помощью фильтра событий:

QMenu* yourMenu;
yourButton->setMenu(yourMenu);
yourMenu->installEventFilter(this);

bool yourClass::eventFilter(QObject * obj, QEvent *event)
{
    if (event->type() == QEvent::Show && obj == yourButton->menu())
    {
        QPoint pos = /*the position expected*/;
        yourButton->menu()->move(pos);
        return true;
    }
    return false;
}

Чтобы удалить маленькую стрелку, добавьте это в свою таблицу стилей:

QToolButton::menu-indicator{
    image: none;
}
person IAmInPLS    schedule 13.11.2017
comment
Спасибо! Хорошо, я не знал об этом, я попробую. Пока вы здесь, есть ли способ сделать так, чтобы маленькая стрелка указывала вверх на кнопке? И если это невозможно, можно ли просто удалить его полностью? - person Telokis; 13.11.2017
comment
@Telokis Да, добавил удаление стрелки :-) - person IAmInPLS; 13.11.2017
comment
Большое Вам спасибо. Этого достаточно для меня! :) - person Telokis; 13.11.2017