3

qcustomplot を使用してアイテムを描画しました。

私は2つのアイテムを持っています。1 つは item text で、もう 1 つは item rect です。

私がやりたいのは、テキストを選択すると、アイテムの四角形が色を変えることです。

を使用してitemAt、マウスがアイテムをクリックしたかどうかを確認しました。

しかし、私は2つの問題に遭遇しました

  1. どのアイテム テキストを選択したかわかりません。

  2. 特定のアイテム rect を名前で見つける方法がわかりません。

コード:

//item text
QCPItemText *text= new QCPItemText(ui->customPlot);
ui->customPlot->addItem(text);
text->setSelectable(true);
text->position->setCoords(10, 30);
text->setText("text");
text->setFont(QFont(font().family(), 9));

// item rect
QCPItemRect *rect= new QCPItemRect(ui->customPlot);
ui->customPlot->addItem(rect);
rect->setPen(QPen(QColor(50, 0, 0, 100)));
rect->setSelectedPen(QPen(QColor(0, 255, 0, 100)));
rect->setBrush(QBrush(QColor(50, 0, 0, 100)));
rect->setSelectedBrush(QBrush(QColor(0, 255, 0, 100)));
rect->topLeft->setCoords(0,10);
rect->bottomRight->setCoords(10,0);
connect(ui->customPlot, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(moveOver(QMouseEvent*)));


moveOver(QMouseEvent* event)
{
    QPoint pos = event->pos();
    QCPAbstractItem *item = ui->customPlot->itemAt(pos, true);
    if(item != 0) qDebug() << "moved over";
}
4

1 に答える 1

1

まず、イベントrect内の色を変更するためmoveOverに、クラスのデータ メンバーとして保存できます。

第 2 に、 と の両方QCPItemRectQCPItemText継承しQCPAbstractItemて を使用できるためdynamic_castです。キャストを試みることができQCPItemTextます。キャストが失敗した場合、ポインターは null になります。こちらの投稿もご覧ください。

したがって、コードは次のようになります。

moveOver(QMouseEvent* event)
{
    QPoint pos = event->pos();
    QCPAbstractItem *item = ui->customPlot->itemAt(pos, true);
    textItem = QCPItemText* dynamic_cast<QCPItemText*> (item);
    if (textItem == 0){
        //item is not a QCPItemText
        **do something**
    }
    else{
        //item is a QCPItemText - change rect color
        rect->setBrush(QBrush(QColor(50, 0, 0, 100)));
    }
}
于 2016-05-11T07:54:06.310 に答える