Aby podświetlić tekst, gdy obiekt jest zawieszony w scenie, należy ponownie zaimplementować QGraphicsScene i QGraphicsItem (którego należy użyć), aby poinformować mainwindow, aby znaleźć i zaznaczyć tekst.Oto przykładowy kod, aby podświetlić tekst, gdy obiekt unosił się w miejscu użyłem QGraphicsPixmapItem:
Graphic scena
class GraphicScene : public QGraphicsScene
{
Q_OBJECT
public:
GraphicScene();
void EmitItemHoverd(QString name)
{
emit SignalItemHovered(name);
}
signals:
void SignalItemHovered(QString);
};
GraphicsItem:
#include "GraphicScene.h"
class GraphicItem : public QGraphicsPixmapItem
{
QString itemName;
GraphicScene * scene;
public:
GraphicItem(GraphicScene *s, QString name);//name you can set from editor
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
};
GraphicItem::GraphicItem(GraphicScene *s, QString name)
{
scene = s;
itemName = name;
this->setAcceptHoverEvents(true);
}
void GraphicItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
scene->EmitItemHoverd(itemName);
}
w MainWindow konstruktor podłącz
connect(scene,SIGNAL(SignalItemHovered(QString)),this,SLOT(OnItemHovered(QString)));
Oto gniazdo:
void MainWindow::OnItemHovered(QString name)
{
ui->textEdit->find(name);
QTextCursor tc = ui->textEdit->textCursor();
tc.select(QTextCursor::WordUnderCursor);
ui->textEdit->find("}");
QTextCursor tc1 = ui->textEdit->textCursor();
tc1.select(QTextCursor::WordUnderCursor);
int pos2 = tc1.selectionStart();
tc.setPosition(pos2,QTextCursor::KeepAnchor);
ui->textEdit->setTextCursor(tc);
}
i logika rysować:
GraphicItem * item = new GraphicItem(scene,"Circle");
QPixmap map(50,50);
QPainter * painter= new QPainter(&map);
painter->setBrush(QBrush(Qt::red,Qt::SolidPattern));
painter->drawEllipse(20,20,15,15);
item->setPixmap(map);
scene->addItem(item);
ui->graphicsView->update();
delete painter;
UWAGA: Korzystanie EmitItemHoverd publicznego może być problem tutaj użyłem tylko przez wzgląd na wyjaśnienia logiki ty może uczynić go chronionym wymaganymi zmianami.
Tak Wiedziałem swoją połowę odpowiedź lecz przeciwnie logika może być implimented na podstawie wyżej
pan spróbować z redefinicji 'mouseMoveEvent' w klasie pochodnej z widgetami w którym chcesz wykryć najechania kursorem? – Tab
Nie używałbym osobiście QGraphicsScene do tego, ale raczej qml lub przynajmniej opartego na OpenGL rozwiązania z QtGui dla przeglądarki graficznej. W widgecie tekstu można uzyskać pozycję kursora, ale niestety jest to dość trudne. Jednak rzeczywiście wyglądałoby to fantazyjną cechą IMO. :-) – lpapp
@Tab problem, ponieważ rozumiem, że op jeszcze się nie zdecydował, z której klasy wywodzić – Shf