Qt 每日面试题 -1

news2024/9/21 13:50:11

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

  • 优点∶

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

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

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

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

原因∶
①需要定位接收信号的对象
②安全地遍历所有关联槽
编组、解组传递参数
多线程的时候,信号需要排队等待。

(然而,与创建对象的new操作及删除对象的delete操作相比,信号和槽的运行代价只是他们很少的一部分。信号和槽机制导致的这点性能损耗,对实时应用程序是可以忽略的。)

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

回调函数

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

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

  • 文件流(QTextStream)。 操作轻量级数据( int,double,QString )数据写入文本件中以后以文本的方式呈现。
  • 数据流(QDataStream)。通过数据流可以操作各种数据类型,包括对象,存储到文件中数据为二进制

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

4、描述Qt中的TCP通讯流程

  • 服务端:(QTcpServer)
    创建QTcpServer对象
    监听list需要的ip地址端口号
    有新的客户端连接成功回发送newConnect信号
    在newConnection信号槽函数中,调用nextPendingConnection函数获取新连接QTcpSocket对象
    连接QTcpSocket对象的readRead信号
    在readRead信号的槽函数使用read接收数据
    调用write成员函数发送数据

  • 客户端:(QTcpSocket)
    创建QTcpSocket对象
    当对象与Server连接成功时会发送connected信号
    调用成员函数connectToHost连接服务器,需要参数ip地址和端口号, 在connected信号的槽函数开启发送数据
    使用write发送数据read接收数据

5、描述UDP通讯中的UdpSocket

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

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

  • 创建QUdpSocket套接字对象
  • 如果需要接收数据,必须绑定端口
  • 发送数据用writeDatagram,接收数据用readDatagram

6、多线程使用使用方法

方法一:

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

方法二:

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

多线程使用注意事项:

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

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

可以通过connect的第五个参数进行控制信号槽执行时所在的线程
connect有 3 种连接方式,直接连接、 队列连接、自动连接

  • 1 直接连接(Qt::DirectConnection ): 信号槽在信号发出者所在的线程中执行
  • 2 队列连接(Qt::QueuedConnection): 信号在信号发出者所在的线程中执行,槽函数在信号接收者所在的线程中执行
  • 3 自动连接(Qt::AutoConnection): 多线程时为队列连接函数,单线程时为直接连接函数。

8、自定义控件流程

需要继承自定义的控件类,如QPushButton

  • 外观设计上: QSS继承绘画函数重绘继承QStyle相关类重绘组合拼装等等;
  • 功能行为上: 重写事件函数、添加 或者修改信号和槽等等。

9、对QObject的理解

  • 1 QObject类是Qt所有类的基类。

  • 2 QObject是Qt对象模型的核心。这个模型的中心要素就是一种强大的叫做信号与槽机制。你可以用connect()函数来把一个信号连接到槽,也可以用disconnect()函数来破坏这个连接为了避免永无止境的通知循环,你可以用blockSignal()函数来暂时阻塞信号保护函数connectNotify()和disconnectNotify()可以用来跟踪连接

  • 3 对象树都是通过QObject组织起来的,当以一个对象作为父类创建一个新的对象时,这个新对象会被自动加入到父类的children()队列中。这个父类有子类的所有权。能够在父类的析构函数中自动删除子类。可以通过findChild()和findChildren()函数来寻找子类。

  • 4 每个对象都一个对象名称objectName(),而且它的类名也可以通过metaObject()函数。你可以通过inherits()函数来决定一个类是否继承其他的类。当一个对象被删除时,它会发射destory()信号,你可以抓住这个信号避免某些事情。

  • 5 对象可以通过event()函数来接收事情以及过滤来自其他对象的事件就好比installEventFiter()函数和eventFilter()函数。childEvent()函数能够重载实现子对象的事件。

  • 6 QObject还提供了基本的时间支持,QTimer类提高了更高层次的时间支持。

  • 7 任何对象要实现信号与槽机制,Q_OBJECT宏都是强制的你也需要在源原件上运行元对象编译器。不管是否真正用到信号与槽机制,最好在所有QObject子类使用Q_OBJECT宏,以避免出现一些不必要的错误。

  • 8 所有的Qt widgets都是基础QObject。如果一个对象是widget,那么isWidgetType()函数就能判断出

10、Qt自定义一个信号槽,触发这个信号,Qt多个信号如何关联一并处理

  • 第一种方法︰
    发送信号时,也发送一个int类型数字,或者说标志,这样在槽函数触发是可以知道是哪个信号发出的

  • 第二种方法︰
    在槽函数内通过sender()函数获取发送信号的对象的指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2152485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024/9/21 leetcode 19题 24题

目录 19.删除链表中的倒数第n个结点 题目描述 题目链接 解题思路与代码 24.两两交换链表中的结点 题目描述 题目链接 解题思路与代码 19.删除链表中的倒数第n个结点 题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示…

Kyutai开源实时语音对话模型Moshi

新闻 法国人工智能实验室Kyutai在巴黎举行的一次活动上推出了能够进行自然交互的对话式人工智能助手Moshi,并计划将其作为开源技术发布。Kyutai表示,Moshi是首款可公开访问的人工智能助手,可实现实时对话,有别于OpenAI的GPT-4o&a…

mybatis 和 mybatis-plus

mybatis 配置 1.新建MAVEN项目 2.配置mybatis依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocatio…

基于YOLOv5s的无人机航拍输电线瓷瓶检测(附数据集与操作步骤)

本文主要内容:详细介绍了无人机航拍输电线瓷瓶检测的整个过程&#xff0c;从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式&#xff0c;请先看检测效果 现状 输电线路绝缘瓷瓶的检测主要依赖人工巡检。巡检人员需携带专业设备&#xff0c;攀…

Typora安装和导入导出

Typora安装和导入导出 文章目录 Typora安装和导入导出前言Typora v1.9.5Typora v1.4.7Pandoc 前言 Typora v1.9是最新版, , Typora v1.4是老版本的, 这两个选择一个即可Pandoc可以导入导出word Typora v1.9.5 Typora v1.9.rar, 提取码&#xff1a;tian按ctrl单击鼠标左键打开…

毕业设计选题:基于ssm+vue+uniapp的捷邻小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

大数据实验一: Linux系统安装和使用

一、实验目的 描述Ubuntu的安装过程&#xff1b;使用命令完成Ubuntu中的基础操作&#xff1b; 二、实验平台 操作系统&#xff1a;window系统&#xff1b;内存&#xff1a;4G以上&#xff1b;硬盘&#xff1a;100GB以上&#xff1b;Virtual Box或者VMware&#xff1b;Ubuntu…

如何用1024张显卡训练一个模型

最近看到知乎一个回答&#xff0c;把千卡训练的难度吹上天了。但其实真正用过千卡就会发现也就那么几个点。于是想写一篇文章简单讲讲。 本文将包括几个部分&#xff1a; 首先我们将讨论千卡训练的难题&#xff0c;以及应该在什么时候使用千卡训练&#xff1b; 接着&#xff…

品牌建设是什么?怎么做好品牌建设?

品牌建设&#xff0c;是每个公司品牌形象树立过程中所做的一系列动作&#xff0c;旨在与目标市场建立情感联系&#xff0c;并在竞争激烈的市场中为企业或产品赢得认同和忠诚度。要做好品牌建设&#xff0c;公司首先要明确自己的品牌定位&#xff0c;然后在通过一些品牌建设策略…

Java调用数据库 笔记06 (修改篇)

1.创建Java的普通class类 2.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 3.驱动管理类调用方法进行连接&#xff0c;得到连接对象 DriverManager.getConnection(url, user, password); 其中设置参数&#xff1a; static final String url "jdbc:my…

2024年上海小学生古诗文大会倒计时一个月:做2024官方模拟题

2024年上海市小学生古诗文大会自由参赛的初赛将于10月19日开始&#xff0c;还有不到一个月的时间。 今天好真题继续带着大家来继续做官方2024年小学生古诗文大会的官方模拟题。 【温馨提示】我给每一道题都独家制作了解析&#xff0c;便于孩子理解和熟记题目背后的知识点&…

【python设计模式6】行为型模式1

目录 责任链模式 观察者模式 责任链模式 责任链模式的内容&#xff1a;使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。责任链的角色有抽象处理者、…

b2b2c商城系统好用么 多用户商城系统四大盈利模式

商淘云B2B2C商城系统能帮助企业快速搭建企业自己的多用户商城系统&#xff0c;它提供了多种功能&#xff0c;如多商家管理、订单处理、支付模块集成等&#xff0c;适合各种规模的企业。用户界面友好&#xff0c;且支持定制化&#xff0c;能满足不同业务需求。 多用户商城有四大…

【ARM】A64指令介绍及内存屏障和寄存器

A64指令集介绍 ISA : Instruction System Architecture 指令集总结 跳转指令 使用跳转指令直接跳转&#xff0c;跳转指令有跳转指令B&#xff0c;带链接的跳转指令BL &#xff0c;带状态切换的跳转指令BX。 B 跳转指令&#xff0c;跳转到指定的地址执行程序。 BL 带链接的跳…

.NET周刊【9月第3期 2024-09-15】

国内文章 关于.NET在中国为什么工资低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中国开发者的薪资偏低&#xff0c;主要因市场需求、技术栈选择和企业文化等因素所致。历史上&#xff0c;.NET曾因微软的闭源策略发展受限&#xff0c;尽管后来推出了跨平…

传输层协议 —— TCP协议(下篇)

目录 0.前言 1.流量控制 什么是流量控制&#xff1f; 如何做到流量控制&#xff1f; 窗口探测 PSH标志位与流量控制 一个问题 2.滑动窗口 为什么要有滑动窗口&#xff1f; 滑动窗口在哪&#xff1f; 滑动窗口到底是什么&#xff1f; 滑动窗口的工作原理 滑动窗口中…

Java——认识String类

在 C 语言中已经涉及到字符串了&#xff0c;但是在 C 语言中要表示字符串只能使用字符数组或者字符指针&#xff0c;可以使用标准库提供的字符串系列函数完成大部分操作&#xff0c;但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想&#xff0c;而字 符串应用又非…

【射频通信电子线路基础第五讲】噪声、噪声系数和灵敏度

一、噪声 确定信号对应的是干扰&#xff0c;而随机信号对应的是噪声&#xff0c;噪声又分为系统内部的噪声和外部对系统的噪声。 1、电阻热噪声 &#xff08;1&#xff09;无源有耗网络的热噪声 &#xff08;2&#xff09;热噪声通过线性网络 &#xff08;3&#xff09;等效噪…

酷炫航模飞手飞行技术详解

在无人机与航模的广阔世界里&#xff0c;成为一名技艺高超的飞手&#xff0c;不仅需要对飞行器有深入的理解&#xff0c;还需掌握一系列精湛的飞行技巧。本文将从基础飞行技巧、特技飞行动作、FPV第一人称视角、安全飞行要点、设备调试与维护&#xff0c;以及实战应用与拓展六个…

2024 “华为杯” 中国研究生数学建模竞赛(E题)深度剖析|高速公路应急车道启用建模|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; CS团队倾注了大量时间和心血&#xff0c;深入挖掘解…