Qt QTreeWidget逐个添加项目



这是我的代码

QList<QString> IPs;  //IP address
...
connect(this, SIGNAL(addItems(QTreeWidgetItem*)), this, 
              SLOT(addNewItemToTree(QTreeWidgetItem*)));
void MainWindow::startPing()
{        
    for (int i = ipStart; i <= ipEnd; i++)
    {           
        QTreeWidgetItem *item = new QTreeWidgetItem();
        item->setText(0, IPs.at(i));
        if (PingHost(IPs.at(i)))
        {
            item->setText(1, "online");
        }
        else
        {
            item->setText(1, "offline");
        }
        emit addItems(item);
    }
}
void MainWindow::addNewItemToTree(QTreeWidgetItem *item)
{
    items.append(item);
    ui->treeWidget->addTopLevelItem(item);
}

PingHost是一个函数,它的运行时间可能超过2秒。

我编译并运行了这个程序,没有任何错误或警告。

我认为item会依次添加到treeWidget中(添加一项,2秒后再添加一项)

但是,当我运行它时,我发现经过长时间的等待,所有的Item已经添加了一次。为什么?

如何使那些items添加为我的想法?

您阻塞GUI线程的时间太长了。理想情况下,您应该在另一个线程中执行PingHost,并且在PingHost中,当结果可用时发送一个信号。然后在主窗口中有一个插槽,当接收到信号时可以添加项目。

如果您坚持做您现在正在做的事情,您可以尝试在每个循环结束时更新treeWidget。看到QWidget::更新()

相关内容

  • 没有找到相关文章

最新更新