我正在尝试使用Qtv5.1.1中新包含的QtSerialPort,但在编译时遇到了一些问题,而我对这些问题几乎没有经验。从我的搜索来看,qt5.1中的QtSerialPort似乎还没有构建并准备好使用,对吗?我将如何使用或Visual 2010来准备它?我最近刚从4.8.4升级到继承了这个项目,所以我不知道之前做了什么。我已经找到了使用各种Linux版本编译的说明,但是Windows似乎没有一致或简单的说明,所以我希望这里的人有一些更具体的说明。
谢谢!
编辑:我会添加一个或两个特定的错误,也许这将有助于识别我做错了什么。
error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall QSerialPort::metaObject(void)const " (?metaObject@QSerialPort@@UBEPBUQMetaObject@@XZ)
error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QSerialPort::QSerialPort(class QObject *)" (__imp_??0QSerialPort@@QAE@PAVQObject@@@Z) referenced in function "public: __thiscall serial_client::serial_client(class QObject *)" (??0serial_client@@QAE@PAVQObject@@@Z)这只是编译时出现的21个错误中的两个。正如我在注释中提到的,VisualStudio2010或QtSerialPort似乎都不认识QtSerialPort库。
发布于 2013-11-13 01:48:15
好吧,在尝试了一堆不同的东西之后,结合了来自不同地方的信息,我设法把所有的事情都搞清楚了,并开始工作了。
当然,它不能工作的原因很简单,该模块没有通过Qt5插件包含到Visual中,这是因为它没有显示为可用的模块。另一个问题是,我没有安装QT5.1.1并安装了源代码依赖项,我只是选择了默认安装,它不包括所需的QtSerialPort。重新安装之后,我在以下位置修改了我的VS项目设置:
注:$(QTDIR) = C:\Qt\Qt5.1.1\5.1.1\msvc2010_opengl\
之后,我将Qt5SerialPort.dll和Qt5SerialPortd.dll分别添加到项目中的Release文件夹中。
我很肯定这是我唯一的改变。我希望这对别人有用!
发布于 2013-11-08 06:25:37
我用Qt5.0.2和QSerialPort做了一个小项目,它在Linux和Windows /7上运行得很好。在Linux上编译它是很麻烦的,因为所有的库都已经准备好了。要在Windows上编译它,我使用安装在Windows上的QtCreator (而不是Visual )(没有交叉编译)。
首先,您必须检查,如果QtCreator能够找到QSerialPort,那么它实际上已经可以在QtCreator下编译它了。要部署该程序,必须确保所有使用过的QtLibraries都已就位。最简单的方法就是把这个目录和你的程序放在同一个目录中。对于我的程序,如下所示:
- -qminimal.dll
- -qwindows.dll
- icudt51.dll
- icuin51.dll
- icuuc51.dll
- libEGL.dll
- libGLESv2.dll
- Qt5Core.dll
- Qt5Gui.dll
- Qt5SerialPort.dll
- Qt5Widgets.dll
应该注意,使用的dll与编译器!32位vs 64位相匹配,并匹配使用过的编译器(MinGW或Visual编译器)。
打开我的串口的代码片段:
void::openSerialPort(){ Settings p;/*使用来自Combobox */ p.name =ui->cboComPort->currentText()的ComPort名称;p.baudRate = 38400;p.dataBits =QSerialPort::Data8 8;p.parity = QSerialPort::NoParity;p.stopBits = QSerialPort::OneStop;p.flowControl = QSerialPort::NoFlowControl;p.stringBaudRate = "38400";p.stringDataBits = "8";p.stringParity =tr(“没有奇偶”);p.stringFlowControl =tr(“无流控制”);p.stringStopBits = tr("1位停止“);串行->setPortName(p.name);if (串行->打开(QIODevice::ReadW区)){ if (串行->setBaudRate(p.baudRate)&serial>setDataBits(p.dataBits)&Seri->setParity(p.parity)&serial>setStopBits(p.stopBits) && serial>setFlowControl(p.flowControl)){//控制台->setEnabled(真);//console->setLocalEchoEnabled(p.localEchoEnabled);ui->actionConnect->setEnabled(false);ui->actionDisconnect>setEnabled(真);ui->actionCon图->setEnabled(False);ui->statusBar->显示消息(tr(“连接到%1:%2,%3,%4,%5,%6") .arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits) .arg(p.stringStopBits).arg(p.stringParity).arg(p.stringFlowControl));{串行->关闭();QMessageBox::危急(此,tr(“错误”),序列->错误serial();ui->statusBar->显示消息(tr(“配置错误”));} else {QMessageBox::危急(此,tr(“错误”),串行->错误serial();ui->statusBar->showMessage(tr("Open error"));}
https://stackoverflow.com/questions/19847783
复制相似问题