QComboBox имеет несвязанное поведение с QMessageBox - PullRequest
0 голосов
/ 26 ноября 2018

В пользовательском интерфейсе можно загружать изображения в QGraphicScene, используя QPushButton.Кроме того, в том же интерфейсе у меня есть QCombobox, который выполняет некоторые операции с изображениями после их загрузки.Я настраиваю пользовательский интерфейс таким образом, чтобы, если я попытаюсь использовать поле со списком до того, как какое-либо изображение будет загружено, появится предупреждение QMessage, сообщающее пользователю о необходимости загрузки изображений.Это почти работает, проблема в том, что он сбрасывает QCombobox, но снова просит загрузить изображения.Я думаю, что это входит в цикл два раза, и я изо всех сил пытался исправить ошибку.

Напомним: я открываю интерфейс, попробуйте использовать ComboBox;нет загруженных изображений, и появляется всплывающее окно QMessageBox, предлагающее пользователю загрузить изображения;Combobox автоматически сбрасывает начальное значение [которое в моем случае называется «операции выбора»], но теперь всплывает другой QMessageBox, запрашивающий то же самое, а не один раз.

Ниже части кода, я думаю, это вызываетэто: mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->leftPreview->setText("<b>No Image Set!</b>");

    points.clear();
    currentSelection = -1; // used to detect if images have been uploaded on QListWidget
}


void MainWindow::on_primarySubComboBoxLeft_currentIndexChanged(const QString &arg1)
{
    if(currentSelection < 0) {
        QMessageBox::information(this, "Option not allowed yet", "Please upload images before using this selection");
        ui->primarySubComboBoxLeft->setCurrentText("Primary Substrate");
        return;
    } else {
       selections[currentSelection]->setPrimarySubText(arg1);
       selections[currentSelection]->updateLabelText();
    }
}

mainwindow.h

private:
    Ui::MainWindow *ui;
    MGraphicsScene* leftScene;

    QList<DataRegion*> selections;
    int currentSelection;

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

1 Ответ

0 голосов
/ 28 ноября 2018

ui->primarySubComboBoxLeft->setCurrentText(...) изменяет текущий индекс, что, в свою очередь, снова вызывает сигнал currentIndexChanged.Возможно, вы захотите обработать сигнал activated вместо этого - он срабатывает только тогда, когда выбор изменяется с помощью действия пользователя, но не когда он изменяется программно.

...