Qt qcustomplot:按名称设置项并查找它们

Qt qcustomplot:按名称设置项并查找它们,qt,qcustomplot,Qt,Qcustomplot,我已经使用qcustomplot来绘制项目 我有两件东西。 一个是item text,另一个是item rect 我想做的是,当我选择文本时,项rect会改变颜色 我使用了itemAt来检查鼠标是否单击了某个项目 但我遇到了两个问题 我不知道我选择了什么项目文本 我不知道如何按名称查找特定项rect 代码: //项目文本 QCPItemText*text=新QCPItemText(ui->customPlot); ui->customPlot->addItem(文本); text->setSel

我已经使用qcustomplot来绘制项目

我有两件东西。 一个是item text,另一个是item rect

我想做的是,当我选择文本时,项rect会改变颜色

我使用了
itemAt
来检查鼠标是否单击了某个项目

但我遇到了两个问题

  • 我不知道我选择了什么项目文本

  • 我不知道如何按名称查找特定项rect

  • 代码:

    //项目文本
    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)));
        }
    }