QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: nihui

to haulm... 服务管理器被我 fork 了...

[复制链接]
 楼主| 发表于 2009-8-15 22:58:06 | 显示全部楼层
原帖由 haulm 于 2009-8-15 19:26 发表
我花了两天的时间整理出了一个QTreeView常用的实现资料,放在http://www.linuxfans.org/bbs/thread-189557-1-1.html
有空大家可以学习一下,Model/View 是Qt4的一大特色,精通它就等于精通了整套的GUI数据处理及显示系统。 ...


服务状态全都是查返回代码(exit code),0 表示正在运行,非0 表示没有运行。
先从目录中得到全部的服务名称列表,然后挨个执行服务的 status 命令,获取返回代码。
但是服务比较多,一个个挨个查下来要等好久,而且查的时候程序图形界面处于 freeze 状态...

所以就改用一起查的办法,不管有没有得到返回代码都立即检查下一个服务状态,这样子所有的服务都可以马上执行 status,这时候就显示图形界面。显示图形界面也需要时间的,等界面出来,那些服务也差不多都查完了,程序再慢慢收集那些服务状态信息,显示在列表里。

有个现象——如果你启动程序比较快的话,会看到有些服务状态刚一出来是停止,接着再变成运行中......(我只看到过一次....)
回复

使用道具 举报

发表于 2009-8-16 14:46:48 | 显示全部楼层
原帖由 nihui 于 2009-8-15 22:58 发表


服务状态全都是查返回代码(exit code),0 表示正在运行,非0 表示没有运行。
先从目录中得到全部的服务名称列表,然后挨个执行服务的 status 命令,获取返回代码。
但是服务比较多,一个个挨个查下来要等好久,而且查的时候程 ...

所以默认显示不应该是停止的,而应该是检索中字样。
回复

使用道具 举报

发表于 2009-8-18 09:41:41 | 显示全部楼层
搞出这么个东东来。。。

[ 本帖最后由 haulm 于 2009-8-18 15:36 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2009-8-18 10:07:07 | 显示全部楼层
上下文菜单的左上角为何没有与选中行对齐呢.....
回复

使用道具 举报

发表于 2009-8-18 10:11:22 | 显示全部楼层
对齐不了,因为菜单是QWidget的,菜单不能构建到QTreeView中,我对如何定义QTreeView的大小和QWidget同步头疼,最后给它定义了一个屏幕的大小,那个提示有误,应该是你当前选择的对象是。受到你的提醒,我可能要了解一下Qt父子进程的部份。

[ 本帖最后由 haulm 于 2009-8-18 10:15 编辑 ]
回复

使用道具 举报

发表于 2009-8-18 13:16:29 | 显示全部楼层
添加layout,自动调节大小

什么父子进程啊?用多线程了?
回复

使用道具 举报

发表于 2009-8-18 15:26:19 | 显示全部楼层
原帖由 stdio 于 2009-8-18 13:16 发表
添加layout,自动调节大小

什么父子进程啊?用多线程了?

我用了QProcess进程,但是如果把几十个服务全部刷新其状态,需要近5秒时间,这个时间内UI没能显示出来,暂时不懂怎么处理,我把上面的图片更新了一下,可以看到现在的样子,整个显示界面给服务查询给拖延了5秒,看来也得象nihui一样先显示界面,然后慢慢查询更换信息。

[ 本帖最后由 haulm 于 2009-8-18 15:38 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-8-18 15:36:20 | 显示全部楼层
原帖由 haulm 于 2009-8-18 15:26 发表

我用了QProcess进程,但是如果把几十个服务全部刷新其状态,需要近5秒时间,这个时间内UI没能显示出来,暂时不懂怎么处理。


参考我的那个代码好了,虽然也需要两秒钟把所有的 qprocess fork 完才能显示 UI,至少 UI 不会 freeze 那么久....
更好点就做个进度条~~~
回复

使用道具 举报

发表于 2009-8-18 15:41:14 | 显示全部楼层
原帖由 nihui 于 2009-8-18 15:36 发表


参考我的那个代码好了,虽然也需要两秒钟把所有的 qprocess fork 完才能显示 UI,至少 UI 不会 freeze 那么久....
更好点就做个进度条~~~

你的代码没有注释,看起来吃力,我觉得没必要先查询服务,可以先把界面显示出来先。
回复

使用道具 举报

发表于 2009-8-18 15:45:43 | 显示全部楼层
原帖由 nihui 于 2009-8-18 03:36 PM 发表


参考我的那个代码好了,虽然也需要两秒钟把所有的 qprocess fork 完才能显示 UI,至少 UI 不会 freeze 那么久....
更好点就做个进度条~~~

先显示一个窗口提示“查询服务状态中……”之后 5 秒杀掉这个窗口再进入界面不就行了……
回复

使用道具 举报

发表于 2009-8-18 15:46:08 | 显示全部楼层
这是treeview数据处理代码,看来这部份要改,必需要有新的事件等界面显示后再去查询修改。
for (i=0;i<items.size();i++)
        {
            QProcess info;
            QString program;
            program="service "+items.at(i)+" status";
            qDebug()<<program;
            info.start(program);
            info.waitForFinished(6000);
            switch(info.exitCode())
            {
                    case 0:
                        status0.append(tr("开启"));
                        break;
                    case 3:
                        status0.append(tr("关闭"));
                        break;
                    default:
                        status0.append(tr("未知"));
                        break;
                    }
            qDebug()<<status0.at(i);
        }
回复

使用道具 举报

 楼主| 发表于 2009-8-18 15:53:49 | 显示全部楼层
  1. info.waitForFinished(6000);
复制代码
阻塞 gui 的代码....
原先我也这样用,后来改用 new QProcess,然后 connect finished() 信号
回复

使用道具 举报

发表于 2009-8-18 16:04:51 | 显示全部楼层
connect( p, SIGNAL( finished( int, QProcess::ExitStatus ) ),it.key(), SLOT( fetchStatusFinished( int ) ) );这个能解释一下么?it.key()?
回复

使用道具 举报

 楼主| 发表于 2009-8-18 16:32:45 | 显示全部楼层
原帖由 haulm 于 2009-8-18 16:04 发表
connect( p, SIGNAL( finished( int, QProcess::ExitStatus ) ),it.key(), SLOT( fetchStatusFinished( int ) ) );这个能解释一下么?it.key()?


qprocess 结束后发起 finished()。
我用了个 hash 来存服务信息的,一个服务对应于 gui 中的一行 qtreewidgetitem。
it.key() 收到信号,然后会去更改服务对象的 m_status 值。
gui 那边也会收到信号,如果总共收到的信号数量差不多等于服务数量的话,就会按照每个服务对象的 m_status 去刷新 gui 中对应的那个 qtreewidgetitem。(不要每次收到信号都去刷新服务信息)

不知道有没有更好的处理办法,我只做到这些...
回复

使用道具 举报

发表于 2009-8-18 16:56:20 | 显示全部楼层
我用的是model/view方式,所以我一时搞不懂如何刷新或修改某一项的显示,真是头疼。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 22:27 , Processed in 0.038972 second(s), 14 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表