【发布时间】:2015-08-21 08:10:08
【问题描述】:
我对 qt 信号槽感到困惑。我使用了以下连接,但它连接到另一个插槽。
void MainWindow::on_otpburndata1Btn_Rd_clicked()
{
if(serialPort->clear(serialPort->AllDirections)){
QByteArray otpburndata1ord;
otpburndata1ord.resize(3);
otpburndata1ord[2]=0x02;
otpburndata1ord[1]=0x08;
otpburndata1ord[0]=0x1D;
serialPort->write(otpburndata1ord.data(),3);
connect(serialPort,SIGNAL(readyRead()),this,SLOT(receiveOtpBurnData1()));
}
}
void MainWindow::receiveOtpBurnData1(){
QByteArray otpburndata1;
otpburndata1.resize(1);
if(serialPort->bytesAvailable()==1){
otpburndata1 = serialPort->readAll();
if(otpburndata1[0]&0x01){
ui->OTP_DATA0->setStyleSheet("background-color:red");
ui->OTP_DATA0->setText("1");
flagThree[0]=1;
}else{
ui->OTP_DATA0->setStyleSheet("background-color:rgb(170, 255, 127)");
ui->OTP_DATA0->setText("0");
flagThree[0]=0;
}
...
...
...
}
}
因为我在这个 on_otpburndata1Btn_Rd_clicked() 函数之前使用了另一个函数。当我单击按钮:otpburndata1Btn_Rd 时,它从端口读取数据,但连接到另一个插槽 otprddata1Received(),而不是正确的插槽 receiveOtpBurnData1()。之前的代码如下:
void MainWindow::on_otprddata1Btn_clicked()
{
if(serialPort->clear(serialPort->AllDirections)){
QByteArray otprdata1ord;
otprdata1ord.resize(3);
otprdata1ord[0]=0x9D;
otprdata1ord[1]=0x00;
otprdata1ord[2]=0x02;
serialPort->write(otprdata1ord.data(),3);
connect(serialPort,SIGNAL(readyRead()),this,SLOT(otprddata1Received()));
}
}
void MainWindow::otprddata1Received(){
QByteArray otprdata1;
otprdata1.resize(1);
if(serialPort->bytesAvailable()==1){
otprdata1 = serialPort->readAll();
if(otprdata1[0]&0x01){
ui->OTP_RD_DATA0->setStyleSheet("background-color:red");
ui->OTP_RD_DATA0->setText("1");
}else{
ui->OTP_RD_DATA0->setStyleSheet("background-color:rgb(170, 255, 127)");
ui->OTP_RD_DATA0->setText("0");
}
....
}
【问题讨论】:
-
在connect中改变slot后,你是否重新生成了moc文件? moc_MainWindow::qt_static_metacall 是什么样的?
-
您是否尝试过干净重建(删除构建目录)?我认为,您在每次点击
otpburndata1Btn_Rd按钮时都会创建一个信号槽连接。为什么那里需要信号连接? -
右键单击项目并清理,然后右键单击项目并运行 qmake,然后构建所有内容,作为一般建议,我认为最好在开始发送数据之前连接插槽
-
我重读了readyRead()的细节,它说当有新数据可供读取时,它会发出信号readyRead()。我认为问题就在这里。我需要,当点击不同的阅读按钮时,它会显示在不同的分组框上。
标签: c++ qt signals-slots