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

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

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

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

QString localHostName=QHostInfo::localHostName();

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

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

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

foreach(QHostAddress address,infoaddresses())

{

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

qDebug()<<addresstoString();

}

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

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

通过

ui->printAgeingTableView->setIndexWidget(standardItemModel->index(i, 5), interval);

添加控件后,获取内容。

获取内容方式:将控件还原,然后再去拿取,不能当做QStandardItem进行 *** 作,否则无法拿到内容。

((QLabel )ui->printAgeingTableView->indexWidget(model->index(var,1)))->text();

这里原本控件是QLabel,还原后再拿取。

一、文件下载

文件下载地址:

也可以下载我上传到网盘上的:

二、文件内容介绍

1下载到的文件为qextserialport-12win-alpha ,解压并打开后其内容如下。

(点击可以查看清晰大图)

下面分别介绍:

(1)doc文件夹中的文件内容是QextSerialPort类和QextBaseType的简单的说明,我们可以使用记事本程序将它们打开。

(2)examples文件夹中是几个例子程序,可以看一下它的源码,不过想运行它们好像会出很多问题啊。

(3)html文件夹中是QextSerialPort类的使用文档。

(4)然后就是剩下的几个文件了。其中qextserialenumeratorcpp及qextserialenumeratorh文件中定

义的QextSerialEnumerator类是用来获取平台上可用的串口信息的。不过,这个类好像并不怎么好用,而且它不是我们关注的重点,所以下面

就不再介绍它了。

(5)qextserialbasecpp和qextserialbaseh文件定义了一个QextSerialBase

类,win_qextserialportcpp和win_qextserialporth文件定义了一个Win_QextSerialPort

类,posix_qextserialportcpp和posix_qextserialporth文件定义了一个

Posix_QextSerialPort类,qextserialportcpp和qextserialporth文件定义了一个

QextSerialPort类。这个QextSerialPort类就是我们上面所说的那个,它是所有这些类的子类,是最高的抽象,它屏蔽了平台特征,

使得在任何平台上都可以使用它。

2几个类的简单介绍。

下面是这几个类的关系图。

可以看到它们都继承自QIODevice类,所以该类的一些函数我们也可以直接来使用。图中还有一个QextBaseType类,其实它只是一个标

识,没有具体的内容,它用来表示Win_QextSerialPort或Posix_QextSerialPort

中的一个类,因为在QextSerialPort类中使用了条件编译,所以QextSerialPort类既可以继承自

Win_QextSerialPort类,也可以继承自Posix_QextSerialPort类,所以使用了QextBaseType来表示。这一点

我们可以在qextserialporth文件中看到。再说QextSerialPort类,其实它只是为了方便程序的跨平台编译,使用它可以在不同的

平台上,根据不同的条件编译继承不同的类。所以它只是一个抽象,提供了几个构造函数而已,并没有具体的内容。在qextserialporth文件中的

条件编译内容如下:

#ifdef_TTY_POSIX_

#include“posix_qextserialporth”

#define QextBaseTypePosix_QextSerialPort

#else

#include“win_qextserialporth”

#define QextBaseTypeWin_QextSerialPort

#endif

所以,其实我们没有必要使用这个类,直接使用Win_QextSerialPort或Posix_QextSerialPort就可以了。当然如果

你想使用这个类,实现同样的源程序可以直接在Windows和Linux下编译运行,那么一定要注意在Linux下这里需要添加

#define _TTY_POSIX_ 。而我们这里为了使得程序更明了,所以没有使用该类,下面也就不再介绍它了。

QextSerialBase类继承自QIODevice类,它提供了 *** 作串口所必需的一些变量和函数等,而

Win_QextSerialPort和Posix_QextSerialPort均继承自QextSerialBase

类,Win_QextSerialPort类添加了Windows平台下 *** 作串口的一些功能,Posix_QextSerialPort类添加了

Linux平台下 *** 作串口的一些功能。所以说,在Windows下我们使用Win_QextSerialPort类,在Linux下我们使用

Posix_QextSerialPort类。

3在QextSerialBase类中还涉及到了一个枚举变量QueryMode。

它有两个值Polling和EventDriven

。QueryMode指的是读取串口的方式,下面我们称为查询模式,我们将Polling称为查询方式Polling,将EventDriven称为事件驱动方式。

事件驱动方式EventDriven就是使用事件处理串口的读取,一旦有数据到来,就会发出readyRead()信号,我们可以关联该信号来读取串口的数据。在事件驱动的方式下,串口的读写是异步的,调用读写函数会立即返回,它们不会冻结调用线程。

而查询方式Polling则不同,读写函数是同步执行的,信号不能工作在这种模式下,而且有些功能也无法实现。但是这种模式下的开销较小。我们需要自己建立定时器来读取串口的数据。

在Windows下支持以上两种模式,而在Linux下只支持Polling模式。

三、小结。

这里讲了这么多,最后要说的只是,我们在Qt中使用这个类编写串口程序,根据平台的不同只需要分别使用四个文件。

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

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

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 位索引存储到颜色表中,即每个像素只有一个字节。颜色表是 QVector<QRgb> , 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 指定每行的字节数(跨度)。

华开发

原创

关注

2点赞·1821人阅读

Qt程序编写完成后,我们应该怎么给其他人安装呢?其实我们只需要知道Qt程序所依赖的动态库就可以直接拷贝将exe和动态库拷贝到其他人电脑上直接运行(也就是传说中的绿色免安装版)。Qt所依赖的动态库我们通过部署来获取。Qt程序部署有两种方式,一种通过QtCreator获取,另外一种是在cmd窗口使用windeployqt命令获取。

1QtCreator部署exe程序

我们首先新建一个Test工程(如果对如何创建工程不清楚可参考Qt第一个例程)。

首先我们先不部署看一下生成目录中包含哪些文件。

在该文件夹中实际上只有Textexe有用,其他都为中间文件可以删除。

接下来我们看如何使用QtCreator部署程序。新建完成后构建->部署项目”Test”按钮是不可用状态,需要我们先设置一下部署流程。

点击左侧项目按钮,主窗口切换到构建界面。再次点击左侧Run按钮,主窗口就切换到运行设置界面。在此界面,点击添加部署步骤,选择自定义处理步骤。

在命令编辑框可以输入windeployqt。

在参数编辑框中点击右侧的A->B按钮。

这时会d出参数的一个选择界面。在这个地方我选择了CurrentRun:Executable:FilePath这个参数。在界面下方我们可以看到这个参数代表的是E:/qt/build-Test-Desktop_Qt_5_11_2_MSVC2017_64bit-Debug/debug/Test,也就是执行程序所在路径和执行程序的名称。

但实际上我们还需要在该参数后面加个exe,表示这是执行文件。在有的版本中可以找到直接带exe的参数,但本人使用的Qt 5112中没有找到。如果有知道的朋友可以留言告知一下。

到这个时候我们的部署步骤就添加完成。接下来我们再找到编辑界面。只需点击左侧的编辑按钮即可。

然后在项目上右键点击,选择部署按钮。

在编译输出窗口看到以下信息说明部署完成。

接下来我们再看一下构建目录下的文件。这个时候我们发现这个目录下会多出很多dll文件。这就是我们执行文件所以来的动态库。我们把这个文件夹拷贝给用户,用户点击exe就可以运行了。但这种方式有个弊端就是会有很多中间文件,比如mainobg,mainwindowobj等。我们需要把这些文件删除或者写个脚本删除这个文件。

2cmd窗口部署exe程序

在cmd窗口部署exe程序之前,我们需要将windeployqt所在路径配置到环境变量中。

右键点击计算机,选择属性,d出下面的对话框,选择高级系统设置。

在系统属性中选择高级->环境变量。

选择系统变量的Path变量,点击编辑。

将windeployqt所在路径添加到变量值中(需要注意要在路径前添加;)。Windeployqt默认路径为C:\Qt\Qt5112\5112\msvc2017_64\bin。C:是我的Qt安装盘符,这个需要根据大家自己的路径选择。msvc2017_64是我使用的编译器。每个编译器下都有自己的Windeployqt。添加完成后点击确定按钮。准备工作已经做完了,我们可以开始部署程序。

首先我们将exe程序单独拷贝的一个文件夹中。

我们使用快捷键win+R打开运行界面,输入cmd点击回车。

还有另外一种方法是直接在文件夹路径位置输入cmd,点击回车。

这时打开的路径就是exe所在路径,否则需要先跳转到exe所在路径。

在cmd窗口输入windeployqt Testexe,然后点击回车。

看到如下信息就说明部署已经完成。我们只需要将此文件夹拷贝给用户即可。

3总结

Qt程序部署看似两种方法其实核心是一致的,都是调用windeployqt生成所需动态库,只不过是使用Qt Creator方法配置完成后只需点击按钮即可,更为方便一些。

以上就是关于QT怎么获取某个网络端口信号来源的IP地址,并可以在已有的数据库中搜索该IP地址含有的信息,用哪些语句全部的内容,包括:QT怎么获取某个网络端口信号来源的IP地址,并可以在已有的数据库中搜索该IP地址含有的信息,用哪些语句、如何获取qt动态生成控件的数据、如何在QT中读取串口数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9555475.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存