Я пробовал это некоторое время, и кажется, что это не что-то общее, поскольку я не нашел много информации.QThread, создающий элемент виджета GUI в потоке
У меня есть QTree, в который я положил элемент, на моем элементе у меня есть флажок в первом столбце.
Проблема: флажок не оптимизирован для того, чтобы его обрабатывали так, и занимает довольно много времени, как только имеется несколько элементов.
Так что я использую поток для создания флажка перед тем, как вставлять в свой список, но кажется невозможным вернуть флажок в поток графического интерфейса.
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;
}
Может быть, я что-то отсутствует, или это просто не представляется возможным прикрепить нить?
Thanks
Почему вам действительно нужно создать виджет в потоке? не проще ли создавать данные, которые вам нужны в потоке, и сигнализировать gui, что исходные данные готовы и могут быть использованы для создания нового ui, который необходим? – Zlatomir
Это не обработка данных, требующая времени, но создание флажка: m_check = new QCheckBox(); – Damien
Что вы делаете, если создали этот флажок? вы добавляете его в treewidget ?? – UmNyobe