有一个
对话框,上面有个
QTreeWidget,由于需要随时监控树列表上项的在线状态,所以将其放在了一个
线程中,用定时器2秒刷新一次。

在线程中使用定时器的方法运用了这篇文章中的方法 【QT中使用另外的线程运行定时器
http://blog.csdn.net/jwybobo2007/article/details/8314271 】,直接用
- m_pRefreshTimer->moveToThread(m_pRefreshThread); //线程指针m_pRefreshThread QTimer指针 m_pRefreshTimer
- connect(m_pRefreshTimer, SIGNAL(timeout()), this, SLOT(RefreshTreeSlot()), Qt::DirectConnection);
当某树项重启时,我会设置树控件的
文本变为‘离线’。
问题来了:当我将树控件的项文本改变时,在我的打印中(我在程序中加入了log),会出现以下这句话,
Warning: File:(kernel\qobject.cpp) Line:(92) QObject::connect: Cannot queue arguments of type 'QVector<int>'
(Make sure 'QVector<int>' is registered using qRegisterMetaType().)
如图:
每两秒钟检测一次在线状态,当第一次获取到离线时,就发生了这个警告。
需要说明几点:
1.我的打印是在设置树节点文本之后,也就是说当我设置树节点文本时,发出了这个警告。
2.我的程序中完全
没有用到QVector这个内置容器类型,更没有定义过'QVector<int>。所以我感觉很莫名其妙,不知所措。
3.我获取树项状态时,调用了MainWindow主
界面的一个函数,这个函数的一个参数是vector<QString>* 类型。难道是这里所导致?但和QVector<int>差的有点多啊!
个人猜想难道是线程中不能够操控ui所致???但是我的对话框树文本的确改变了啊!求各位大神指点啊!!!