【问题标题】:Send a signal when a USB serial cable is unplugged拔下 USB 串行电缆时发送信号
【发布时间】:2013-10-04 06:19:22
【问题描述】:

有没有使用 Qt 发送信号的方法,或任何其他方法来判断 USB 串行电缆是否已拔出?

【问题讨论】:

    标签: c++ qt qtcore qt-signals qtserialport


    【解决方案1】:

    isValid() 现已过时。可以使用 isBusy() 代替,因为它会在您打开端口时返回 true,而在端口不再存在时返回 false(并且您仍然打开它)。当availablePorts() 不断返回不存在但已打开的端口时也是这种情况,因为您通过打开端口将其保留在列表中。

    【讨论】:

      【解决方案2】:

      使用QSerialPortInfo会达到效果:

      bool MyClass::checkPort()
      {
          QSerialPortInfo *portInfo = new QSerialPortInfo(ui->serialDevice->currentText());
          // ui->serialDevice being a combobox of available serial ports
      
          if (portInfo->isValid())
          {
              return true;
          }
          else
          {
              return false;
          }
      }
      

      【讨论】:

        【解决方案3】:

        您可以在 QtSerialPort 插件中使用 QSerialPort 类的error 信号。请参阅我们的文档中的详细信息。

        http://qt-project.org/doc/qt-5.1/qtserialport/qserialport.html#error-prop

        你基本上需要这样写:

        connect(mySerialPort, SIGNAL(error(QSerialPort::SerialPortError)), this,
                SLOT(handleError(QSerialPort::SerialPortError)));
        
        ...
        
        void MyClass::handleError(QSerialPort::SerialPortError error)
        {
            if (error == QSerialPort::ResourceError) {
                QMessageBox::critical(this, tr("Critical Error"), serial->errorString());
                closeSerialPort();
            }
        }
        

        QtSerialPort 可以通过 Qt 5.1 轻松安装,因为软件包是分发的。但是,我们确保 QtSerialPort 可以与之前的版本一起使用,包括 Qt 4.8.X。您可以在此处找到 Qt 4 的安装说明:

        • git clone git@gitorious.org:qt/qtserialport.git

        • cd qtserialport

        • qmake

        • 制作

        • sudo make install.

        然后,如果您碰巧使用 qmake,您将需要在您的 qmake 项目文件中添加以下行:

        Qt 5: QT += serialport
        Qt 4: COMFIG += serialport
        

        【讨论】:

        • 终于找到了一个解决方案。实际上,我最终使用QSerialPortInfo 在使用端口之前对其进行验证。
        • 您为我指明了正确的方向。在尝试对开放端口进行任何操作之前,我只需要一些东西来验证串行端口是否已实际插入。我做了一些与我正在做的事情略有不同的事情。
        • 究竟是什么ResourceError?我偶尔会在一些串行端口通信的中间看到它,但我仍然能够在端口上发送和接收一些数据。 (我的通信层开始表现不佳,但似乎并没有完全损坏——一些有效的数据包仍然可以通过。)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-20
        • 2017-03-06
        • 1970-01-01
        • 2011-02-24
        • 1970-01-01
        相关资源
        最近更新 更多