我已经尝试了一段时间,似乎这并不常见,因为我没有找到太多相关信息。
我有一个 QTree,我在其中放置项目,在我的项目上,我在第一列有一个复选框。
问题:复选框没有被优化为这样处理,只要有几个元素就需要相当长的时间。
所以我在放入我的列表之前使用一个线程来创建复选框,但似乎不可能让复选框回到 GUI 线程上。
void CheckItemThread::run()
{
setPriority(QThread::IdlePriority);
QCheckBox *m_check;
m_check = new QCheckBox();
emit done(m_check);
}
我的主线:
myCheckItem::myCheckItem(QTreeWidget *parent, QStringList columnNames ):
myWidgetItem(parent)
{
m_parent = parent;
m_columnNames = columnNames;
connect(&TheThread,SIGNAL(done(QCheckBox *)), this, SLOT(retThread(QCheckBox *)));
connect(&TheThread,SIGNAL(terminated()), this, SLOT(endThread()));
TheThread.setdata(columnNames,parent, this);
TheThread.start(); //run thread
}
void myCheckItem::endThread()
{
m_check->setParent(m_parent);
connect(m_check, SIGNAL(stateChanged(int)), this, SLOT(onCheckBox(int)));
}
void myCheckItem::retThread(QCheckBox *check)
{
m_check = check;
}
也许我遗漏了一些东西,或者重新连接线程很简单?
谢谢