QComboBox与QMessageBox具有不相关的行为

时间:2018-11-26 17:07:47

标签: c++11 qt5 qt4

在用户界面上,可以使用QPushButton在QGraphicScene上上传图像。另外,在同一界面上,我有一个QCombobox,一旦上传图像,它们就会对图像进行一些操作。我正在设置用户界面,以便如果在上载任何图像之前尝试使用组合框,则会弹出QMessage警告,告诉用户上载图像。它几乎可以工作,问题是它重置了QCombobox,但再次要求上传图像。我认为这是周期中的两次,我一直在努力纠正错误。

回顾一下:我打开界面,尝试使用ComboBox;没有上传图片,并且弹出QMessageBox告诉用户上传图片;组合框会自动重置初始值(在我的情况下称为“选择操作”),但是现在又弹出另一个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 :(得分:1)

ui->primarySubComboBoxLeft->setCurrentText(...)更改当前索引,这又触发currentIndexChanged信号。您可能想处理activated信号-它仅在通过用户操作更改选择时触发,而不是通过编程方式更改时触发。