tylan的个人主页

http://www.qtcn.org/bbs/u/163485  [收藏] [复制]

tylan

  • 2

    关注

  • 3

    粉丝

  • 8

    访客

  • 等级:新手上路
  • 总积分:66
  • 男,1991-01-02

最后登录:2017-08-11

更多资料

日志

2015-09-29 12:04

记得之前有一次看到一篇帖子,说是想要实现类似文件管理器中效果,由于在Qt中,QFileSystemModel只能设置一个根节点,所以没办法在TreeVIew上实现类似快捷文件夹的效果。QFileSystemModel的显示效果如下图所示:

就是能让上面的快捷文件夹和计算机的几个盘符并列。当时记得有人提议重写Model,虽然小弟觉得可以通过布局的方式,将几个TreeView并列排在一起实现起来比较方便,但小弟还是亲自实验了一下,重写Model,来达到并列的效果,效果图如下,(效果比较丑,还请看官见谅)。实现效果图如下:
为了实现起来方便,小弟采用继承QAbst ..

阅读全文»分类:qt|回复:4|浏览:1993
2015-09-14 20:07

在编程中,if-else和switch-case是很常见的分支结构,很少在程序中不用这些控制语句。但是不能否认,在一些场景下,由于分支结构过分长,导致代码不美观且不容易维护,在《重构》一书中,也将过长的switch语句当做了“坏味道”。例如当我们处理从网络接收到的数据时,往往会由于种类太多而写一长段的if-else或者switch-case,小弟就曾经在读别人处理网络数据的代码时,发现有50多条的if-else语句,导致函数代码非常长。因此小弟就在网上看各位高人的解决办法,有很多是支持使用if-else的,也有很多反对的,对于反对的,也有各种的解决方案 ..

阅读全文»分类:通用|回复:7|浏览:1536
2015-09-11 17:09

QRunnable是所有runable类的基类,通过线程池对他进行管理,自动销毁。当需要将一些费时的操作放到线程中去执行的话,可以考虑使用QRunbale,但是使用QRunable,对于线程之间的通信和线程的同步需要自己去实现。当然使用QRunable的场景还是很多的。
例如当你在进行socket编程时不打算使用Qt的QTcpsocket 和QTcpserver,而是使用windows或者其他平台的socket api,或者是使用第三方的api时,这些socket api很可能不是事件驱动的。这时候很多人选择使用循环的方式去读取网络数据。这样的情况下,如果需要多线程,可以考虑使用QRunnable,同 ..

阅读全文»分类:qt|回复:0|浏览:1651
2015-09-10 20:12

在上一篇日志中,提到了通过继承QThread可以建立新线程,同时能够让子线程给主线程发消息,但是实现主线程发送信号让子线程去接收,似乎需要费点劲。因此再介绍另外一种方法创建子线程的方法,也是qt推荐使用的moveToThread方法。只要继承QObject类就可以使用moveToThread方法。
例如MyObject类继承自QObject类,将MyObject类的实例通过moveToThread方法放到新的线程中,那么所有的MyObject的函数都在新线程中得到运行。因此,可以实现在主线程中发送信号,让其接收的槽函数在子线程中得到运行。也就实现了主线程发消息给子线程。

move ..

阅读全文»分类:qt|回复:2|浏览:2939
2015-09-09 19:41

在进行Qt编程时,难免会遇到QThread,在QThread的子类中使用信号槽时,应该注意一下槽函数在那个线程中执行。
当继承QThread作为线程时,假如QThread的子类为MyThread,MyThread的实例化对象是属于其被创建时所在的线程的,如果MyThread在主线中被创建,那么MyThread的实例化对象就在主线程中,而我们所重载的run()方法中的代码则是运行在新线程中的。如果在run()中发射一个信号,那么connect函数的第5个参数则决定了槽函数该运行在主线程中还是新线程中。
(1)Qt::DirectConnection时,当信号在新线程中触发,槽函数在新线程中执行。
( ..

阅读全文»分类:qt|回复:0|浏览:1321

Powered by phpwind v8.7 Certificate Copyright Time now is:05-17 15:57
©2005-2016 QTCN开发网 版权所有 Gzip disabled