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 от имени администратора? Но это только мое предположение, может причина в другом...