无法显示 QGraphicsItem 的工具提示
Can't show QGraphicsItem's tooltip
我将 QGraphicsItem 子类化为 Node,但是当我设置它的工具提示时,当鼠标触摸它时它无法显示工具提示。
有一些我的代码:
class Node : public QGraphicsItem {
public:
Node(int id);
~Node() {}
int id;
private:
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};
void Node::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget) {
QPen pen(Qt::red);
painter->setPen(pen);
painter->setBrush(Qt::red);
painter->drawRoundRect(-10, -10, 10, 10);
}
QRectF Node::boundingRect() const {
QRectF rect;
rect.translate(-rect.center());
return rect;
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
view = new QGraphicsView(this);
scene = new QGraphicsScene(0, 0, 2000, 2000);
view->setScene(scene);
setCentralWidget(view);
generateMap();
ui->actionQuery_path->setToolTip(
"query the shortest path between to loactions");
view->show();
}
void MainWindow::generateMap() {
// waterhome
Node *waterhome = new Node(1);
waterhome->setToolTip("开水房");
waterhome->moveBy(100, 470);
scene->addItem(waterhome);
}
现在我可以看到我的节点,但看不到它的工具提示甚至动作的工具提示,我尝试增加节点的 Z 值,但没有帮助,怎么了?
问题出在您的 boudingRect() 函数上。看看它并尝试猜测 returns 后面是什么。
如果您复制粘贴以下代码,则应显示工具提示:
QRectF Node::boundingRect() const
{
qreal penWidth = 1;
return QRectF(-10 - penWidth / 2, -10 - penWidth / 2,
20 + penWidth, 20 + penWidth);
}
void Node::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QPen pen(Qt::red);
painter->setPen(pen);
painter->setBrush(Qt::red);
painter->drawRoundedRect(-10, -10, 20, 20, 2, 2);
}
我将 QGraphicsItem 子类化为 Node,但是当我设置它的工具提示时,当鼠标触摸它时它无法显示工具提示。
有一些我的代码:
class Node : public QGraphicsItem {
public:
Node(int id);
~Node() {}
int id;
private:
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};
void Node::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget) {
QPen pen(Qt::red);
painter->setPen(pen);
painter->setBrush(Qt::red);
painter->drawRoundRect(-10, -10, 10, 10);
}
QRectF Node::boundingRect() const {
QRectF rect;
rect.translate(-rect.center());
return rect;
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
view = new QGraphicsView(this);
scene = new QGraphicsScene(0, 0, 2000, 2000);
view->setScene(scene);
setCentralWidget(view);
generateMap();
ui->actionQuery_path->setToolTip(
"query the shortest path between to loactions");
view->show();
}
void MainWindow::generateMap() {
// waterhome
Node *waterhome = new Node(1);
waterhome->setToolTip("开水房");
waterhome->moveBy(100, 470);
scene->addItem(waterhome);
}
现在我可以看到我的节点,但看不到它的工具提示甚至动作的工具提示,我尝试增加节点的 Z 值,但没有帮助,怎么了?
问题出在您的 boudingRect() 函数上。看看它并尝试猜测 returns 后面是什么。
如果您复制粘贴以下代码,则应显示工具提示:
QRectF Node::boundingRect() const
{
qreal penWidth = 1;
return QRectF(-10 - penWidth / 2, -10 - penWidth / 2,
20 + penWidth, 20 + penWidth);
}
void Node::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QPen pen(Qt::red);
painter->setPen(pen);
painter->setBrush(Qt::red);
painter->drawRoundedRect(-10, -10, 20, 20, 2, 2);
}