gpt4 book ai didi

c++ - Qt QTreeWidget 一项一项添加

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:12 25 4
gpt4 key购买 nike

这是我的代码

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中(添加一个item,2秒后,再添加一个。)

但是,当我运行它时,我发现所有的 Item 在漫长的等待之后都被添加了一次。为什么?

如何按照我的想法添加那些items

最佳答案

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

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

关于c++ - Qt QTreeWidget 一项一项添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15193607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com