Qt qcustomplot:按名称设置项并查找它们
我已经使用qcustomplot来绘制项目 我有两件东西。 一个是item text,另一个是item rect 我想做的是,当我选择文本时,项rect会改变颜色 我使用了Qt qcustomplot:按名称设置项并查找它们,qt,qcustomplot,Qt,Qcustomplot,我已经使用qcustomplot来绘制项目 我有两件东西。 一个是item text,另一个是item rect 我想做的是,当我选择文本时,项rect会改变颜色 我使用了itemAt来检查鼠标是否单击了某个项目 但我遇到了两个问题 我不知道我选择了什么项目文本 我不知道如何按名称查找特定项rect 代码: //项目文本 QCPItemText*text=新QCPItemText(ui->customPlot); ui->customPlot->addItem(文本); text->setSel
itemAt
来检查鼠标是否单击了某个项目
但我遇到了两个问题
//项目文本
QCPItemText*text=新QCPItemText(ui->customPlot);
ui->customPlot->addItem(文本);
text->setSelectable(真);
文本->位置->设置坐标(10,30);
文本->设置文本(“文本”);
text->setFont(QFont(font().family(),9));
//项矩形
QCPItemRect*rect=新的QCPItemRect(ui->customPlot);
ui->customPlot->addItem(rect);
rect->setPen(QPen(QColor(50,0,0100));
rect->setSelectedPen(QPen(QColor(0255100));
rect->setBrush(QBrush(QColor(50,0,0100));
rect->setSelectedBrush(QBrush(QColor(0,255,0,100));
矩形->左上->设置坐标(0,10);
rect->bottomRight->setCoords(10,0);
连接(ui->customPlot,信号(mouseMove(QMouseEvent*))、此、插槽(moveOver(QMouseEvent*));
移动(QMouseEvent*事件)
{
QPoint pos=事件->位置();
QCPAbstractItem*item=ui->customPlot->itemAt(pos,true);
如果(item!=0)qDebug()首先,要更改moveOver
事件中的rect
颜色,可以将其保存为类的数据成员
其次,因为QCPItemRect
和QCPItemText
都继承了qcpapstractitem
您可以使用。您可以尝试将其强制转换为QCPItemText
,如果强制转换失败,您的指针将为空。请参阅post
因此,您的代码应该如下所示:
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)));
}
}
moveOver(QMouseEvent*event)
{
QPoint pos=事件->位置();
QCPAbstractItem*item=ui->customPlot->itemAt(pos,true);
textItem=QCPItemText*动态施法(项目);
如果(textItem==0){
//项不是QCPItemText
**做点什么**
}
否则{
//项目是QCPItemText-更改矩形颜色
rect->setBrush(QBrush(QColor(50,0,0100));
}
}
请添加代码的相关部分。
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)));
}
}