gpt4 book ai didi

qt - qcustomplot:按名称设置项目并找到它们

转载 作者:行者123 更新时间:2023-12-04 12:41:32 27 4
gpt4 key购买 nike

我用qcustomplot来画item。

我有两个项目。一个是项目文本,另一个是项目矩形。

我想做的是当我选择文本时,项目矩形改变颜色。

我已经使用 itemAt 来检查鼠标是否点击了一个项目。

但是我遇到了两个问题

  1. 我不知道我选择了什么项目文本。

  2. 我不知道如何按名称查找特定项目。

代码:

//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";
}

最佳答案

首先,为了在 moveOver 事件中更改 rect 颜色,您可以将其保存为类的数据成员。

其次,因为 QCPItemRectQCPItemText 都继承自 QCPAbstractItem 你可以使用 dynamic_cast .您可以尝试将其转换为 QCPItemText,如果转换失败,您的指针将为空。也看看 this发布。

因此,您的代码应如下所示:

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

关于qt - qcustomplot:按名称设置项目并找到它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37143620/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com