1.問題描述
想給QTableWidget添加QCheckBox,代碼如下,tableWidget->setCellWidget老是崩潰(0x0F954E63 (qwindows.dll)處(位於 QStockView.exe 中)引發的異常: 0xC0000005: ),我用的其他的tableWidget添加QCheckBox卻是正常的。搞了一天;
QCheckBox* pCheckBox = new QCheckBox(); pCheckBox->setFixedWidth(20); pCheckBox->setChecked(false); ui.tableWidgetHis->setCellWidget(rownum, colum++, pCheckBox);
最後咋輸出窗口發現提示了兩行錯誤;,意思是不能在不同的線程中去設置parent;才檢測了下,果然我下載數據是單獨的線程,下載數據線程去操作了界面線程,無法爲QCheckBox設置父類;
QObject::setParent: Cannot set parent, new parent is in a different thread
QObject::installEventFilter(): Cannot filter events for objects in a different thread.
2.解決辦法
用信號槽去連接信號和函數。在槽函數中去執行操作界面的創建;信號槽具有跨線程的執行的作用;
connect(this, &QStockView::SignalHisAnaLyzeFinsh, this,&QStockView::SlotHisAnaLyzeFinsh,Qt::QueuedConnection);
線程中發送信號,界面線程中執行槽函數;
關注QStockView,獲取股票軟件;