mouseEvent в QPushButton

172
28 октября 2018, 04:10

Возникла такая проблема: создал класс, унаследовавшись от QPushButton и обнаружил, что не могу переопределить mouseReleaseEvent так как он не является виртуальным. Мне нужно, чтобы кнопка при нажатии на нее правой кнопкой реагировала по-другому, но, так как этот метод я не могу переопределить, то не знаю как это сделать. Вариант с наследованием от QAbstractButton рассматривать не хочется, так как QPushButton и так соответствует всем моим требованием (за исключением этого-вот момента).

Как заставить кнопку реагировать на правую кнопку мыши (выполнять действия отличные от тех, что выполняются при нажатии левой кнопки)?

UPD Данная проблема связана с опечаткой, вопрос, по-сути, не имеет смысла.

Answer 1

Согласно документации Qt http://doc.qt.io/qt-5/qwidget.html#mouseReleaseEvent

Метод QWidget::mouseReleaseEvent является виртуальным. Можете поподробней описать, как Вы пытались переопределить метод?

#include <QApplication>
#include <QPushButton>
#include <QDebug>
#include <QMessageBox>
class MyButton : public QPushButton
{
public:
    MyButton(QWidget *parent = nullptr):
        QPushButton(parent)
    {

    }

protected:
    virtual void mouseReleaseEvent(QMouseEvent *event) override
    {
        QMessageBox::information(this, "", "WOW It's mouseReleaseEvent");
        QPushButton::mouseReleaseEvent(event);
    }
};
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyButton w;
    w.setText("MY BUTTON");
    w.show();
    return a.exec();
}

Answer 2

Установите фильтр событий (installEventFilter) и добавляйте туда необходимую логику.

READ ALSO
C++ Web Toolkit

C++ Web Toolkit

Кто работал с WT на C++ под Windows она может рендерить HTML в приложении winapi?

197
C++ WinAPI кастомный стиль для контрола

C++ WinAPI кастомный стиль для контрола

Как например создать кнопку со своим стилем в WinAPI к примеру как ето делается в C# WPF? Или нужно рисовать rectangle, искать координаты и тд самому?

157
Как собрать проект на с++ в linux в котором есть __declspec( dllimport )

Как собрать проект на с++ в linux в котором есть __declspec( dllimport )

Столкнулся с ошибкой при сборки проекта

171
Задать лимит строки r=1*2*3&hellip;*n

Задать лимит строки r=1*2*3…*n

Пользователь должен задать лимит строки умножения данного типа, без FOR итдТолько goto, счетчик и if :C Вот типа так :

152