C++11 QComboBox与QMessageBox具有不相关的行为

C++11 QComboBox与QMessageBox具有不相关的行为,c++11,qt5,qt4,C++11,Qt5,Qt4,在用户界面上,可以使用QPushButton在QGraphics场景上上载图像。此外,在同一个界面上,我有一个QCombobox,它在上传图像后对图像执行一些操作。我正在设置用户界面,以便在上载任何图像之前尝试使用组合框时,会弹出QMessage警告,告知用户上载图像。它几乎可以工作,问题是它重置了QCombobox,但再次要求上传图像。我认为这是进入了两个周期,我一直在努力纠正错误 重述一下:我打开界面,尝试使用组合框;没有上传图像,QMessageBox弹出提示用户上传图像;Combobox

在用户界面上,可以使用QPushButton在QGraphics场景上上载图像。此外,在同一个界面上,我有一个QCombobox,它在上传图像后对图像执行一些操作。我正在设置用户界面,以便在上载任何图像之前尝试使用组合框时,会弹出QMessage警告,告知用户上载图像。它几乎可以工作,问题是它重置了QCombobox,但再次要求上传图像。我认为这是进入了两个周期,我一直在努力纠正错误

重述一下:我打开界面,尝试使用组合框;没有上传图像,QMessageBox弹出提示用户上传图像;Combobox自动重新设置初始值[在我的例子中称为“选择的操作”),但现在另一个QMessageBox弹出,询问相同的问题,而不是只询问一次

下面的代码部分,我认为是它导致了这一点: main window.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::MainWindow(QWidget*父项):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
ui->leftPreview->setText(“未设置图像!”);
点。清除();
currentSelection=-1;//用于检测图像是否已上载到QListWidget上
}
void main window::on_primarysubomboxleft_currentIndexChanged(常量QString和arg1)
{
如果(当前选择<0){
QMessageBox::信息(此选项“尚不允许”,“请在使用此选项之前上载图像”);
ui->PrimarySubComboxLeft->setCurrentText(“主基板”);
返回;
}否则{
选择[currentSelection]->setPrimarySubText(arg1);
选择[currentSelection]->updateLabelText();
}
}
main window.h

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

    QList<DataRegion*> selections;
    int currentSelection;
private:
Ui::MainWindow*Ui;
MGraphicsScene*leftScene;
QList选择;
电流选择;

我认为这是进入循环两次,但我不知道如何解决这个问题。感谢您的建议。

ui->primarysubomboxleft->setCurrentText(…)
更改当前索引,从而再次触发
currentIndexChanged
信号。您可能希望处理
激活的
信号-它仅在通过用户操作更改选择时触发,而不是在以编程方式更改选择时触发。

感谢Igor的这一微妙之处,我没有注意到<代码>已激活
解决了我的问题,这是任何人需要时的解决方案:
void main window::on_primarysubomboxleft_activated(const QString&arg1)