• 8757阅读
  • 0回复

QSettings在线程中如何使用 [复制链接]

上一主题 下一主题
离线peiter
 

只看楼主 倒序阅读 楼主  发表于: 2009-05-08
— 本帖被 XChinux 执行加亮操作(2010-09-21) —
在线程中使用QSettings,最好是用QApplication.invokeLater( new Runnable(){});线程方法,这是经验谈哦

QThreadPool.globalInstance().start(new QRunnable(){});
内直接使用QSettings,在应用程序退出时报:
QObjects can only be implicitly garbage collected when owned by a QThread, native resource ('' [QSettings]) is leaked
信息

在线程内调用静态的QSettings对像或方法时会报如下类似信息:
QObject used from outside its own thread, object=QSettings(0x3a0e700) , objectThread=Thread[main,5,main], currentThread=Thread[Thread-2,5,main]
    at com.trolltech.qt.GeneratorUtilities.threadCheck(GeneratorUtilities.java:56)
    at com.trolltech.qt.core.QSettings.value(QSettings.java:429)
    at com.trolltech.qt.core.QSettings.value(QSettings.java:425)
    at com.ViessBuden.OO.util.SettingsManager.getXmppHost(SettingsManager.java:91)
    at com.ViessBuden.OO.LoginDialog.getServerName(LoginDialog.java:650)
    at com.ViessBuden.OO.LoginDialog.access$2(LoginDialog.java:649)
    at com.ViessBuden.OO.LoginDialog$LoginPanel.login(LoginDialog.java:340)
    at com.ViessBuden.OO.LoginDialog$LoginPanel$1.run(LoginDialog.java:309)

在QThread或Thread线程内使用QSettings类,也会报异常

总结,在QApplication.invokeLater( new Runnable(){});线程内使用QSettings类是最好的方法
有C#.NET/Qt开发业务相商的朋友请发电子邮件到pj_soft@126.com
有技术问题的朋友请在论坛里发贴提问,不要通过私人短信或者QQ/MSN提问讨论,谢谢合作
邮件:  pj_soft@126.com
即时通讯: QQ: 303782414  MSN: mjqznet@yahoo.com.cn
网址: http://t811.uu1001.com
我的博客http://peiter.blog.xunlei.com/
操作系统: Fedora9
主要开发方向: C++/Qt程序开发,C#/ASP.NET
快速回复
限100 字节
 
上一个 下一个