繁体   English   中英

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

[英]Blocking signal one time in Qt doesn't work correctly

嗨,我有以下代码:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM