更新QComboBox内容的正确方法

时间:2017-10-25 17:20:37

标签: c++ qt user-interface qcombobox

我有一个QComboBox,它是可用串行端口的选择器。每当与元素的新用户交互开始时我想更新这个组合框,但我有几个问题。通常,当用键盘点击或搞砸它时,不存在知道何时被点击或以其他方式关注用户的信号。近似值是void mainwindow::on_comboBox_highlighted(const QString &arg1)槽,但每次光标下的选项发生变化时,它都会收到一个信号,而不仅仅是表格最初接收焦点时。这是有问题的,因为如果我擦除列表的内容并重新填充列表的内容,将立即再次调用该方法,并且该方法的多个实例将运行并尝试无限期地执行相反的操作(竞争条件),除非某种国家考虑在该方法中实施。

有时,项目可能会在更新时从列表中消失,因为它们不再可供系统使用。出于这个原因,需要在更新时擦除并重新填充整个列表,而不是检测不可用的项目并删除它们,然后添加列表中尚未找到的新项目。麻烦的是,即使有了状态考虑,这样做会取消选择鼠标光标下的任何项目并重新触发更新。

可以创建竞争条件的示例天真方法可能是:

void mainwindow::on_comboBox_highlighted(const QString &arg1)
{
    delete port;
    ui->comboBox->clear();
    for (int i=0;i<QSerialPortInfo::availablePorts().length();i++){
        const QString comport=QSerialPortInfo::availablePorts()[i].portName();
        ui->comboBox->addItem(comport);
    }
    port = openport(getport());
}

在不产生竞争条件的情况下,检测与组合框的交互和更新组合框的方法是什么?

0 个答案:

没有答案
相关问题