1
這是我的代碼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
添加爲我的想法?
我改變了我的代碼。 – midCat 2013-03-04 02:46:24
所以startPing是在另一個線程? – zzk 2013-03-04 03:02:14
不,不是另一個線程 – midCat 2013-03-04 06:29:07