向QtableWidget中添加自定義widget崩潰異常: 0xC0000005

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,獲取股票軟件;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章