QSerialPortInfo
を使って接続されているシリアルポートデバイスの一覧から
接続したい対象のデバイスを探し出して、見つけたらQSerialPort::open
を使ってデバイスと接続する
という処理を行っています。
c++
1 // 接続されているシリアルポートデバイスの一覧から検索。 2 for(const QSerialPortInfo &serial_port: QSerialPortInfo::availablePorts()) 3 { 4 // メーカー名から検索。 5 if("tyometyome" == serial_port.manufacturer()) 6 { 7 device_serial_port_->setPortName(serial_port.portName()); 8 9 if(!device_serial_port_->open(QIODevice::ReadWrite)) 10 { 11 qDebug() << device_serial_port_->error(); 12 device_serial_port_->close(); 13 } 14 else 15 { 16 // 成功 17 } 18 break; 19 } 20 }
この際に、デバイスは見つかったがQSerialPort::open
で失敗したのか
単純にデバイスが見つからなかったのかでエラー表示を分けたいなと思ったのですが
素直に実装するならループが最後まで回ったら見つからなかったという処理にすれば良いので
if("tyometyome" == serial_port.manufacturer())
に入った時点で適当なフラグを立てればいいと思ったのですが
どこかのサイトで、今時の高級言語であればやたらにフラグを使わずとも大体は実装できる
というような文を見たのを思い出したので
もしかしたら、「ループが最後まで回ったか?」というようなステータスを取得できる処理がC++の標準やQtにあるのでは?
と思ったので質問させてもらいました
自分なりに検索はしてみたのですがそれっぽいものは見当たらなかったで無いのかなとは思ったのですが
最後に皆様に聞いてみようと思い質問させてもらいました
よろしくお願いします。
###追記
コードを修正してみました
C++
1 QList<QSerialPortInfo> port_list = QSerialPortInfo::availablePorts(); 2 3 // 接続されているシリアルポートデバイスの一覧からメーカー名と一致するものを検索 4 auto find_result = std::find_if(port_list.begin(), port_list.end(), [](QSerialPortInfo port){ return "tyometyome" == port.manufacturer(); }); 5 if(port_list.end() == find_result) 6 { 7 // 見つからなかった 8 } 9 else 10 { 11 device_serial_port_->setPortName(find_result->portName()); 12 13 if(!device_serial_port_->open(QIODevice::ReadWrite)) 14 { 15 qDebug() << device_serial_port_->error(); 16 device_serial_port_->close(); 17 } 18 else 19 { 20 // 成功 21 } 22 }
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/18 01:26