about present work

来源:互联网 发布:python 空间 编辑:程序博客网 时间:2024/04/29 08:38

QT乱码: 
   1在代码中加入
    #include <qtextcodec.h>
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
 2 如果是用字符串数组存储的话要memset数组,而且保证存储数据时不越界。


直接用类名定义的对象 和 用 new 出来的对象有什么区别?

不用new,则生成的对象保存在栈区,用new生成的对象在堆区,栈区比较小,堆区比较大,很多临时变量什么的和函数调用什么的都要用到栈区,
所以为了不占用太多的栈区,大点儿的程序生成对象都在堆区。在栈区不属于用户管理的范围,生成对象在程序结束后自动调用系统喜购函数析构掉,
没有内存泄漏,而堆区属于用户管理范围,如果你用了new,则堆区就会申请一块儿放下你的对象的内存,如果你不显式调用delete,程序运行完以
后那块儿内存还是属于这个对象,这块儿内存其他的程序就不能再访问了,如果你程序运行次数比较多或者生成对象比较多,则会占用越来越多的内存,
最后导致没有内存可以使用,系统崩溃!


&0x01
就是取第一位的值


QString 所占用空间问题. 按照实际存储内容的大小以 2^n 递增. 实际存储内容不包含'/n',如 "12345678"占用8字节 "123456789"占用16字节
若需要将需要在添加结束符,可使用函数latin1()


QT线程安全问题 

  • 当使用Qt库互斥量的时候不要做任何阻塞操作。这将会冻结事件循环。

     

  • 确认你锁定一个递归QMutex的次数和解锁的次数一样,不能多也不能少。

     

  • 在调用除了Qt容器和工具类的任何东西之前锁定Qt应用程序互斥量。

     

  • 谨防隐含地共享类,你应该避免在线程之间使用操作符=()来复制它们。这将会在Qt的未来主要的或次要的发行版本中进行改进。

     

  • 谨防那些没有被设计为线程安全的Qt类,例如,QPtrList的应用程序接口就不是线程安全的并且如果不同的线程需要遍历一个QPtrList,它们应该在调用QPtrList::first()之前锁定并且在到达终点之后解锁,而不是在QPtrList::next()的前后进行锁定和解锁。

     

  • 确认只在GUI线程中创建的继承和使用了QWidgetQTimerQSocketNotifier的对象。在一些平台上,在某个不是GUI线程的线程中创建这样的对象将永远不会接受到底层窗口系统的事件。

     

  • 和上面很相似,只在GUI线程中使用QNetwork类。一个经常被问到的问题是一个QSocket是否可以在多线程中使用。这不是必须得,因为所有的QNetwork类都是异步的。

     

  • 不要在不是GUI线程的线程中试图调用processEvents()函数。这也包括QDialog::exec()、QPopupMenu::exec()、QApplication::processEvents()和其它一些。

     

  • 在你的应用程序中,不要把普通的Qt库和支持线程的Qt库混合使用。这也就是说如果你的程序使用了支持线程的Qt库,你就不应该连接普通的Qt库、动态的载入普通Qt库或者动态地连接其它依赖普通Qt库的库或者插件。在一些系统上,这样做会导致Qt库中使用的静态数据变得不可靠了。
  •  

    六 union问题

    union 成员(成员^n)不能含有构造函数, 如 QString 不能作为union的成员. union的成员只能是基本c++数据类型.