zoukankan      html  css  js  c++  java
  • Qt5使用connect连接信号和槽,编译构建无错,实际运行不会调用槽函数!!!!

    如题:使用串口发送文件,使用GUI配置文件写入下位机信息,组帧下发给下位机解析,解析成功后,下位机会在程序进入接受数据循环前发送响应给上位机,上位机接受响应下发文件,在mainwindow.h中自定义信号getinfo()和槽函数downloadfile()

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QSerialPort>
    #include <QSerialPortInfo>
    #include <QList>
    #include <QFileDialog>
    #include <QPushButton>
    #include <QLineEdit>
    #include <QDebug>
    #include <QProgressBar>
    #include <QDir>
    #include <QFileInfo>
    #include <QFile>
    #include <QComboBox>
    #include <QByteArray>
    #include <QMessageBox>
    #include <QDebug>
    #include <QTime>
    #include <QTimer>
    #include <QTextCodec>
    #include <QThread>
    #include <QTextDocument>
    
    quint32 swapInt32(quint32 value);
    quint32 QStringTo4ByteHex(QString source);
    unsigned char * SerportMsg(quint32 Addr,quint32 FileSize);
    
    namespace Ui {
        class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        QString filename;
        QTimer timer;
        void QDelay(quint32 msec);
    
    private slots:
        void on_btn_openConsole_clicked();
    
        void on_btn_clearRecv_clicked();
    
        void on_btn_clearSend_clicked();
    
        void readData();
    
        void on_fileBtn_clicked();
    
        void on_sendfileBtn_clicked();
    
    private:
        Ui::MainWindow *ui;
        QSerialPort *serial;
        QString buf;
    
    signals:
        void getinfo();//自定义信号
    
    public slots:
        void downloadFile();
    };
    
    #endif // MAINWINDOW_H

    MainWindow.cpp中读取下位机发送的数据,分析响应,若是握手信号,接受框显示信息,若为文件数据帧响应则将发送getinfo()信号

    void  MainWindow::readData()
    {
        //QString buf;
        buf = serial->read(1);
        ui->textEdit_recv->append(buf);
        //响应数据对比处理
        if(buf == "s")  //显示串口打开成功
        {
            ui->textEdit_recv->append("connect uart success!");
            buf.clear();
        }
    
        //文件发送
        if(buf == "S")
        {
            ui->textEdit_recv->append("ready to send signal!");
            emit getinfo();
        }
    }
    void MainWindow::on_sendfileBtn_clicked()
    {
        QString filename = ui->File_LineEdit->text();
        QFile file(filename);
        quint32 FileSize = file.size();
    
        qDebug("FileSize is 0x%x",FileSize);
    
        //发数据命令:Addr+file_size
        QString addr = ui->AddrLineEdit->text();
        if(addr.length() > 8)
        {
            QMessageBox::critical(this,"critical","address range override,please rewrite!!!",
                                  QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
            return;
        }
    
        QByteArray tmp = addr.toLatin1();
        const char * lpo = tmp.data();
        quint32 ADDR;
        sscanf(lpo,"%x",&ADDR);
        qDebug("addr is %s",addr);
        qDebug("ADDR is 0x%x",ADDR);
    
        if(filename.isEmpty()|addr.isEmpty())
        {
            QMessageBox::critical(this,"critical",
                                  "please select bin file and configure the address",
                                  QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
        }
    
        //定义下发文件数据帧
        unsigned char *frame = SerportMsg(ADDR,FileSize);
        QByteArray bootInfo((char*)frame,12);
        serial->write(bootInfo);
        delete [] frame;
        connect(ui->sendfileBtn,SIGNAL(getinfo),this,SLOT(MainWindow::downloadFile()));
    }

    构建无错误,运行后出现下发数据帧,但不会执行槽函数downloadFile()!!!                                         --- 2019/10/24

                  

  • 相关阅读:
    [Android] 开源框架 xUtils HttpUtils 代理设置 (Temporary Redirect错误)
    [Android] 开源框架 Volley 自定义 Request
    [算法]——汉诺塔的递归深度
    [libwww-perl]——POST方法的使用
    [Go语言]从Docker源码学习Go——Interfaces
    [Linux]可用于管道操作的命令
    npoi 导出word中写入特殊字符
    thinkphp框架中使用PHPExcel,按模板导出excel
    Access导出csv 内容添加双引号 vba
    导出excel和PDF小结 vba
  • 原文地址:https://www.cnblogs.com/huhuhusanling/p/11733001.html
Copyright © 2011-2022 走看看