0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术Linux主板Qt网络应用程序简介

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-17 09:42 次阅读

Linux中的网络编程是通过socket接口来进行的。我们常说的socket接口是一种特殊的I/O,它也是一种文件描述符,关于socket编程的应用可以参考英创公司光盘中使用必读的相关内容。

现在在英创公司提供的例程Step3_TCPServe基础上,加入Qt显示单元,使其能通过显示屏进行操作,基本的思想是还是利用Qt的信号和插槽机制进行对象间的通讯,当接收到的数据的时候,发出Signal,Qt 的事件循环中接收到这个信号,调用定义好的Slot显示接收到的数据。

Step3_TCPServe是一个支持多个客户端的连接TCPServer示例,该例程采用了面向对象的C++编程,创建了CTCPServer和CTCPCustom两个类,其中CTCPServer类负责侦听客户端的连接,一旦有客户端请求连接,它就负责接受此连接,并创建一个新的CTCPCustom类对象与客户端进行通讯,然后CTCPServer类接着监听客户端的连接请求,所以需要让CTCPServer类和CTCPCustom类继承QObject类的属性,使QObject成为CTCPServer类和CTCPCustom类的基类,然后在CTCPServer类和CTCPCustom类中各加入一个signal,让CTCPServer类和CTCPCustom类的信号关联,这样当CTCPCustom类发出信号CTCPServer类也会发出信号,再让CTCPServer类的信号和Qt显示通过信号和插槽的机制连接,但是对于网络通信的操作部分并不用做修改,原理如下图:

继承QObject类的属性,加入信号和槽的方法在《英创Linux主板Qt串口应用程序简介》中有较详细的说明,在CTCPCustom类中,添加的方法也一样,当判断接收到数据时,发送信号,添加程序:

emit pSocket->readyRead(pSocket->RecvBuf);

在前面提到,在CTCPServer类中,当判断有客户端请求连接时,会创建一个CTCPCustom类对象与客户端进行通讯,这时再将CTCPServer类和CTCPCustom类的信号关联:

connect(pClientSocket,SIGNAL(readyRead(QString)),pSocket,SIGNAL(readyRead(QString)));

在Qt中,将两个信号关联,如同上面那样,当pSocket中的信号发送时,pClientSocket中的信号也会跟着发送。

最后在显示窗口Widget类中,将CTCPServer类的信号和显示槽函数关联:

connect(m_TCPServer,SIGNAL(readyRead(QString)),this,SLOT(readData(QString)),Qt::QueuedConnection);

然后可以在显示界面中添加了一些其他功能组件,比如按钮等,然后编写组件的事件响应函数,实现想要的功能,在本例程中,添加了一些按钮和显示,用来选择启动TCPServer,显示IP和端口号等,部分实现代码如下:

void Widget::on_startpushButton_clicked() //侦听按钮
{
char buff_1[16],buff_2[16];
m_TCPServer=new CTCPServer;
m_TCPServer->m_LocalPort = 1001;
if((m_TCPServer->Open())<0)
{
QMessageBox::information(this,tr('错误'),tr('创建失败'),QMessageBox::Yes);
delete m_TCPServer;
return;
}
connect(m_TCPServer,SIGNAL(readyRead(QString)),this,SLOT(readData(QString)),Qt::QueuedConnection); //关联信号和槽
ui->startpushButton->setEnabled(false);
ui->textBrowser_3->setEnabled(true);
QString s=QString::number(m_TCPServer->m_LocalPort,10);
ui->textBrowser_3->insertPlainText(s); //显示端口号
ui->textBrowser_2->setEnabled(true);
if((m_TCPServer->get_inetip('eth0',buff_1))==0)
{
//显示eth0的IP地址
ui->textBrowser_2->append( QString(QLatin1String(buff_1)));
}
if((m_TCPServer->get_inetip('eth1',buff_2))==0)
{
//显示eth1的IP地址
ui->textBrowser_2->append( QString(QLatin1String(buff_2)));
}
ui->closepushButton->setEnabled(true);
}

最后在工程中添加main.cpp,在main函数中,主要是对字体进行设置,并且显示我们设计的窗口:

int main( int argc,char* argv[] )
{
QApplication a(argc, argv);
QFont font('simsun',9,QFont::Bold); //设置字体
QTextCodec::setCodecForTr(QTextCodec::codecForName('utf8'));
a.setFont(font);
Widget w;
w.show();
return a.exec(); //返回Qt事件循环
}

程序运行效果:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10943

    浏览量

    206545
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6060

    浏览量

    34567
收藏 人收藏

    评论

    相关推荐

    FPGA板子可以跑Qt应用程序

    Qt作为一款跨平台GUI图形界面设计软件,她可以在windows、Linux上运行,没听说过在FPGA的板子上运行Qt程序呢?
    发表于 03-28 23:27

    适用于Linux的QRadioLink SDR客户应用程序

    QRadioLink 是一个 GNU/Linux 多模(模拟和数字)SDR(软件定义无线电)收发器应用程序,利用网络实现电台与 VOIP 桥接(IP 上的电台),它建立在 GNU 电台之上,允许使用不同的数字和模拟无线电信号以及
    的头像 发表于 01-11 11:04 258次阅读
    适用于<b class='flag-5'>Linux</b>的QRadioLink SDR客户<b class='flag-5'>应用程序</b>

    嵌入式Linux应用程序开发详解-第3章

    电子发烧友网站提供《嵌入式Linux应用程序开发详解-第3章.pdf》资料免费下载
    发表于 11-16 11:19 0次下载
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>应用程序</b>开发详解-第3章

    嵌入式Linux应用程序开发详解-第2章

    电子发烧友网站提供《嵌入式Linux应用程序开发详解-第2章.pdf》资料免费下载
    发表于 11-16 11:18 0次下载
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>应用程序</b>开发详解-第2章

    嵌入式Linux应用程序开发详解-第1章

    电子发烧友网站提供《嵌入式Linux应用程序开发详解-第1章.pdf》资料免费下载
    发表于 11-16 11:17 0次下载
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>应用程序</b>开发详解-第1章

    Rust GUI实践之Rust-Qt模块

    开发者创建高质量的应用程序,包括图形界面、网络、数据库等方面。 Rust-Qt 的优势在于 Rust 语言的安全性和高性能,以及 Qt 框架的强大功能和跨平台性。使用 Rust-
    的头像 发表于 09-30 16:43 888次阅读

    信息技术是干什么?

    广播电子技术信息技术
    橙群微电子
    发布于 :2023年09月22日 09:17:48

    Qt For OpenHarmony

    设计、Qt跨平台适配上有多年的技术积累和经验,开源书籍QmlBook-in-Chinese在github上star数达到1000+,现任职于软通动力信息技术(集团)股份有限公司,担任成都图形框架研究院软件开发
    发表于 09-15 15:39

    峰会回顾第29期 | Qt For OpenHarmony

    基于Qt的软件框架搭建,参与Qt开源社区Bug维护及修改,在基于Qt框架的软件架构设计、Qt跨平台适配上有多年的技术积累和经验,开源书籍Qm
    的头像 发表于 09-07 08:45 592次阅读
    峰会回顾第29期 | <b class='flag-5'>Qt</b> For OpenHarmony

    OneCommand Manager应用程序Linux

    电子发烧友网站提供《OneCommand Manager应用程序Linux版.pdf》资料免费下载
    发表于 08-15 14:44 0次下载
    OneCommand Manager<b class='flag-5'>应用程序</b><b class='flag-5'>Linux</b>版

    基于AMD SOC的QT应用程序开发

    基于AMD SOC的QT应用程序开发方法主要有两种方式:一种方式是基于petalinux工程新建一个application将源码导入在使用petalinux-build进行编译部署
    的头像 发表于 08-04 15:52 585次阅读
    基于AMD SOC的<b class='flag-5'>QT</b><b class='flag-5'>应用程序</b>开发

    使用GDB调试Linux应用程序

    本篇讲解使用GDB调试Linux应用程序,以下以 `hellowld.c` 为例介绍 GDB 的调试入门。
    发表于 06-27 15:48 330次阅读

    imx6qasbresd运行Qt5 GUI 应用程序面临分段错误怎么解决?

    我正在使用带有 BSP 版本 5.10.7.2 和 vivante 版本 6.4.3 的 imx6qasbresd 板,我正在使用 X11 显示服务器。我正在尝试运行 Qt5 GUI 应用程序或普通
    发表于 05-30 10:21

    Qt6应用程序的CPU使用率高是什么原因造成的?怎么解决?

    我正在使用 Qt6 应用程序,它使用 GPU 的 vivante 驱动程序,我正在使用 Linux BSP 版本 5.10.175 和 imx-gpu-viv 版本 6.4.3。
    发表于 05-29 07:39

    i.mx8M Plus执行QT应用程序有错误信息怎么解决?

    i.mx8M Plus 执行 QT 应用程序有错误信息
    发表于 04-21 07:34