Как запретить контекстное меню по умолчанию на QGraphicsTextItem? - PullRequest
2 голосов
/ 29 марта 2019

Можно ли предотвратить щелчок правой кнопкой мыши на открытии контекстного меню по умолчанию на QGraphicsTextItem?Меню с «Отменить, Повторить, Вырезать, Копировать, Вставить ..».На Ubuntu 18.04 это.Я не знаю, как это ведет себя в Windows.

Я переопределил обработчик нажатий мыши, чтобы съесть щелчки правой кнопкой мыши, и попытался сделать это также в самом классе элементов.Это на самом деле помешало меню на Qt 5.10.0, но по какой-то причине больше не на 5.11.1:

enter image description here

void EditorView::mousePressEvent(QMouseEvent * event)
{ 
    if (event->button() == Qt::RightButton)
    {
        return;
    }

    ...
    doOtherHandlingStuff();
    ...
}

В пунктесамо по себе это не имеет никакого эффекта, если я сделаю это:

void TextEdit::mousePressEvent(QGraphicsSceneMouseEvent * event)
{
    event->ignore();
    return;
}

1 Ответ

3 голосов
/ 29 марта 2019

Вы должны переопределить метод contextMenuEvent класса QGraphicsTextItem:

#include <QtWidgets>

class GraphicsTextItem: public QGraphicsTextItem
{
public:
    using QGraphicsTextItem::QGraphicsTextItem;
protected:
    void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override
    {
        event->ignore();
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene scene;
    QGraphicsView w{&scene};
    auto it = new GraphicsTextItem("Hello World");
    it->setTextInteractionFlags(Qt::TextEditable);
    scene.addItem(it);
    w.show();
    return a.exec();
}
...