qt程序在终端中编译出现的问题,各位大佬,请问这怎么解决呢???
clientthread.cpp: In member function ‘void ClientThread::deng_send_work1()’:
clientthread.cpp:360:64: error: no matching function for call to ‘QTimer::singleShot(int, ClientThread*, ClientThread::deng_send_work1()::<lambda()>)’
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
^
In file included from /usr/include/qt4/QtCore/QTimer:1:0,
from clientthread.h:7,
from clientthread.cpp:1:
/usr/include/qt4/QtCore/qtimer.h:78:17: note: candidate: static void QTimer::singleShot(int, QObject*, const char*)
static void singleShot(int msec, QObject *receiver, const char *member);
^
/usr/include/qt4/QtCore/qtimer.h:78:17: note: no known conversion for argument 3 from ‘ClientThread::deng_send_work1()::<lambda()>’ to ‘const char*’
这种情况建议把代码贴出来吧。
我猜测是不是slot写法有问题,看起来在终端里是qt4
将
QTimer::singleShot(time, this, &deng_send_work1);
改成
QTimer::singleShot(time, this, SLOT(deng_send_work1()));
编译器版本5+,在qt中运行没有问题,但是在终端中就出现问题了
#include "clientthread.h"
#include <QDebug>
#include <QThread>
#include <QMessageBox>
extern bool Flag_shan;
extern bool Flag_deng_bed,Flag_fu_bed_deng;
extern bool flag_deng;
extern bool flag_men;
extern bool flag_chuang;
extern bool flag_yanwu,flag_reshuiqi;
extern bool flag_chuanglian;
extern QString cl_zhuangtai;
extern QString wendu,shidu;
extern bool flag_all,flag_bing;
ClientThread::ClientThread(QObject *parent) : QObject(parent)
{
}
void ClientThread::client_work()
{
qDebug()<<"tcp00线程"<<QThread::currentThreadId();
myClient=new QTcpSocket(this);
servIp ="39.97.254.40" ;
servPort = "8890";
this->client_bing();
}
void ClientThread::client_bing()
{
myClient->connectToHost(QHostAddress(servIp),servPort.toUInt());
connect(myClient,SIGNAL(connected()),
this,SLOT(doProcessConnected()));
connect(myClient,SIGNAL(readyRead()),
this,SLOT(doProcessReadyRead()));
connect(myClient,SIGNAL(disconnected()),
this,SLOT(doProcessDisconnected()));
connect(myClient,SIGNAL(error(QAbstractSocket::SocketError)),
this,SLOT(doProcessError(QAbstractSocket::SocketError)));
}
void ClientThread::doProcessConnected()
{
flag_bing=true;
QString msg=QString("连接服务器成功");
qDebug()<<msg;
qDebug()<<"++++++++++++++++++++++";
m_timer0 = new QTimer(this);
connect(m_timer0,SIGNAL(timeout()),this,SLOT(client_send()));
m_timer0->start(500);
}
void ClientThread::doProcessReadyRead()
{
QString msg,msg1,str_read;
QStringList str_list;
str_read.clear();
str_list.clear();
msg1 = QString("服务器 [%1:%2] 说:")
.arg(myClient->peerAddress().toString())
.arg(myClient->peerPort());
while (!myClient->atEnd()) {
str_read.append(QString(myClient->readAll()));
}
msg=QString("%1%2").arg(msg1).arg(str_read);
// qDebug()<<msg;
str_read.replace("\n","");
str_read.replace("\r","");
str_list=str_read.split("#"); //灯#主卧灯#客房灯#阳台窗#窗帘#门#风扇#热水器#温度#湿度#烟雾浓度
// 0---1-----2-----3-----4--5---6----7----8----9----10
wendu=str_list[8];
emit wendu_00();
shidu=str_list[9];
emit shidu_00();
if(str_list[10]=="0")
this->thread_work_yanwu_0();
if(str_list[10]=="1")
this->thread_work_yanwu_1();
if(!flag_all)
{
if(str_list[0]=="0")
this->thread_work00();
if(str_list[0]=="1")
this->thread_work01();
if(str_list[1]=="0")
this->thread_work10();
if(str_list[1]=="1")
this->thread_work11();
if(str_list[2]=="0")
this->thread_work20();
if(str_list[2]=="1")
this->thread_work21();
if(str_list[3]=="0")
this->thread_work30();
if(str_list[3]=="1")
this->thread_work31();
if(str_list[4]=="0")
this->thread_work40();
if(str_list[4]=="1")
this->thread_work41();
if(str_list[5]=="0")
this->thread_work50();
if(str_list[5]=="1")
this->thread_work51();
if(str_list[6]=="0")
this->thread_work60();
if(str_list[6]=="1")
this->thread_work61();
if(str_list[7]=="0")
this->thread_work70();
if(str_list[7]=="1")
this->thread_work71();
}
}
void ClientThread::doProcessDisconnected()
{
QString msg="服务期退出!";
qDebug()<<msg;
QMessageBox::StandardButton rb = QMessageBox::warning(NULL,"警告!","服务器已退出,是否重连?",QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
if(rb==QMessageBox::Yes)
{
myClient->connectToHost(QHostAddress(servIp),servPort.toUInt());
}
}
void ClientThread::doProcessError(QAbstractSocket::SocketError)
{
QString msg ="服务器连接错误,可能网络问题或这服务器没开!";
qDebug()<<msg;
QMessageBox::StandardButton rb = QMessageBox::warning(NULL,"警告!","服务器连接错误,是否重连?",
QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
if(rb==QMessageBox::Yes)
{
// this->client_bing();
myClient->connectToHost(QHostAddress(servIp),servPort.toUInt());
}
}
void ClientThread::client_send()
{
QString str="iHome_All";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
}
void ClientThread::thread_work00()
{
if(flag_deng)
{
flag_deng=false;
emit deng_00();
}
}
void ClientThread::thread_work01()
{
if(!flag_deng)
{
flag_deng=true;
emit deng_00();
}
}
void ClientThread::thread_work10()
{
if(Flag_deng_bed)
{
Flag_deng_bed=false;
emit deng_bed_00();
}
}
void ClientThread::thread_work11()
{
if(!Flag_deng_bed)
{
Flag_deng_bed=true;
emit deng_bed_00();
}
}
void ClientThread::thread_work20()
{
if(Flag_fu_bed_deng)
{
Flag_fu_bed_deng=false;
emit fu_bed_deng_00();
}
}
void ClientThread::thread_work21()
{
if(!Flag_fu_bed_deng)
{
Flag_fu_bed_deng=true;
emit fu_bed_deng_00();
}
}
void ClientThread::thread_work30()
{
if(flag_chuang)
{
flag_chuang=false;
emit chuang_00();
}
}
void ClientThread::thread_work31()
{
if(!flag_chuang)
{
flag_chuang=true;
emit chuang_00();
}
}
void ClientThread::thread_work40()
{
if(flag_chuanglian)
{
flag_chuanglian=false;
cl_zhuangtai="窗帘已关!";
emit chuanglian_00();
}
}
void ClientThread::thread_work41()
{
if(!flag_chuanglian)
{
flag_chuanglian=true;
cl_zhuangtai="窗帘已开";
emit chuanglian_00();
}
}
void ClientThread::thread_work50()
{
if(flag_men)
{
flag_men=false;
emit men_00();
}
}
void ClientThread::thread_work51()
{
if(!flag_men)
{
flag_men=true;
emit men_00();
}
}
void ClientThread::thread_work60()
{
if(Flag_shan)
{
Flag_shan=false;
emit shan_00();
}
}
void ClientThread::thread_work61()
{
if(!Flag_shan)
{
Flag_shan=true;
emit shan_00();
}
}
void ClientThread::thread_work70()
{
if(flag_reshuiqi)
{
flag_reshuiqi=false;
emit reshuiqi_00();
}
}
void ClientThread::thread_work71()
{
if(!flag_reshuiqi)
{
flag_reshuiqi=true;
emit reshuiqi_00();
}
}
void ClientThread::thread_work_yanwu_0()
{
if(flag_yanwu)
{
flag_yanwu=false;
emit yanwu_00();
}
}
void ClientThread::thread_work_yanwu_1()
{
if(!flag_yanwu)
{
flag_yanwu=true;
emit yanwu_00();
}
}
void ClientThread::deng_send_work0()
{
m_timer0->stop();
QString str="iHome_ctrl#light_0";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
qDebug()<<"++++++++++++++++++++++";
flag_all=false;
}
void ClientThread::deng_send_work1()
{
m_timer0->stop();
QString str="iHome_ctrl#light_1";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
qDebug()<<"++++++++++++++++++++++";
flag_all=false;
}
void ClientThread::bed_deng_send_work0()
{
m_timer0->stop();
QString str="iHome_ctrl#light1_0";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
qDebug()<<"++++++++++++++++++++++";
flag_all=false;
}
void ClientThread::bed_deng_send_work1()
{
m_timer0->stop();
QString str="iHome_ctrl#light1_1";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::fu_bed_deng_send_work0()
{
m_timer0->stop();
QString str="iHome_ctrl#light2_0";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::fu_bed_deng_send_work1()
{
m_timer0->stop();
QString str="iHome_ctrl#light2_1";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::chuang_send_work0()
{
m_timer0->stop();
QString str="iHome_ctrl#window_0";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::chuang_send_work1()
{
m_timer0->stop();
QString str="iHome_ctrl#window_1";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::chuanglian_send_work0()
{
m_timer0->stop();
QString str="iHome_ctrl#lian_0";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::chuanglian_send_work1()
{
m_timer0->stop();
QString str="iHome_ctrl#lian_1";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::men_send_work0()
{
m_timer0->stop();
QString str="iHome_ctrl#door_0";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::men_send_work1()
{
m_timer0->stop();
QString str="iHome_ctrl#door_1";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::shan_send_work0()
{
m_timer0->stop();
QString str="iHome_ctrl#fun_0";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::shan_send_work1()
{
m_timer0->stop();
QString str="iHome_ctrl#fun_1";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::reshuiqi_send_work0()
{
m_timer0->stop();
QString str="iHome_ctrl#water_0";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
void ClientThread::reshuiqi_send_work1()
{
m_timer0->stop();
QString str="iHome_ctrl#water_1";
str.append("\r\n");
int ret=myClient->write(str.toStdString().c_str());
if(ret<=0)
return;
QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
flag_all=false;
}
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632