qt 端口复用_qt端口扫描

hacker|
145

用qt怎么编写与USB口的通信程序啊,我要在电脑上接一个USB的扫描枪,怎么和它通信?有没有什么资料可查?

如果是linux系统,而且已经有驱动的话,可以直接使用linux的文件读写操作

QT怎么获取某个网络端口信号来源的IP地址,并可以在已有的数据库中搜索该IP地址含有的信息,用哪些语句?

1。QHostInfo类获取主机名和ip地址

(1)获取主机名: QHostInfo::localHostName()

QString localHostName=QHostInfo::localHostName();

(2)获取ip地址: QHostInfo info=QHostInfo::fromName(localHostName);//根据上边获得的主机名来获取本机的信息

info.addresses();//QHostInfo的address函数获取本机ip地址

如果存在多条ip地址ipv4和ipv6:

foreach(QHostAddress address,info.addresses())

{

if(address.protocol()==QAbstractSocket::IPv4P)//只取ipv4协议的地址

qDebug()address.toString();

}

如果是ipv6地址,可以使用QAbstractSocket::ipv6Protocol来实现。

QHostAddress类是管理ip地址的类,所有的ip都归这个类管理。

Qt 想利用qt在Linux下开发一个测试程序,实现,wifi 的开关和扫描,列出附近所有的可用W

目的是让消费者可以透过更简单的方式来设定无线网络装置,并且保证有一定的安全性。当前WPS允许透过Pin Input Config(PIN)、Push Button Config(PBC)、USB Flash Drive Config(UFD)以及Near Field Communication 、Contactless Token Config(NFC)的方式来设定无线网络装置。

*ASD(Application Specific Device):这是针对除了无线网络存取点(Access Point)及站台(Station)之外其他有特殊应用的无线网络装置,例如DVD播放器、投影机、打印机等等。

*CWG(Converged Wireless Group):主要是针对Wi-Fi mobile converged devices 的RF 部分测量的测试程序。

信道频点

信道频点(MHz)

1 2412

2 2417

3 2422

4 2427

5 2432

6 2437

7 2442

8 2447

9 2452

10 2457

11 2462

12 2467

13 2472

14 2484

QT开发(五十)——QT串口编程基础

一、QtSerialPort简介

1、串口通信基础

目前使用最广泛的串口为DB9接口,适用于较近距离的通信。一般小于10米。DB9接口有9个针脚。

串口通信的主要参数如下:

A、波特率:衡量通信速度的参数,表示每秒钟传送的bit的个数。例如9600波特表示每秒钟发送9600个bit。

B、数据位:衡量通信中实际数据位的参数,当计算机发送一个信息包,实际包含的有效数据位个数。

C、停止位:用于表示单个包的最后一位。典型的值为1和2位。

D、奇偶校验位:串口通信中一种检错方式。常用的检错方式有:偶、奇校验。

2、QtSerialPort模块简介

QtSerialPort模块是QT5中附加模块的一个模块,为硬件和虚拟的串口提供统一的接口。

串口由于其简单和可靠,目前在像嵌入式系统、机器人等工业中依旧用得很多。使用QtSerialPort模块,开发者可以大大缩短开发串口相关的应用程的周期。

Qt SerialPort提供了基本的功能,包括配置、I/O操作、获取和设置RS-232引脚的信号。

Qt SerialPort模块暂不支持以下特性:

A、终端的特性,例如回显,控制CR/LF等等

B、文本模式

C、读或写操作的超时和延时配置

D、当RS-232引脚信号变化通知

#include QtSerialPort/QtSerialPort

要链接QtSerialPort模块,需要在.pro文件中添加如下内容:

QT += serialport

二、QSerialPort

1、QSerialPort简介

QSerialPort提供了访问串口的接口函数。使用辅助类QSerialPortInfo可以获取可用的串口信息。将QSerialPortInfo辅助类对象做为参数,使用setPort()或setPortName()函数可以设置要访问的串口设备。

设置好端口后,可以使用open()函数以只读、只写或读写的模式打开使用。

注意,串口使用独占方式打开。

使用close()函数关闭串口并且取消IO操作。

串口成功打开后,QSerialPort会尝试确定串口的当前配置并初始化。可以使用setBaudRate()、setDataBits()、setParity()、setStopBits()和setFlowControl()函数重新配置端口设置。

有一对名为QSerialPort::dataTerminalReady、QSerialPort::requestToSend的属性

QSerialPort提供了中止正在调用线程直到信号触发的一系列函数。这些函数用于阻塞串口。

waitForReadyRead():阻塞调用,直到有新的数据可读

waitForBytesWritten():阻塞调用,直到数据以及写入串口

阻塞串口编程与非阻塞串口编程完全不同。阻塞串口不会要求时间循环并且通常会简化代码。然而,在GUI程序中,为了避免冻结用户界面,阻塞串口编程只能用于非GUI线程。

QSerialPort也能使用QTextStream和QDataStream的流操作符。在试图使用流操作符读时,需要确保有足够可用的数据。

2、QSerialPort成员函数

QSerialPort::QSerialPort(QObject *parent = Q_NULLPTR)

QSerialPort::QSerialPort(const QString name, QObject *parent = Q_NULLPTR)

QSerialPort::QSerialPort(const QSerialPortInfo serialPortInfo, QObject *parent = Q_NULLPTR)

[virtual] bool QSerialPort::atEnd() const

[signal] void QSerialPort::baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)

[virtual] qint64 QSerialPort::bytesAvailable() const

[virtual] qint64 QSerialPort::bytesToWrite() const

[virtual] void QSerialPort::close()

void QSerialPort::setPort(const QSerialPortInfo serialPortInfo)

void QSerialPort::setPortName(const QString name)

三、QSerialPortInfo

1、QSerialPortInfo简介

QSerialPortInfo类提供已有串口设备的信息。使用QSerialPortInfo类的静态成员函数生成QSerialPortInfo对象的链表。链表中的每个QSerialPortInfo对象代表一个串口,每个串口可以使用端口名、系统定位、描述、制造商查询。QSerialPortInfo类对象也可以用做QSerialPort类的setPort()成员函数的参数。

2、QSerialPortInfo成员函数

QSerialPortInfo::QSerialPortInfo(const QSerialPort port)

QSerialPortInfo::QSerialPortInfo(const QString name)

QSerialPortInfo::QSerialPortInfo(const QSerialPortInfo other)

[static] QListQSerialPortInfo QSerialPortInfo::availablePorts()

QString QSerialPortInfo::description() const

bool QSerialPortInfo::hasProductIdentifier() const

bool QSerialPortInfo::hasVendorIdentifier() const

bool QSerialPortInfo::isBusy() const

QString QSerialPortInfo::manufacturer() const

QString QSerialPortInfo::portName() const

quint16 QSerialPortInfo::productIdentifier() const

QString QSerialPortInfo::serialNumber() const

[static] QListqint32 QSerialPortInfo::standardBaudRates()

void QSerialPortInfo::swap(QSerialPortInfo other)

QString QSerialPortInfo::systemLocation() const

quint16 QSerialPortInfo::vendorIdentifier() const

3、QSerialPortInfo显示串口信息实例

qt中如何添加can虚拟串口

当然你的虚拟串口在系统中是识别为COM口的,需要扫描一下。参考下面的comboBox信号槽函数。

void UpdateDialog::on_comboBox_currentIndexChanged(const QString arg1)

{

   QSerialPortInfo info;

   QListQSerialPortInfo infos = QSerialPortInfo::availablePorts();

   int i = 0;

   foreach (info, infos) {

       if(info.portName() == arg1) break;

       i++;

   }

   if(i != infos.size ()){//can find

       serial.close();

       serial.setPort(info);

       serial.setFlowControl(QSerialPort::NoFlowControl);//设置为无流控制

   }

   else

   {

       serial.close();

       ui-label-setText("[出错]");

   }

}

Qt 之 QImage

QImage 类提供了独立于硬件的图像表示形式,该图像表示形式可以直接访问像素数据,并且可以用作绘图设备。因为 QImage 是 QPaintDevice 子类,所以可以使用 QPainter 直接在图像上绘制。在 QImage 上使用 QPainter 时,可以在当前 GUI 线程以外的其他线程中执行绘制。

QImage 类支持 Format 枚举描述的几种图像格式。这些包括单色,8 位,32 位和 alpha 混合图像,可在所有 Qt 4.x 版本中使用。

QImage 提供了一组函数,这些函数可用于获取有关图像的各种信息。还有一些函数可以实现图像变换。由于 QImage 类使用 implicit data sharing ,因此可以按值传递 QImage 对象。 QImage对象也可以流式传输和比较。

读取和写入图片的操作与 QPixmap 相同。具体参考 Qt 之 QPixmap 。

QImage 提供了一组函数,这些函数可用于获取有关图像的各种信息:

用于处理图像像素的函数取决于图像格式。原因是单色和 8 位图像基于索引并使用颜色查找表,而 32 位图像直接存储 ARGB 值。有关图像格式的更多信息,请参见 Image Formats 部分。

对于32位图像,可以使用 setPixel() 函数将给定坐标处的像素颜色更改为指定为 ARGB 四联体的任何其他颜色。要生成合适的 QRgb 值,请使用 qRgb() (向给定的 RGB 值添加默认的 alpha 分量,即创建不透明的颜色)或 qRgba() 函数。 例如:

如果是8位和单色图像,则像素值只是图像颜色表中的索引。因此, setPixel() 函数只能用于将给定坐标处的像素颜色更改为图像颜色表中的预定义颜色,即只能更改像素的索引值。要将颜色更改或添加到图像的颜色表中,请使用 setColor() 函数。

颜色表中的一项是编码为QRgb值的ARGB四联体。使用 qRgb() 和 qRgba() 函数可以为 setColor() 函数使用一个合适的 QRgb 值。例如:

对于每个颜色通道超过8位的图像。 setPixelColor() 和 pixelColor() 方法可用于设置和获取 QColor 值。

QImage 还提供了 scanLine() 函数,该函数返回具有给定索引的扫描线处的像素数据的指针,而 bits() 函数,其返回指向第一个像素数据的指针(这等效于 scanLine(0) )。

QImage 中存储的每个像素都由整数表示。整数的大小取决于格式。 QImage 支持 Format 枚举描述的几种图像格式。

单色图像使用1位索引存储到最多具有两种颜色的颜色表中。单色图像有两种不同类型:大字节序(MSB优先)或小字节序(LSB优先)。

8位图像使用 8 位索引存储到颜色表中,即每个像素只有一个字节。颜色表是 QVectorQRgb , QRgb typedef 等效于一个无符号整数,其中包含格式为 0xAARRGGBB 的 ARGB 四元组。

32位图像没有颜色表;相反,每个像素都包含一个QRgb值。分别存储RGB(即0xffRRGGBB),ARGB和预乘ARGB值的三种不同类型的32位图像。在预乘格式中,红色,绿色和蓝色通道乘以除以255的alpha分量。

可以使用 format() 函数检索图像的格式。使用 convertToFormat() 函数可将图像转换为另一种格式。 allGray() 和 isGrayscale() 函数说明是否可以安全地将彩色图像转换为灰度图像。

QImage支持许多用于创建新图像的功能,该图像是原始图像的转换版本: createAlphaMask() 函数从该图像的alpha缓冲区生成并返回一个1-bpp蒙版,而 createHeuristicMask() 函数创建并返回此图像的1-bpp启发式蒙版。后一种功能的工作方式是从一个角中选择一种颜色,然后从所有边缘开始切去该颜色的像素。

mirrored() 函数沿所需方向返回图像的镜像, scaled() 返回按比例缩放至所需度量的矩形的图像副本, rgbSwapped() 函数根据RGB图像构造BGR图像。

scaledToWidth() 和 scaledToHeight() 函数返回图像的缩放副本。

transformd() 函数返回使用给定的转换矩阵和转换模式转换的图像的副本:在内部,调整转换矩阵以补偿不必要的平移,即 transform() 返回包含图像所有转换点的最小图像。原始图像。静态 trueMatrix() 函数返回用于转换图像的实际矩阵。

构造具有给定 width , height 和 format 的图像。

如果无法分配内存,将返回 null 图像。

警告:这将创建一个具有未初始化数据的 QImage 。在使用 QPainter 绘制图像之前,调用 fill() 用适当的像素值填充图像。

构造具有给定 width , height 和 format 的图像,该图像使用现有的内存缓冲区 data 。 width , height 必须以像素为单位指定, data 必须是32位对齐的,并且图像中数据的每条扫描线也必须是32位对齐的。

缓冲区必须在 QImage 的整个生命周期内以及所有未修改或与原始缓冲区分离的副本中保持有效。映像不会删除销毁的缓冲区。您可以提供一个函数指针 cleanupFunction 以及一个额外的指针 cleanupInfo ,该指针将在销毁最后一个副本时被调用。

如果 format 是索引颜色格式,则图像颜色表最初为空,必须在使用图像之前使用 setColorCount() 或 setColorTable() 进行充分扩展。

构造具有给定宽度,高度和格式的图像,该图像使用现有的内存缓冲区 data 。宽度和高度必须以像素为单位指定。 bytesPerLine 指定每行的字节数(跨度)。

0条大神的评论

发表评论