首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT未定义引用错误(Qextserialport)

QT未定义引用错误(Qextserialport)
EN

Stack Overflow用户
提问于 2014-04-16 00:28:55
回答 2查看 1.2K关注 0票数 0

我为找到了这段代码,并且是IDE中的新手,但我一直试图让这段代码运行。我看到的主要错误是与Qextserialport相关的类似错误的大约12个实例。

C:\Users\Hassman\Downloads\aQtLow\aQtLow\dtransferusb.cpp:

错误:对`QextSerialPort::QextSerialPort(QextSerialPort::QueryMode,QObject*)'的未定义引用

我不知道该怎么办,我有点不知所措。我正在运行QTCreator 5.1.1,我想可能存在兼容性问题,但是请有人帮我一下。也许我没有正确地把标题链接到我的文件上?如有任何建议,将不胜感激!

代码语言:javascript
复制
#include "dtransferusb.h"
#include <QDebug>
#include <QByteArray>
#include "C:/Users/Hassman/Downloads/aQtLow/aQtLow/qextserialport/src/qextserialport.h"
#include "C:/Users/Hassman/Downloads/aQtLow/aQtLow/qextserialport/src/qextserialport_p.h"
#include "globals.h"

dtransferusb::dtransferusb(QObject *parent) :
QThread(parent)
{


}

void dtransferusb::run()
{
   SerPort= new QextSerialPort();
    int ExpectedLength = NUMBER_OF_REGISTERS * 2 + NUMBER_OF_COILS / 8 + 1;
    QTime Startup, Sleeper;
    Startup.start();
    while(!Shutdown)
    {
        if(SerPort->isOpen())
        {//the port is open so check for data
            Sleeper.start();
            while((ExpectingResponse > 0) && (SerPort->bytesAvailable() < ExpectedLength))
            {
                msleep(25);
                if(Sleeper.elapsed() > 5000) break;
            }
                if(SerPort->bytesAvailable() >= ExpectedLength)
            {//data found
                Receive(ExpectedLength);
            }
            else
            {                  
                if((ExpectingResponse > 2) && (Startup.elapsed() > 15000))
            {
                qDebug() << "DTxfrUsb " << QString::number(Cfg.DTxfrUsb) << " finds the lack of expected response utterly demoralizing " << SerPort->portName() << " " << QDateTime::currentDateTime().toString(TIMESTAMP_FORMAT);
                P[Cfg.Prc].CommFailure();
                ExpectingResponse = 0;
                SerPort->close();
                Sleeper.start();
                while(Sleeper.elapsed() < 1000) msleep(100);
            }
            else
            {
                if(!WriteRequest())
                {
                    Send(1,0,0); //Function 1 siginfies "gimme data"
                }
            }
        }
    }
    else
    {//need to open the port
        SerPort->reset();
        SerPort->setPortName(Cfg.Port);
        SerPort->setBaudRate(BAUD9600);
        SerPort->setDataBits(DATA_8);
        SerPort->setStopBits(STOP_1);
        SerPort->setFlowControl(FLOW_OFF);
        SerPort->setParity(PAR_NONE);
        SerPort->setTimeout(1000);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-16 00:39:09

QextSerialPort是一个不属于官方Qt项目的第三方库。您可以在https://code.google.com/p/qextserialport/找到它--您需要分别安装QextSerialPort。

一些额外的注释:

  • 由于您是新来的,我建议您改用QT5.2.1。它在QT5.1.1上有许多新特性和bug修复。
  • "Qt“是IDE的名称,"Qt”是库的名称。IDE的当前版本是Qt 3.1,库的当前版本是QT5.2.1。
  • Qt有自己的内置QSerialPort类,如果您想编写自己的代码,我建议您使用这个类。
票数 2
EN

Stack Overflow用户

发布于 2017-02-06 05:39:06

(1)要在应用程序中使用这些类,请使用以下include语句:

代码语言:javascript
复制
 #include <QtSerialPort/QtSerialPort>

(2)要链接到模块,请将这一行添加到qmake .pro文件中:

代码语言:javascript
复制
 QT += serialport

Qt串口文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23096888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档