QGraphicsTextItem mouseDoubleClickEvent - PullRequest
       22

QGraphicsTextItem mouseDoubleClickEvent

0 голосов
/ 24 февраля 2011

Я новый парень для QT.Теперь вопрос меня смущает.

Код в MainWindow выглядит следующим образом:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QGraphicsView *view = new QGraphicsView;
    QGraphicsScene *scene =new QGraphicsScene;
    GraphicsTextItem *item = (GraphicsTextItem*)scene->addText(QString("hello world"));
    item->setPos(100,100);
    scene->addItem(item);
    QGraphicsItem *i = scene->itemAt(120,110);
    view->setScene(scene);
    view->show();
}

класс GraphicsTextItem наследует QGraphicsTextItem, а защищенный метод mousePressDown переопределен следующим образом:

void GraphicsTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug()<<"mouseDoubleClickEvent happens";
    QGraphicsTextItem::mouseDoubleClickEvent(event);
}

Приложение может работать нормально, но когда я дважды щелкаю объект GraphicsTextItem, ничего не происходит с mouseDoubleClickEvent в классе GraphicsTextItem.

Ожидайте вашего ответа!

1 Ответ

2 голосов
/ 11 октября 2011

Я искал свой код и разработал пример, потому что у меня остался вопрос, но вот он:

#include <QGraphicsTextItem>

class GraphicsTextItem : public QGraphicsTextItem
{
    Q_OBJECT

public:
    GraphicsTextItem(QGraphicsItem * parent = 0);

protected:
    void mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * event );

};

реализация:

#include "graphicstextitem.h"
#include <QDebug>
#include <QGraphicsSceneMouseEvent>

GraphicsTextItem::GraphicsTextItem(QGraphicsItem * parent)
    :QGraphicsTextItem(parent)
{
    setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
}

void GraphicsTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
    if (textInteractionFlags() == Qt::NoTextInteraction)
        setTextInteractionFlags(Qt::TextEditorInteraction);
    QGraphicsItem::mouseDoubleClickEvent(event);
}

вид

#include "mainwindow.h"
#include <QtGui>
#include <QtCore>
#include "graphicstextitem.h"

MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent)
{
    QGraphicsScene * scene = new QGraphicsScene();
    QGraphicsView * view = new QGraphicsView();
    view->setScene(scene);

    GraphicsTextItem * text = new GraphicsTextItem();
    text->setPlainText("Hello world");
    scene->addItem(text);


    text->setPos(100,100);
    text->setFlag(QGraphicsItem::ItemIsMovable);
    setCentralWidget(view);
}

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

...