Qt.面试题大全 1.请详细阐述信号槽原理2.是否使用过信号槽第五个参数,请详细阐述下第五个参数的使用用途3.是否使用过Qt的智能指针,什么是智能指针?智能指针有什么作用?分为哪几种?各自有什么样的特点?4.当两个智能指针互相指向之后会发生什么情况5.是否使用过多线程,请详细阐述下如何解决多线程资源竞争问题6.是否了解Qt的事件循环机制,请详细阐述下Qt的事件产生过程7.是否了解Qt的MOC机制,请详细阐述下8.当遇到崩溃,内存泄漏等问题时,是如何查找原因?
关于on_listWidget_currentItemChanged问题 今天遇到了一个问题,我子界面和主界面各有一个qlistwidget,然后点击item需要执行一些业务逻辑,在测试时发现软件崩溃,通过断点发现是主界面的槽被触发了。为什么我点击的是子界面的qlistwidget,却也触发了主界面的槽?完整的追踪过程,子类槽触发堆栈。现在来一步一步追踪。
Qt.切换中英文导致界面发生变化的问题 今天遇到了bug,得说一下,当我们的界面切换中英文触发ChangeEvent的时候,我们会调用retranslateUi()这个函数。然后就发现了一个问题,我界面上label,lineEdit这种可以修改的文字控件,全部变成初始默认的了,然后就很奇怪,通过追源码发现。因此,当我们调用这个函数的时候,会触发所有具有setText函数的控件,变成默认值,所以切换中英文记得要手动刷新UI。主要是有retranslateUi()这个函数引起的,我们在看下这个函数的内容。
Qt.关于invokemethod中Q_RETURN_ARG无法使用模版的问题 也就说我必须提前推导出这个变量的类型才行。于是我就考虑再写一个模版,用于推导出变量类型名称。一开始我是这么写的,但是我发现,我的槽并没有调用啊。然后我就怀疑是这个T的问题。我的需求是,一个函数传递一个结构体进去,然后自动推导出返回值和返回值类型。这是一个模版类,实际上最后传入的是一个const char*类型。即便修改成这样也是不行的的,因为#也是一个宏,宏比模版先展开。总结:Qt有些宏不能乱用,宏替换后,使用模版会出现错误。这样最后就能正确推导了,经过测试,成功触发槽了。可以发现,这是一个宏替换。
【Qt从入门到入土】8.事件机制 简单来说QEvent就是qt的事件,操作界面每个控件的动作都会产生相对的事件。事件分为两种:主动(QMouseEvent等)和被动(TimeEvent),无论是什么事件,最后都会走到Qt的event事件来进行分发。
【Qt从入门到入土】7.绘画机制 1.如何添加需要添加头文件:#include <QPainter>然后重写该函数:protected: void paintEvent(QPaintEvent *event) override;注意:所有的绘画必须在paintEvent里才有效。2.API//画直线painter.drawLine(5, 5, 300, 300);//设置线宽painter.setPen(QPen(QBrush(Qt::SolidPattern), 10));//画矩形p
【Qt从入门到入土】6.Qt多线程机制 我们都知道Qt的GUI线程(),在主线程内进行复杂,高速的刷新等操作会使得界面假死(即白屏,未响应状态),这时候就需要创建子线程,将复杂操作交给子线程来处理。每个线程都有一个自己的事件循环!!!
【Qt从入门到入土】2.信号槽详解 使用关键词signals信号不能是公共 (public)的或私有 (private)的。Qt 信号是 protected 类方法。signals:1.使用关键字slots(可以是公有,私有或保护)注意:私有槽函数无法被外部类使用。void get();2.在UI设计器中跳转槽函数。在UI界面跳转槽后,Qt会自动帮我们生成槽函数。默认私有。注意:所有on_xxx_xxx的都会被Qt默认识别为槽函数,所以在声明函数请不要用on_开头。3.信号槽如何使用这是Qt官方示例文档上的定义。
Qt开发技巧之Http下载器(支持多线程和断点传续) 断点续传 (Resume Transfer Protocol)是指在文件传输过程中断掉之后,能够在下一次传输时从断点处继续传输,而不需要重新传输已经传输过的数据。断点续传可以避免网络连接不稳定、传输出错等情况下的数据丢失,提高文件传输的效率。
Qt调试技巧之捕获异常(try-catch),实现自己的异常处理 然后使用try-catch来保护我们的程序。可以在catch(...)中使用。以上就是关于异常处理的分享,如果需要更精细,可以自定义多种异常处理。
Qt调试技巧之使用Dump文件调试 PDB(Program Data Base),意即程序的基本数据,是VS编译链接时生成的文件。PDB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等等。因为存储的是调试信息,所以一般情况下PDB文件是在Debug模式下才会生成。在VS中可以进行设置,在Release版本中也可以生成PDB文件。