しばらく試してみましたが、あまり情報が見つからなかったので、一般的ではないようです。
アイテムを配置する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;
}
多分私は何かが足りないのですか、それとも単純にスレッドを再接続できないのですか?
ありがとう