QComboBox currentIndexChanged не работает должным образом на QGraphicsView - PullRequest
0 голосов
/ 10 июня 2019

У меня есть QGraphicsView, который показывает некоторые изображения.На этих изображениях пользователь может решить выполнить некоторые операции, такие как i) измерение расстояния между двумя точками, ii) рисование прямоугольной области или iii) выполнение некоторых точечных операций (что означает, что при каждом щелчке мыши пользователь может извлекать координаты xy),QComboBox показано ниже:

combobox

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я пытаюсь изменить операцию для выполнения сбоев пользовательского интерфейса.Я пытаюсь выяснить причину, потому что я специально установил QComboBox для стирания операций, выполняемых каждый раз, когда пользователь решает изменить, скажем, с расстояния на область или с области на точку.

Для этого я использую опцию currentIndexChanged, доступную на QComboBox, может быть, я неправильно стираю операции после их выполнения?

См. Фрагмент кода ниже:

bool windowingDialog::eventFilter(QPointF point)
{
    cout << point.x() << "," << point.y()<< endl;
    switch(ui->comboBoxImgA->currentIndex())
    {
        case(0): break; // this is the "select one option"

        case(1): // Popint Operation
        {
            // Move previously found point to storage
            ui->pp_ax->setText(ui->leftCoordX->text());
            ui->pp_ay->setText(ui->leftCoordY->text());
            ui->pp_az->setText(ui->leftCoordDepth->text());
            matchImages(point); // We have that, ckick and get the best match
            refreshDistance3D();
        }
        break;
        case(2): drawTwoPoints(point); break; // Click on two different points and get the distance
        case(3): refreshArea(point); break; // Draw a bounding box
    }
}

void windowingDialog::refreshArea(QPointF point)
{
    lastPoint = currentPoint;
    currentPoint = point;
    drawArea(QRectF(lastPoint, currentPoint), Qt::green);
}



void windowingDialog::on_graphicsA_rubberBandChanged(const QRect &viewportRect, const QPointF &fromScenePoint, const QPointF &toScenePoint)
{
    if(viewportRect.isNull() && fromScenePoint.isNull() && toScenePoint.isNull())
    {
        {
            QRectF select;
            select.setCoords(fromScenePoint.x(), fromScenePoint.y(), toScenePoint.x(), toScenePoint.y());
            drawArea(select, Qt::green);
        }
    }
}



void windowingDialog::drawArea(QRectF area, QColor color)
{
    if(newBox != NULL)
    {
        viewerScene->removeItem(newBox);
        delete newBox;
    }
    newBox = viewerScene->addPolygon(QPolygonF() << area.topLeft() << area.topRight() << area.bottomRight() << area.bottomLeft());
    newBox->setPen(QPen(Qt::green));
    viewerScene->addItem(newBox);
    boxes.append(newBox);
    (void) color;
}

void windowingDialog::on_comboBoxImgA_currentIndexChanged(const QString &arg1)
{
    if(arg1 == "Area")
    {
        viewerScene->removeItem(pointline);
        delete pointline;
    } else if (arg1 == "Distance") {
        viewerScene->removeItem(newBox);
        delete newBox;
    } else if (arg1 == "Point") {
        viewerScene->removeItem(newBox);
        delete newBox;
        viewerScene->removeItem(pointline);
        delete pointline;
    }
}

Спасибо, что указали в правильном направлении или пролили свет на то, почему эта проблема происходит.

...