在Qt中阻止信号一次无法正常工作

时间:2018-01-06 22:31:03

标签: c++ qt qt5

您好我有以下代码:

void MainWindow::on_listWidgetNotes_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)//Test!
{
    if(current != NULL)
    {
        ui->plainTextEditContent->setEnabled(true);
        change = false;
        if(isModified)
        {
            auto reply = QMessageBox::question(this, "Test", "Do you want save changes?", QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);
            if (reply == QMessageBox::Yes) on_pushButtonSave_clicked();
            else if(reply == QMessageBox::No) notes.closeFile();
            else
            {
                //ui->listWidgetNotes->blockSignals(true);
                ui->listWidgetNotes->setCurrentItem(previous);
                //ui->listWidgetNotes->blockSignals(false);
                return;
            }
        }
        isModified = false;
        this->setWindowTitle(current->text()+" - VfNotes 1.0");
        ui->plainTextEditContent->setPlainText(notes.openFile(current->text()));
    }
}

在指定的情况下,在选择取消按钮后,代码必须显示消息框并将焦点设置在上一个项目上。

setCurrentItem使用此消息框再次调用on_listWidgetNotes_currentItemChanged。使用后blockSignals焦点不会回到前一个元素上。单击取消后如何设置对前一项目的关注,on_listWidgetNotes_currentItemChanged未再次调用?

1 个答案:

答案 0 :(得分:0)

因此,如果这是在选择更改时调用的插槽,则调用此插槽,创建另一个插槽,然后从那里调用此函数。 现在这个新的插槽将有前一个项目,如果函数返回一本书而不是void表示按下了取消,那么你再次调用setCurrentItem ...