Чтобы выделить текст, когда объект завис в сцене, вы должны переопределить QGraphicsScene и QGraphicsItem (какой из них вы собираетесь использовать), чтобы сообщить основному окну, чтобы найти и выделить текст.Ниже приведен пример кода для выделения текста, когда объект парил в сцене я использовал QGraphicsPixmapItem:
Графическая сцена
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);
}
в MainWindow конструктор connect
connect(scene,SIGNAL(SignalItemHovered(QString)),this,SLOT(OnItemHovered(QString)));
Вот слот:
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);
}
и логика рисовать:
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;
ПРИМЕЧАНИЕ: Использование публичного EmitItemHoverd может быть проблема здесь я только ради объяснения логики вам может защитить его с помощью необходимых изменений.
Да, я знал, что его половину ответа, но обратная логика может быть implimented на основе выше
вы пытались с переопределение 'mouseMoveEvent' в производном классе виджетов, в которых вы хотите обнаружить парить? – Tab
Я бы лично не использовал QGraphicsScene для этого, а скорее qml или, по крайней мере, opengl-решение с QtGui для графического просмотра. Вы могли бы как-то получить положение курсора в текстовом виджете, но, к сожалению, это довольно сложно. Тем не менее, это действительно выглядело бы причудливой особенностью ИМО. :-) – lpapp
@Tab проблема, как я понимаю, заключается в том, что op еще не решил, из какого класса вывести – Shf