/*Copyright © 2017 Hasan Yavuz ÖzderyaThis file is part of serialplot.serialplot is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.serialplot is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with serialplot. If not, see <http://www.gnu.org/licenses/>.*/#include <QVariant>#include <QIcon>#include <QtDebug>#include "portlist.h"PortListItem::PortListItem(QString name, QString description, quint16 vid, quint16 pid){construct(name, description, vid, pid);}PortListItem::PortListItem(QSerialPortInfo* portInfo){if (portInfo->hasProductIdentifier()){construct(portInfo->portName(),portInfo->description(),portInfo->vendorIdentifier(),portInfo->productIdentifier());}else{construct(portInfo->portName());}}void PortListItem::construct(QString name, QString description, quint16 vid, quint16 pid){QString text = name;if (!description.isEmpty()){text += QString(" ") + description;}// Note: in some cases internal ports or RS232 ports may have VID&PIDif (vid && pid && !name.contains("tty")){text += QString("[%1:").arg(vid, 4, 16, QChar('0'));text += QString("%1]").arg(pid, 4, 16, QChar('0'));setIcon(QIcon(":/usb_icon.png"));}else if (name.contains("rfcomm")){setIcon(QIcon(":/bluetooth_icon.png"));}else{setIcon(QIcon(":/rs232_icon.png"));}setText(text);setData(name, PortNameRole);}QString PortListItem::portName(){return data(PortNameRole).toString();}PortList::PortList(QObject* parent) :QStandardItemModel(parent){loadPortList();// we have to use macro based notation to be able to disconnectQObject::connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)),this, SLOT(onRowsInserted(QModelIndex, int, int)));}void PortList::loadPortList(){clear();disconnect(this, SLOT(onRowsInserted(QModelIndex,int,int)));for (auto portInfo : QSerialPortInfo::availablePorts()){appendRow(new PortListItem(&portInfo));}for (auto portName : userEnteredPorts){appendRow(new PortListItem(portName));}QObject::connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)),this, SLOT(onRowsInserted(QModelIndex, int, int)));}int PortList::indexOf(QString portText){for (int i = 0; i < rowCount(); i++){if (item(i)->text() == portText){return i;}}return -1; // not found}int PortList::indexOfName(QString portName){for (int i = 0; i < rowCount(); i++){if (item(i)->data(PortNameRole) == portName){return i;}}return -1; // not found}void PortList::onRowsInserted(QModelIndex parent, int start, int end){PortListItem* newItem = static_cast<PortListItem*>(item(start));QString portName = newItem->text();newItem->setData(portName, PortNameRole);userEnteredPorts << portName;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。