自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 问答 (1)
  • 收藏
  • 关注

原创 关于on_listWidget_currentItemChanged问题

今天遇到了一个问题,我子界面和主界面各有一个qlistwidget,然后点击item需要执行一些业务逻辑,在测试时发现软件崩溃,通过断点发现是主界面的槽被触发了。为什么我点击的是子界面的qlistwidget,却也触发了主界面的槽?完整的追踪过程,子类槽触发堆栈。现在来一步一步追踪。

2024-06-21 15:53:10 154

原创 Qt.切换中英文导致界面发生变化的问题

今天遇到了bug,得说一下,当我们的界面切换中英文触发ChangeEvent的时候,我们会调用retranslateUi()这个函数。然后就发现了一个问题,我界面上label,lineEdit这种可以修改的文字控件,全部变成初始默认的了,然后就很奇怪,通过追源码发现。因此,当我们调用这个函数的时候,会触发所有具有setText函数的控件,变成默认值,所以切换中英文记得要手动刷新UI。主要是有retranslateUi()这个函数引起的,我们在看下这个函数的内容。

2024-05-17 16:38:08 130

原创 Qt.重新理解信号槽

废话不多说,直接上图。

2024-01-30 14:17:38 425

原创 Qt.模版+QMetaObject::invokeMethod来实现反射。

可变参模版

2024-01-26 13:47:46 476

原创 Qt.关于invokemethod中Q_RETURN_ARG无法使用模版的问题

也就说我必须提前推导出这个变量的类型才行。于是我就考虑再写一个模版,用于推导出变量类型名称。一开始我是这么写的,但是我发现,我的槽并没有调用啊。然后我就怀疑是这个T的问题。我的需求是,一个函数传递一个结构体进去,然后自动推导出返回值和返回值类型。这是一个模版类,实际上最后传入的是一个const char*类型。即便修改成这样也是不行的的,因为#也是一个宏,宏比模版先展开。总结:Qt有些宏不能乱用,宏替换后,使用模版会出现错误。这样最后就能正确推导了,经过测试,成功触发槽了。可以发现,这是一个宏替换。

2024-01-19 14:48:17 464

原创 【Qt从入门到入土】8.事件机制

简单来说QEvent就是qt的事件,操作界面每个控件的动作都会产生相对的事件。事件分为两种:主动(QMouseEvent等)和被动(TimeEvent),无论是什么事件,最后都会走到Qt的event事件来进行分发。

2023-12-15 08:54:07 78

原创 【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

2023-12-14 09:01:10 85

原创 【Qt从入门到入土】6.Qt多线程机制

我们都知道Qt的GUI线程(),在主线程内进行复杂,高速的刷新等操作会使得界面假死(即白屏,未响应状态),这时候就需要创建子线程,将复杂操作交给子线程来处理。每个线程都有一个自己的事件循环!!!

2023-12-12 09:20:04 130

原创 【Qt从入门到入土】5.定时器之QTimer

QTimer的构造提供了一个默认,因此即可以指定父对象,也可以缺省。

2023-12-08 08:54:36 67

原创 【Qt从入门到入土】4.基础控件之QPushButton

QPushButton是Qt的基础控件,按钮类,用于各种点击操作。

2023-12-07 09:38:38 117

原创 【Qt从入门到入土】3.UI设计器之布局

当我们学会信号槽的使用,就可以开始我们的界面设计了,本文主介绍UI设计器,不包含使用代码来建立布局(手写布局不推荐)。

2023-12-06 09:23:07 191

原创 【Qt从入门到入土】2.信号槽详解

使用关键词signals信号不能是公共 (public)的或私有 (private)的。Qt 信号是 protected 类方法。signals:1.使用关键字slots(可以是公有,私有或保护)注意:私有槽函数无法被外部类使用。void get();2.在UI设计器中跳转槽函数。在UI界面跳转槽后,Qt会自动帮我们生成槽函数。默认私有。注意:所有on_xxx_xxx的都会被Qt默认识别为槽函数,所以在声明函数请不要用on_开头。3.信号槽如何使用这是Qt官方示例文档上的定义。

2023-12-05 09:02:29 103

原创 【Qt从入门到入土】1.Qt下载

本文将为小白介绍Qt的环境配置,包括kit损坏。

2023-12-04 10:18:33 173

原创 Qt开发技巧之快速安装多版本Qt

在项目立项时,总会因为各种原因(硬件)选择不同版本的Qt来进行开发,这时候就需要安装多版本的Qt。接下来讲解Qt多版本安装。

2023-11-30 08:58:32 2397

原创 Qt调试技巧之如何在多线程下判断某个线程是否卡住,以及执行函数。

(点击下一步查看是否还能继续运行下去)这样就能看到是哪个线程即线程函数导致的线程卡住。

2023-11-23 10:46:54 361

原创 Qt开发技巧之Http下载器(支持多线程和断点传续)

断点续传 (Resume Transfer Protocol)是指在文件传输过程中断掉之后,能够在下一次传输时从断点处继续传输,而不需要重新传输已经传输过的数据。断点续传可以避免网络连接不稳定、传输出错等情况下的数据丢失,提高文件传输的效率。

2023-11-14 14:58:56 525 2

原创 Qt调试技巧之捕获异常(try-catch),实现自己的异常处理

然后使用try-catch来保护我们的程序。可以在catch(...)中使用。以上就是关于异常处理的分享,如果需要更精细,可以自定义多种异常处理。

2023-11-08 15:10:18 3889 1

原创 Qt调试技巧之使用Dump文件调试

PDB(Program Data Base),意即程序的基本数据,是VS编译链接时生成的文件。PDB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等等。因为存储的是调试信息,所以一般情况下PDB文件是在Debug模式下才会生成。在VS中可以进行设置,在Release版本中也可以生成PDB文件。

2023-11-06 09:06:00 513 1

原创 Qt调试技巧之QtCreator调试

第一个是我们编译的版本,Qt分为Debug,Profile,Release三个版本。其中Debug和Profile是能够输出qDebug信息的,而Release是默认不输出qDebug信息的。首先,我们要在函数列表中向下翻阅,查看是否有自己所写函数,如果有,说明程序最后死在了这个函数上。如果没有,例如段错误等。今天我们主要讲的是关于Qtc的调试,但是实际上这些只能帮助我们在开发时减少BUG的产生,但是到实际生产环境时,我们该如何调试?我们的所有ui文件的后缀名为.UI文件,里面存放了我们的界面XML信息。

2023-11-05 14:00:35 3579

原创 Qt.关于tr的坑

如果我在判断的时候不用tr包着字符串,那么将无法判断通过。找了半天,在堆栈发现字符串已经变成中文的了。我擦,这不坑爹吗,我以为会保存的是原始字符串,但是他把翻译后的字符串给保留了,这怎么能比对通过呢。如图,我在外部对一个qlist插入了字符串,插入的时候字符串是用tr包着了。最后的解决办法就是,将这个tr也用国际化翻译成对应的,然后就能比对通过。这是GPT给我的回复。一开始我就觉得tr修改了字符串格式。关于tr字符串的问题。接下来就是神奇的一幕。

2023-10-23 13:42:00 78

原创 QWidget之子界面任意去操作主界面控件

获取到主界面指针后,通过findchild去获取界面控件指针。在某些情况下,有些人想通过子界面去操作主界面的控件,但是又不想通过信号槽的方式来解决。那么接下来就提供一个简便方法。(拒绝使用头文件互相引用以及直接操作ui指针)。同理也是使用parentwidget()来获取主界面指针。但是我们需要使用强转,将获取到的指针,强转为主界面类型。首先QT提供一个方法,可以让子界面获取主界面的指针。注意:此方法只针对实例化界面,不针对提升类。通过调用这个函数就能获取到主界面的指针。这样就能操作主界面的UI控件了。

2023-10-13 09:18:41 174

原创 QMap.clear()导致泄漏的问题

或者使用QMap的时候使用QSharedPointer来包着指针,再想要释放的时候remove指针就行了,智能指针帮助我们来释放,而不需要自己手动管理。有时候我们会使用指针来存储,当我们调用clear的时候实际上只是将容器的size清空,但指针的内存却并没有被释放掉。解决这个问题的方法就是在clear的时候对每个指针进行delete操作。QMap是一个哈希容器。

2023-10-12 14:23:05 402

原创 QML.关于qml窗口最小化后还原问题(window.visibility)

但是我在qml中无法调用这个函数啊,我用的默认的qmlengine,并不能调用qwidget的方法,然后我一开始觉得是否可以通过visible的属性来控制,但是很显然不行,visible的方法对应的是show和hide。所以,总结一下,当我们对qml进行最小化时,窗口仍然是可见的,改变的visibility的状态,所以当我们要让窗口恢复时,我们应该修改visibility为2。:最小化后,qml的窗口仍然是可见的。今天,在写程序的时候,发现qml最小化后,还原回去有点问题。当我们最小化时,可以发现。

2023-08-06 17:27:11 706 1

原创 QML.line: 1: qt quick emulation layer crashed错误

今天想要自定义combobox,发现网上大部分都是control 2.0,当我包这个模块的时候,设计器报错无法使用2.0的模块,后来百度配置一个环境变量就能使用。通过配置环境变量确实能够引入2.0的模块,但是我打开设计器突然又发现,设计器崩了。搞了半天也不知道为什么,后来把上面导入的系统变量删了,就又正常了。

2023-07-11 13:37:56 275 1

原创 QML.关于子控件访问父控件函数的作用域问题

证明了无论在多少层级下,子对象永远能访问父对象的function,或者说是父对象的function全局可用。在之前,我们已经发现了父控件无法访问到子控件的属性。那么子控件是否能访问到父控件的函数呢?然后将child对象实例在main.qml,child2实例在child中。在main.qml中,我们定义了一个函数function用来打印。

2023-07-05 16:55:20 260 1

原创 QML.Value is undefined and could not be converted to an object报错问题

对于一个组件(一个.qml文件),根对象的属性可以被外部访问,但是子对象的属性对外是不可见的,即。当时就很懵逼,因为访问父控件的属性没问题,但是访问子控件属性就不行,在查阅了资料后了解到。今天在学习QML与c++信号槽交互时,想修改父控件的子控件的text属性时,发生了报错。从图可见在第一个是可以访问的到,但是第二个就无法访问的到了。[父对象id].[子对象id].[子对象属性]修改起来也很方便,需要对子控件进行一个别名设置。当设置了这样的别名然后再去修改属性就可以了。修改后就没有这个报错了。

2023-07-05 16:19:10 759 1

原创 QML.关于函数缺参被忽略的问题

当时我并没有注意到函数调用忘带参,因为在平时用CPP开发的时候,qtcreator会帮我们检查并报错,但在qml中并不会,当你使用到这个函数后,他才会在输出信息中告诉你。后来我查了下资料,发现QML类似于JS是动态类型语言,并不会在编译期间检查,同时缺少参数也只是导致函数无法获得预期效果,并不会导致异常退出。如图,我在qml文件中调用了CPP文件中的一个函数。但是我那个函数是带参函数,声明如下。今天在网上冲浪,看c++如何和qml交互的时候,发现了一个问题。

2023-07-05 12:55:23 38 1

原创 win查看文件夹树形结构

使用 cmd 输入set path看看环境变量里系统的默认路径是不是包含了c:\windows\system32。win下有个tree命令,可以将某个文件夹下所有的子文件or文件夹通过树来罗列。1、查看c:\windows\system32下有没有tree.com。如果没有,可能是tree.com这文件坏掉了,找个下载了换上就行。3、如果不包含的话用下面命令加上去。2、如果有tree.com这个文件。但是当我使用tree命令后会提示。搜了下是因为没有系统环境的原因。

2023-07-04 10:22:18 449

原创 QML.关于自定义组件全局使用的疑惑

除此之外,我还有个问题,因为我所有的界面都存在同一个界面,于是我都import然后实例化了,首先一个问题“qml的实例化是否像QWidget一样,控件是new在堆上的”,如果是的话,岂不是我每个实例化都非常浪费内存,第二个问题就是如果我每个qml文件使用的都是同一个id,是否访问的都是同一个qml。但是我发现,在最底层的qml文件对象可以访问最外层(root)的函数,这就非常奇妙了,因为我的理解是可以访问parent,但没想到parent.parent也可以。类似于一个ui指针。

2023-07-03 18:22:56 99 1

原创 QML.关于anchors对齐右边的问题

在纯代码设计时,如果我们没有指定控件的大小,而使用默认大小,会发现锚定的位置是错误的,这是因为控件大小的问题。总结:因为锚定是根据控件自身的大小来计算的。如果控件没有指定大小,则无法准确计算锚定的位置。在注释掉宽度这一行后,在设计器中发现,对齐的位置是错误的。当我们加上宽度后会发现位置变正确了。

2023-07-03 09:50:14 107 1

原创 QML.关于View中控件访问parent问题

在上面这段代码中,TableViewColumn在Tableview中声明,按照我的理解来说既然包含在{}里,那他应该能够通过parent去获取width,我使用这个方法去使用后,在设计器里发现长度不对。总结:通过parent去获取属性是有问题的,更应该通过id去寻找,因为id才是唯一标识。于是我通过访问id的方式来获取width,这样就正常了。然后我就开始怀疑是否是parent的获取有问题。将width获取改为id获取就正常。

2023-06-30 16:11:36 118 4

原创 QML.关于布局因为文字大小而无法对齐

在开发界面的时候,布局是一种十分方便的东西,在QWidget中如果遇到文字大小不一导致label或其他控件长度不一样,我们可以通过弹簧等来控制他的对齐,由于第一次接触QML,在使用到layout的时候发现qml中文字长短不一,是无法对齐的。例如图中所示,在这种情况下,我使用了anchors和右对齐的方式,发现总是差几个像素点,qml设计器也没有弹簧,后来发现可以手动设置他的padding来进行对齐。(后续如果有其他方法或者是我的方法不对的可以纠正一下)这是无法对齐的原始代码。

2023-06-30 14:58:18 191

原创 QWebsocket编译错误原因

引入websocket头文件出现未定义操作

2023-03-27 14:26:04 327

原创 Codeforces B. DIV + MOD

B. DIV + MODtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputNot so long ago, Vlad came up with an interesting function:fa(x)=⌊xa⌋+xmodafa(x)=⌊xa⌋+xmoda, where⌊xa⌋⌊xa⌋isxaxa, round...

2022-03-15 22:12:20 757

http下载器,支持断点传续

可以正常使用,暂时只支持单任务,支持断点传续。使用的Qtc5.15.2+msvc2019(64bit)

2023-11-15

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除