2015-12-07 4 views
1

Я подклассифицирую QGraphicsItem для узла, но когда я установил его всплывающую подсказку, он не может отображать всплывающую подсказку, когда мышь коснется его.Невозможно отобразить всплывающую подсказку QGraphicsItem

Существует часть моего кода:

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 узла, но это Безразлично» Помогите, что случилось?

+0

Проблема наверняка не в коде вы обменивались сообщениями. Пожалуйста, простите свой вопрос. –

+0

Я расширяю свой код, это основная часть кода –

ответ

1

Проблема с вашей функцией boudingRect(). Посмотрите на это и попытайтесь угадать, что возвращается.

Если скопировать и вставить следующий код, то появится подсказка:

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); 

} 
+0

Я забыл установить его область, спасибо. Он работает. –