- 博客(498)
- 资源 (15)
- 收藏
- 关注
原创 C++多线程
被命名为t的std::thread对象拥有新函数hello()作为其初始函数。对于所有其他线程,这在std::thread对象的构造函数中指定。每个线程都必须具有一个初始函数,新线程的执行在这里开始。初始线程始于main(),而新线程始于hello().对于应用程序而言,初始线程是main()。《C++并发编程实战》
2024-10-16 02:36:01
232
原创 模态与非模态的对话框
这样写的话,dialog是模态窗口,先显示dialog,关闭后,才显示widget。而且,因为使用了exec()方法,当dialog关闭后,程序才继续向下执行。这样写的话,dialog是模态窗口,但还是一闪而逝。写成这样的话,dialog是模态的。
2024-10-15 23:07:32
434
原创 QSqlDatabasePrivate::removeDatabase: connection ‘connection‘ is still in use, all queries will cease
之前在网上查过,有个网友分享的,就是在 调用。这样写就可以了,不弹出上面的提示信息了。
2024-10-12 01:21:26
208
原创 int QSqlQuery::size() const
注意:对于非查询语句,将返回-1(isSelect()返回false)为了确定非查询语句影响的行数,使用numRowsAffected().(如果大小不能被决定 或者 数据库不支持报告查询的大小信息)如果查询不是活跃的(isActive()),返回-1.返回结果的大小(返回的行数)
2024-10-12 00:03:15
336
原创 观察者(observer)模式
观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。针对具体实现编程,会导致我们以后在增加或删除布告板时必须修改该部分代码。观察者已经订阅主题以便在主题数据改变时能收到更新。这样可以建立有弹性的OO系统,能够应对变化。采取观察者模式:主题的数据安全性有所保障。《Head First设计模式》p38。为了交互对象之间的松耦合设计而努力。现在有三个使用天气数据的布告板。当主题内的数据改变,会通知观察者。布告板1,布告板2,布告板3。可以从被观察者处推或拉数据。
2024-10-08 04:04:41
340
原创 C++ 多线程
延迟加载方式创建线程。调用async时不创建线程,直到调用了future的get或者wait时才创建线程。来自《深入应用C++11 代码优化与工程级应用》可以看到,应该是第16行和第21行同时执行了。函数会阻塞线程,直到线程函数执行结束。在调用async时就开始创建线程。5.线程异步操作函数async。线程对象就代表着一个线程。需要注意线程对象的生命周期。线程对象t的id是2。
2024-10-01 15:33:18
459
原创 《More Effective C++》的学习
因为reference一定是有效的,而指针可能为空(需要多加一个判断)。指针可以被重新赋值,指向另一个对象,而引用总是指向初始化时的那个对象。static_cast基本上和C旧式转型有相同的威力,限制。旧式的C转型方式:几乎允许你将任何类型转换为任何其他类型。使用reference可能比使用pointer更高效。double--->pointer 不可以。strcut--->int 不可以。移除表达式的常量性 不可以。改变表达式中的常量性和变易性。可以将某个变量的常量性去除。
2024-10-01 04:21:58
311
原创 QSqlDatabase在多线程中的使用
QSqlDatabase::addDatabase和QSqlDatabase::open外部加锁,然后两个数据库都可以打开了。如:有两个线程,它们同时要访问一个共有的资源,这时候就会出现对资源的竞争,如果不添加锁,会出现什么情况将是未知的。而线程2打开数据库失败,此时让流程继续走下去,结果不是我们期望的,所以要加锁。(应该是在执行这两个函数时,会有数据竞争的情况发生)在使用多线程时,特别需要注意的就是刚才出现的情况。线程1打开数据库成功,它的流程正常进行。1000条记录:内容均为123。
2024-10-01 02:34:48
1040
原创 Qt多线程与数据库
那么可以用多线程,在子线程中查询数据,主线程可以弹出一个模态窗口进行提示,如“数据载入中”。如果希望在子线程中完成对数据库的查询操作,那么在子线程中重新添加一个新的连接名。之前上个项目用的方法是分页显示,数据库查询时加limit。但是我按这个思路走下去,程序会出现偶发的崩溃。这次情景不同,如果就必须要把数据都读出来。数据库的一张表里有10000条数据。一下子都读出来,页面会卡死。去找原因时,猜测应该是因为。
2024-09-29 23:45:25
494
原创 数据库中的表添加uuid字段
我认为数据库中的表应该是有一个uuid字段来唯一标识表中的一条记录的。我们使用uuid作为一个永远不会改变的值,创建后就不再变化。QUuid::createUuid()来进行创建。在此基础上,对记录进行增删改查,其实都会简单一些。因为总有一个字段(uuid)是不变的。
2024-09-29 23:14:34
295
原创 了解ORM
什么是ORM?为什么要用ORM?-CSDN博客C++高级编程(99)面向资源的设计思想(ORM)_c++ orm-CSDN博客ORM:Object-Relational-Mapping对象关系映射--------------------------我想对数据库中的表A进行增删改查。表A有10000条数据我希望可以得到表A的所有数据。通过拼sql语句,得到数据,存入内存中,这样再次需要读取表A的数据时,我直接读内存中的数据即可,不需要再重新查数据库了。需要注意的是,内存中数据与数据库中数据需要保持一致。这一点
2024-09-29 23:08:19
248
原创 如何在qtcreator debugger上运行gdb命令
在main.cpp文件的第7行加入条件断点,条件为i==5。在main.cpp文件的第5行加入断点。
2024-09-22 03:59:54
300
原创 Qt Debugging帮助文档
但不知道为什么,46行的条件没有生效,47行的条件生效了。在程序停止之前忽略该断点200次。当i==10时,程序中断。
2024-09-22 03:17:40
259
原创 Qt断点调试
Locals and Expressions:控制右侧变量监视窗口是否显示。Shift+F11:单步退出所在的那个函数,进行下一步。记录了该应用程序运行时依赖的dll库。线程窗口:可以与stack进行联动。Breakpoints---断点。5.在右键菜单中可以移除。Stack---堆栈。Modules:模块。暂时还不知道干啥的。
2024-09-21 15:51:26
400
原创 QTCreator 调试:unknown debugger type “No engine“
一开始Debuggers---Auto-detected这里第一row第一个项是标红的,然后没改东西,点完应用Apply以后,就可以调试了...(不太理解)
2024-09-21 05:42:30
245
原创 void QTableWidget::setRowCount(int rows)
【代码】void QTableWidget::setRowCount(int rows)
2024-09-21 05:08:04
184
原创 局域网UDP通信实验
手机IPV4地址:192.168.0.20。电脑IPV4地址:192.168.0.39。此时手机和电脑在同一局域网中。这篇文章中提到的调试助手。随身WIFI连接电脑。手机端使用app梦络。
2024-09-14 01:57:06
245
原创 测试用例的了解
测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果。:对同样的测试用例,系统的执行结果应当是相同的。:对程序中的可能存在的错误有针对性地测试。最近在做的工作主要是。
2024-09-13 23:40:10
426
原创 QScopedPointer的了解
技术,当QScopedPointer被销毁时,它将。QScopedPointer使用了。QScopedPointer不支持。本文摘录自上面的文章。其类似于C++11中的。
2024-09-11 01:33:56
379
原创 近期工作思考
(4)写程序,免不了会写出来bug,如果不是自己写的代码,而是别人的bug,这时候就非常考验。的,程序的层次尽量分明,一层叠一层,的时候,一些代码就会显出问题了,比如。,写的好的话,可以减少代码冗余。真是感觉到被广泛使用,以及。(3)一般来说,是要把。的能力了,挺重要的!
2024-09-10 00:43:53
172
原创 银河麒麟下使用QtCreator
进行开发,感觉其实使用起来也挺方便的,跟在Windows下开发非常类似,没什么大差别。近期接触的一个项目,是在。
2024-09-10 00:28:54
203
原创 奇异递归模板模式(Curiously Recurring Template Pattern)
在Action模板参数中接收Animal类型的引用(或指针)并在其中调用了animal对象的Run方法,由于这里传入的是不同的子类对象,因此Action中的animal也会有不同的行为。通过CRTP可以使得类具有类似于虚函数的效果,同时没有虚函数调用时的开销(虚函数调用时需要通过虚函数指针查找虚函数表进行调用),同时类的对象的体积相比使用虚函数也会减少(不需要存储虚函数指针),但是缺点是无法动态绑定。基类为Base,是模板类,子类Drived继承自Base同时模板参数为Drived,基类中有接口。
2024-09-04 01:54:33
760
原创 在Ubuntu上运行QtCreator相关程序
(2)之前在Windows上其实写过很多demo,现在希望把它们的源码移到Ubuntu上,然后使用Linux下的Qt Creator编译运行。思考:之前并没有觉得Qt跨平台的能力有多好,但试过之后发现确实挺不错的,移植起来挺方便的。(1)我是把Windows上的程序移过来的,Windows上文件名称是不区分大小写的。首先:使Windows与Ubuntu共享文件夹。而Ubuntu上是区分的。
2024-09-04 00:27:49
427
原创 C++中函数返回值为引用
以上函数的返回值是引用类型。无论返回s1还是s2,调用函数和返回结果时,都没有拷贝这些string对象。在类的成员函数中,返回引用的类对象,一般为this指向的对象。
2024-09-02 23:55:16
238
原创 QObject::moveToThread(QThread * targetThread)
来得到当前application的指针,使用。移动一个对象到主线程,使用。该函数只能把一个对象从。
2024-08-31 18:05:29
241
原创 QtConcurrent
QtConcurrent提供了一个将任务分发到处理器所有的核的易用接口。线程代码完全被隐藏在QtConcurrent框架下,我们不必考虑细节。不能用于线程运行时需要通信或阻塞的情况。直接调用QtConcurrent::run,第一个参数是线程池指针,没有传默认使用全局线程池,之后的可执行对象和参数,可以参考c++11的async,结果使用QFuture接收。如果只是普通的任务,没有对象和线程间通信这些,首选QtConcurrent。下面这段来自上面的文章!
2024-08-28 16:47:57
973
原创 Qt上位机方向---C++面试题记录
它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生变换时,会通知所有的观察者对象,使它们能够自动更新自己的状态。Qt中的对象可以形成一个层次结构,一个对象可以拥有多个子对象,当父对象被销毁时,它会自动销毁其所有子对象。一个对象只能有一个父对象。Qpointer,QSharedPointer,QWeakPointer,QScopedPointer(类似unique_ptr)本文摘抄自上面的文章,用于学习和记忆。主要通过对象树和智能指针。通讯的信号与槽机制,
2024-08-28 14:42:05
513
QtWebApp的示例
2024-03-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅