請問各位大佬,小弟有個問題,就是現在有兩個類,A和B,A類是GUI層,B類是一個邏輯處理層,B類向A類發信號,A類回應并處理,現在的問題是有時候B類發送了信號但是A類不處理并且導致A類假死,小弟實在不知道該怎么辦了。下面是我的代碼的刪減版:
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
init();
}
void Dialog::init()
{
Qt::WindowFlags flags = Qt::Dialog;
flags |= Qt::FramelessWindowHint;
setWindowFlags(flags);
ui->abbFileBtn->setEnabled(false);
ui->exportBtn->setEnabled(false);
ui->ExpInd->setEnabled(false);
ui->verifyBtn->setEnabled(false);
MasterInterFace::getInstancePtr()->init();
connect(MasterInterFace::getInstancePtr(),SIGNAL(sigInitApiFinish(bool,const QString &))
,this,SLOT(onApiInited(bool ,const QString &)));
connect(MasterInterFace::getInstancePtr(),SIGNAL(sigVerify(const QString&,const QVariant &))
,this,SLOT(onVerifyInfo(const QString & ,const QVariant &)), Qt::QueuedConnection);
}
MasterInterFace::getInstancePtr()是邏輯層的單例模式。
void Dialog::onVerifyInfo(const QString &filePath, const QVariant &var)
{
qDebug()<<"onVerifyInfo ";
signatureInfo info = var.value<signatureInfo>();
signatureInfo newInfo;
if(m_translateVerifyInfo == NULL)
{
m_translateVerifyInfo = new TranslateVerifyInfo;
}
m_translateVerifyInfo->translateVerifyInfo(info,newInfo);
if(m_fileItemMap.contains(filePath))
{
FileItemWidget *widget =m_fileItemMap[filePath];////
widget->setIconVerify(newInfo.iconUrl,newInfo.verifyRet,newInfo.errorMsg);
widget->setSignatureInfo(newInfo);
}
}
這個FileItemWidget類是繼承QFrame的子類。verifyMsg是一個繼承QPushButton的控制元件。
void MasterInterFace::startVerify(QStringList fileList)
{
m_controlPtr = new MasterControlVerify;
connect(m_controlPtr, SIGNAL(sigVerifyFinish(const QString& ,const QVariant &)),
this, SLOT(onVerify(const QString& ,const QVariant & )), Qt::DirectConnection);
// connect(m_controlPtr, SIGNAL(sigVerifyAllFinish()),this, SLOT(onVerifyAllFinished()), Qt::DirectConnection);
m_controlPtr->startWorking(fileList, "");
m_controlPtr->wait();
emit sigVerifyAllFinish();
delete m_controlPtr;
}
這個MasterInterFace類的startVerify方法會發送sigVerifyFinish信號,然后這個邏輯層再通過槽函式中的信號發送給GUI層,呼叫onVerifyInfo。
void MasterInterFace::onVerify(const QString &filePath, const QVariant &var)
{
emit sigVerify(filePath, var);
qDebug()<<"emit sigVerify(filePath, var);";
}
現在的問題是這個邏輯層發送的信號GUI層有時接收不到,造成假死,還有,GUI的connect的第五個引數填Qt::DirectConnection的話會報圖片上的錯誤,小弟是真的沒辦法了,不僅菜的要死而且總被罵,希望各位大佬幫我一手,感謝!
uj5u.com熱心網友回復:
哦對了,MasterControlVerify是一個執行緒,繼承QThread轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/235814.html
標籤:C++ 語言
