QT 面试题汇总

这篇具有很好参考价值的文章主要介绍了QT 面试题汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、讲述Qt信号槽机制与优势与不足

优点: 类型安全需要关联的信号槽的签名必须是等同的。即信号的参数类型和参数个数同接受该信号的槽的参数类型和参数个数相同。若信号和槽签名不一致,编译器会报错。

          松散耦合信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无需知道是那个对象的那个信号槽接收它发出的信号,它只需在适当的时间发送适当的信号即可,而不需要关心是否被接受和那个对象接受了。Qt就保证了适当的槽得到了调用,即使关联的对象在运行时被删除。程序也不会奔溃。

         灵活性一个信号可以关联多个槽,或多个信号关联同一个槽。

不足:速度较慢。与回调函数相比,信号和槽机制运行速度比直接调用非虚函数慢10倍。

        原因:①需要定位接收信号的对象。②安全地遍历所有关联槽。③编组、解组传递参数。④多线程的时候,信号需要排队等待。然而,与创建对象的new操作及删除对象的delete操作相比,信号和槽的运行代价只是他们很少的一部分。信号和槽机制导致的这点性能损耗,对实时应用程序是可以忽略的。

二、Qt信号和槽的本质是什么 

        回调函数。信号或是传递值,或是传递动作变化;槽函数响应信号或是接收值,或者根据动作变化来做出对应操作。

三、描述QT中的文件流(QTextStream)和数据流(QDataStream)的区别

       文件流(QTextStream)。操作轻量级数据(int,double,QString)数据写入文本件中以后以文本的方式呈现。

       数据流(QDataStream)。通过数据流可以操作各种数据类型,包括对象,存储到文件中数据为二进制。

        文件流,数据流都可以操作磁盘文件,也可以操作内存数据。通过流对象可以将对象打包到内存,进行数据的传输。

四、描述QT的TCP通讯流程

服务端:(QTcpServer)

        ①创建QTcpServer对象

        ②监听list需要的参数是地址和端口号

        ③当有新的客户端连接成功回发送newConnect信号

        ④在newConnection信号槽函数中,调用nextPendingConnection函数获取新连接QTcpSocket对象

        ⑤连接QTcpSocket对象的readRead信号

        ⑥在readRead信号的槽函数使用read接收数据

        ⑦调用write成员函数发送数据

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    tcpServer = new QTcpServer;
    tcpServer->listen(QHostAddress("192.168.0.111"),1234);
    connect(tcpServer,SIGNAL(newConnection()),this,SLOT(new_connect()));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::new_connect()
{
    qDebug("--new connect--");
    QTcpSocket* tcpSocket = tcpServer->nextPendingConnection();
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(read_data()));
    socketArr.push_back(tcpSocket);

}

void Widget::read_data()
{
    for(int i=0; i<socketArr.size(); i++)
    {
        if(socketArr[i]->bytesAvailable())
        {
            char buf[256] = {};
            socketArr[i]->read(buf,sizeof(buf));
            qDebug("---read:%s---",buf);
        }
    }
}

客户端:(QTcpSocket)

        ①创建QTcpSocket对象

        ②当对象与Server连接成功时会发送connected 信号

        ③调用成员函数connectToHost连接服务器,需要的参数是地址和端口号

        ④connected信号的槽函数开启发送数据

        ⑤使用write发送数据,read接收数据

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    tcpSocket = new QTcpSocket;
    connect(tcpSocket,SIGNAL(connected()),this,SLOT(connect_success()));
    tcpSocket->connectToHost("172.20.10.3",1234);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_send_clicked()
{
    std::string msg = ui->msg->text().toStdString();
    int ret = tcpSocket->write(msg.c_str(),msg.size()+1);
    qDebug("--send:%d--",ret);
}

void Widget::connect_success()
{
    ui->send->setEnabled(true);
}

五、 描述UDP 之 UdpSocket通讯

           UDP(User Datagram Protocol即用户数据报协议)是一个轻量级的,不可靠的,面向数据报的无连接协议。在网络质量令人十分不满意的环境下,UDP协议数据包丢失严重。由于UDP的特性:它不属于连接型协议,因而具有资源消耗小处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。所以QQ这种对保密要求并不太高的聊天程序就是使用的UDP协议。

        在Qt中提供了QUdpSocket 类来进行UDP数据报(datagrams)的发送和接收。Socket简单地说,就是一个IP地址加一个port端口  。

        流程:①创建QUdpSocket套接字对象 ②如果需要接收数据,必须绑定端口 ③发送数据用writeDatagram,接收数据用 readDatagram 。

六、多线程使用使用方法

        方法一:①创建一个类从QThread类派生②在子线程类中重写 run 函数, 将处理操作写入该函数中 ③在主线程中创建子线程对象, 启动子线程, 调用start()函数

        方法二:①将业务处理抽象成一个业务类, 在该类中创建一个业务处理函数②在主线程中创建一QThread类对象 ③在主线程中创建一个业务类对象 ④将业务类对象移动到子线程中 ⑤在主线程中启动子线程 ⑥通过信号槽的方式, 执行业务类中的业务处理函数

多线程使用注意事项: 
* 1. 业务对象, 构造的时候不能指定父对象 
* 2. 子线程中不能处理ui窗口(ui相关的类) 
* 3. 子线程中只能处理一些数据相关的操作, 不能涉及窗口

七、多线程下,信号槽分别在什么线程中执行,如何控制

        可以通过connect的第五个参数进行控制信号槽执行时所在的线程

  connect有几种连接方式,直接连接和队列连接、自动连接

  直接连接(Qt::DirectConnection):信号槽在信号发出者所在的线程中执行

  队列连接 (Qt::QueuedConnection):信号在信号发出者所在的线程中执行,槽函数在信号接收者所在的线程中执行

  自动连接  (Qt::AutoConnection):多线程时为队列连接函数,单线程时为直接连接函数。文章来源地址https://www.toymoban.com/news/detail-402841.html

到了这里,关于QT 面试题汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Qt 性能优化】 理解与优化Qt信号槽机制 - 提升应用性能的关键策略

    【Qt 性能优化】 理解与优化Qt信号槽机制 - 提升应用性能的关键策略

    在这个科技日新月异的时代,软件开发不仅仅是编写代码,更是一种艺术。正如著名计算机科学家 Edsger Dijkstra 所说:“计算机科学并不仅仅关于机器,而是更多地关于人的智慧。” Qt框架,作为一个深受广大开发者喜爱的跨平台应用程序和用户界面开发框架,其核心机制之

    2024年02月20日
    浏览(22)
  • QT中信号与槽机制的介绍,以及信号与槽连接的几种方式

    功能:实现多个组件之间的相互通信,是QT引以为傲的核心机制 信号:就是信号函数,定义在类体的signals权限下,是一个不完整的函数,只有声明没有定义; 槽:就是槽函数,定义在类体的slots权限下,是一个完整的函数,既有声明也有定义,也可以当做普通函数被使用 无

    2024年02月10日
    浏览(14)
  • Qt6入门教程 8:信号和槽机制(连接方式)

    Qt6入门教程 8:信号和槽机制(连接方式)

    目录 一.一个信号与槽连接的例子 二.第五个参数 1.Qt::AutoConnection 2.Qt::DirectConnection 3.Qt::QueuedConnection 4.Qt::BlockingQueuedConnection 5.Qt::UniqueConnection 三.信号 四.connect函数原型 五.信号与槽的多种用法 六.槽的属性 在调用a.setValue(12)时会发送valueChanged(12)信号,此时槽函数b.setValue(12)会

    2024年01月17日
    浏览(13)
  • Qt子窗口给父窗口传值(信号与槽机制)

    Qt子窗口给父窗口传值(信号与槽机制)

    1、父窗口和子窗口名称介绍 父窗口:Test_7 子窗口:testnew 2、父窗口与子窗口内容介绍 子窗口:声明信号、发送信号 父窗口:声明槽函数,定义槽函数,connect连接 3、在父窗口中(Test_7.cpp),完整代码如下: 4、父窗口中(Test_7.h),完整代码如下:  5、子窗口(testnew.cp

    2024年02月11日
    浏览(12)
  • QT 面试题汇总

    一、讲述Qt信号槽机制与优势与不足 优点:   ① 类型安全 。 需要关联的信号槽的签名必须是等同的。即信号的参数类型和参数个数同接受该信号的槽的参数类型和参数个数相同。若信号和槽签名不一致,编译器会报错。            ② 松散耦合 。 信号和槽机制减弱了Qt对

    2023年04月08日
    浏览(12)
  • 搜索引擎:优势与不足一览

    搜索引擎:优势与不足一览

    搜索引擎,作为互联网时代最重要的工具之一,给用户提供了便捷的信息检索和知识获取途径。然而,随着技术的发展和应用的普及,用户逐渐意识到搜索引擎也存在一些不足之处。本文将从多个角度探讨搜索引擎的优势与不足,并为用户提供一些有益的建议。 【优势1】海

    2024年02月04日
    浏览(48)
  • 【python】软件开发——PyQt5、Qt Designer、信号与槽机制、计算器实现

    【python】软件开发——PyQt5、Qt Designer、信号与槽机制、计算器实现

    PyQt5 是一个基于 Python 的 GUI 框架,用于创建跨平台的桌面应用程序。它是 Qt 库的 Python 绑定,结合了 Python 的简洁和易用性以及 Qt 框架的强大功能。 Qt 是一个流行的 C++ 跨平台应用程序开发框架,提供了丰富的图形界面组件、网络通信、数据库访问、多线程等功能。PyQt5 允许

    2024年02月04日
    浏览(33)
  • Python 开源 Web 应用框架 Django 简介 应用场景 优势 不足

    Django 是一个开放源代码的 Web 应用框架,使用 Python 编程语言编写。它遵循了 “MTV”(模型-模板-视图)的设计模式,旨在帮助开发者快速构建高质量、易维护的 Web 应用程序。 Web 应用开发 :Django 适用于构建各种规模的 Web 应用程序,包括企业级网站、社交网络、内容管理系

    2024年01月19日
    浏览(12)
  • OLAP型数据库 ClickHouse的简介 应用场景 优势 不足

    ClickHouse 是一个开源的分布式列式数据库管理系统 (DBMS),专门用于在线分析处理 (OLAP)。它最初由 Yandex 开发,并且在处理大规模数据分析和实时查询方面表现出色。以下是关于 ClickHouse 的简介、应用场景、优势和不足的概述: ClickHouse 是一个高性能的列式数据库管理系统,专

    2024年02月02日
    浏览(20)
  • 从项目中突显技能:在面试中讲述你的编程故事

    从项目中突显技能:在面试中讲述你的编程故事

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月11日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包