const QSerialPortInfo* serialPortInfo = nullptr;
bool PortManager::setPort(QString portName) {
const QList<QSerialPortInfo> infoList = QSerialPortInfo::availablePorts();
for (const QSerialPortInfo portInfo : infoList) {
if (portInfo.portName() == portName && serialPortInfo != &portInfo) {
serialPortInfo = &portInfo;
}
}
if (serialPortInfo != nullptr) {
if (portName != "" && serialPortInfo->isValid()) { //segmentation fault
if (serialPort->isOpen()) {
serialPort->close();
}
serialPort = new QSerialPort(*serialPortInfo, this);
if (serialPort->open(QIODevice::ReadWrite)) {
if (serialPort->clear()) {
if (serialPort->setBaudRate(QSerialPort::Baud38400, QSerialPort::AllDirections)
&& serialPort->setFlowControl(QSerialPort::NoFlowControl)
&& serialPort->setParity(QSerialPort::NoParity)) {
isPortSet = true;
}
.
.
.
这是我在 Linux 和 Windows 7 上都可以使用的代码。现在我正在 Windows 8 上对其进行测试,并且我在 this->serialPortInfo->isValid() (以及 serialPortInfo 的任何其他函数)上遇到了分段错误。任何特定 QSerialPortInfo 对象的所有数据都是“不可用的”(如调试器所述),在我看来,我没有使用它们的特权。在 Linux 上,我必须是 uupc(如果我没记错的话)组的成员才不会出现此类错误,但在 Windows 7 上我不必做任何事情。我以“管理员身份”运行 Qt Creator,但没有帮助;也许我必须以某种方式告诉它也以管理员身份运行 qmake?但这只是我的猜测,也许原因不同......