Greets!
I'm having some minor difficulty getting a QTextEdit widget to work completely from inside a QGraphicsScene. In general it works okay, but there are two issues:
* The scroll bar doesn't respond to the mouse button being held down. It only works once per mouse click.
* Holding down the mouse button and selecting text doesn't cause it to scroll if you move above or below the QTextEdit.
Here are the mouse event handler functions for my QGraphicsScene:
if(e->isAccepted()) return;
if(mapBox->map && e->button() == Qt::LeftButton) {
mapBox->SetTile(e);
} else if(mapBox->map && e->button() == Qt::MidButton) {
mapBox->mouse_start_x = e->scenePos().x();
mapBox->mouse_start_y = e->scenePos().y();
} else if(mapBox->map && play && player && e->button() == Qt::RightButton) {
player->clearQueue();
player->queueMoveTo(e->scenePos().x() + mapBox->xo, e->scenePos().y() + mapBox->yo, 500);
}
}
if(e->isAccepted()) return;
if(mapBox->map && (e->buttons() & Qt::LeftButton) &&
e->scenePos().x() > 0 && e->scenePos().y() > 0 &&
e->scenePos().x() < this->width() && e->scenePos().y() < this->height()) {
mapBox->SetTile(e);
} else if(mapBox->map && (e->buttons() & Qt::MidButton)) {
emit mapBox->SetXScroll(mapBox->xo - e->scenePos().x() + mapBox->mouse_start_x);
emit mapBox->SetYScroll(mapBox->yo - e->scenePos().y() + mapBox->mouse_start_y);
mapBox->mouse_start_x = e->scenePos().x();
mapBox->mouse_start_y = e->scenePos().y();
}
}
if(e->isAccepted()) return;
}
void MapScene::mousePressEvent(QGraphicsSceneMouseEvent * e) {
QGraphicsScene::mousePressEvent(e);
if(e->isAccepted()) return;
if(mapBox->map && e->button() == Qt::LeftButton) {
mapBox->SetTile(e);
} else if(mapBox->map && e->button() == Qt::MidButton) {
mapBox->mouse_start_x = e->scenePos().x();
mapBox->mouse_start_y = e->scenePos().y();
} else if(mapBox->map && play && player && e->button() == Qt::RightButton) {
player->clearQueue();
player->queueMoveTo(e->scenePos().x() + mapBox->xo, e->scenePos().y() + mapBox->yo, 500);
}
}
void MapScene::mouseMoveEvent(QGraphicsSceneMouseEvent * e) {
QGraphicsScene::mouseMoveEvent(e);
if(e->isAccepted()) return;
if(mapBox->map && (e->buttons() & Qt::LeftButton) &&
e->scenePos().x() > 0 && e->scenePos().y() > 0 &&
e->scenePos().x() < this->width() && e->scenePos().y() < this->height()) {
mapBox->SetTile(e);
} else if(mapBox->map && (e->buttons() & Qt::MidButton)) {
emit mapBox->SetXScroll(mapBox->xo - e->scenePos().x() + mapBox->mouse_start_x);
emit mapBox->SetYScroll(mapBox->yo - e->scenePos().y() + mapBox->mouse_start_y);
mapBox->mouse_start_x = e->scenePos().x();
mapBox->mouse_start_y = e->scenePos().y();
}
}
void MapScene::mouseReleaseEvent(QGraphicsSceneMouseEvent * e) {
QGraphicsScene::mouseReleaseEvent(e);
if(e->isAccepted()) return;
}
To copy to clipboard, switch view to plain text mode
Any thoughts?
Thanks!
Bart
Bookmarks