gpt4 book ai didi

c++ - QSerialPort 在开发环境之外运行时崩溃

转载 作者:行者123 更新时间:2023-11-28 02:34:38 25 4
gpt4 key购买 nike

我有一个相当简单的程序可以运行,找到连接到计算机的所有串行端口,并将它们打印到 GUI 屏幕上。现在,这段代码在 Qt Creator 中运行时运行良好,但是一旦我尝试获取可执行文件并将其与 dll 一起作为独立程序运行,我就会崩溃。我正在运行 Qt 5.3 和 MSVC2013,32 位。计算机正在运行 windows 7 32 位。

这是我正在运行的代码示例:

void ApplicationWindow::findComPorts(){
qDebug() << "find com ports selected";
QString comText;
QString messageText = "locating com ports";
int i = 0;
comText = "Locating Com Ports:";
QMessageBox msg;
msg.setText(messageText);
msg.exec();
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
i++;
messageText = "locating com port " + QString::number(i);
msg.setText(messageText);
msg.exec();

comText = comText + "\nName: ";
comText = comText + info.portName();
comText = comText + "\nDescription: ";
comText = comText + info.description;
comText = comText + "\nManufacturer: ";
comText = comText + info.manufacturer();
comText = comText + "\n";

messageText = "Com port " + QString::number(i);
messageText = messageText + " located";
msg.setText(messageText);
msg.exec();
}
messageText = "All com ports located";
msg.setText(messageText);
msg.exec();
locatedComPorts->setText(comText); //locatedComPorts is type QLabel
//and is declared in the header and is a label on the main GUI box
}

在调试器中运行时,以上行具有以下输出:

内部调试器:

find com ports selected

弹出窗口(当前连接到计算机的单个 com 端口):

locating com ports

locating com port 1

Com port 1 located

All com ports located

当程序独立运行时,我得到以下弹出窗口:

locating com ports

locating com port 1

Com port 1 located

此时程序崩溃到桌面。

当前与该程序捆绑在一起的 DLL 包括:

icudt51.dll、icuin51.dll、icuuc51.dll、libEGL.dll、libGLESv2.dll、msvcp120.dll、msvcr120.dll、Qt5Core.dll、Qt5Gui.dll、Qt5SerialPort.dll 和 Qt5Widgets.dll

此外,还有一个名为“platforms”的子文件夹,其中包含 qwindows.dll

我不认为缺少任何 dll 可能会导致此问题,而且我不确定还有什么可能导致此问题。自从我遇到这个问题以来,我更改的唯一代码是添加消息框,这样我就可以确定程序在不使用调试器时崩溃的位置,所以它在添加 qmessagebox 之前崩溃了。有谁知道可能导致此特定问题的原因是什么?

最佳答案

我使用这个简单而稳定的代码:

QSerialPortInfo sinfo;
QList<QSerialPortInfo> slist = sinfo.availablePorts();

for(int i=0; i<slist.size(); i++)
{
QString name = slist[i].portName();
QSerialPort sp(name);
if( sp.open(QIODevice::ReadWrite) )
{
sp.close();
ui.comboBoxPort->addItem(name);
}
}

关于c++ - QSerialPort 在开发环境之外运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27926348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com