Um Text hervorzuheben, wenn ein Objekt in der Szene schwebt, müssen Sie QGraphicsScene und QGraphicsItem (welches Sie verwenden) neu implementieren, um Hauptfenster zu informieren, um Text zu finden und hervorzuheben.Hier ist Beispielcode Text zu markieren, wenn ein Objekt in Szene schwebte ich verwendet QGraphicsPixmapItem:
Grafik-Szene
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);
}
in Mainwindow Konstruktor verbinden
connect(scene,SIGNAL(SignalItemHovered(QString)),this,SLOT(OnItemHovered(QString)));
Hier Slot:
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);
}
und Logik zu zeichnen:
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;
HINWEIS: public EmitItemHoverd Verwendung ein Problem sein kann, hier habe ich nur aus Gründen der Erläuterung der Logik, die Sie kann es mit den erforderlichen Änderungen schützen.
Ja wusste, dass ich seine Hälfte der Antwort, aber entgegengesetzte Logik implimented werden kann mit Neudefinition `mouseMoveEvent` in abgeleiteten Klasse des Widgets in dem Sie schweben erkennen, basierend auf über
haben Sie versucht? – Tab
Ich würde QGraphicsScene dafür nicht selbst verwenden, sondern eher qml oder zumindest opengl basierte Lösung mit QtGui für den Grafikbetrachter. Sie könnten die Position des Cursors irgendwie im Text-Widget finden, aber leider ist das ein wenig schwierig. Allerdings würde dies in der Tat ein schickes Feature IMO aussehen. :-) – lpapp
@Tab das Problem, wie ich verstehe ist, dass op noch nicht entschieden hat, aus welcher Klasse – Shf