QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1793|回复: 14

着手去写服务管理器了,但是对Qt4 的 treewidget 比较头疼

[复制链接]
发表于 2009-8-13 17:16:41 | 显示全部楼层 |阅读模式
我暂时没有放在外部文件去读取,我感觉这种写法太笨了,记流水账一样,但一时还想不出更好的方法来。
我想应该是把数据放到文本去,然后读取放入QStringList,这样可以反复使用一个QStringList生成新的列,就不是现在这样。
  1. #include <QtGui>
  2. int main(int argc, char *argv[]) {
  3.     QApplication app(argc, argv);
  4.     QTreeWidget *treeWidget = new QTreeWidget;
  5.     treeWidget->setWindowTitle(QString::fromLocal8Bit("Magic Linux 服务管理器"));
  6.     treeWidget->resize(800, 600);
  7.     QStringList columnTitle;
  8.     columnTitle.append(QString::fromLocal8Bit("服务"));
  9.     columnTitle.append(QString::fromLocal8Bit("说明"));
  10.     treeWidget->setHeaderLabels(columnTitle);
  11.     QStringList Column0;
  12.     Column0.append("acpid");
  13.     Column0.append(QString::fromLocal8Bit("高级电源管理"));
  14.     QTreeWidgetItem *child = new QTreeWidgetItem(Column0);
  15.     child->setIcon(0, QIcon("/usr/share/icons/hicolor/48x48/apps/gparted.png"));
  16.     treeWidget->addTopLevelItem(child);

  17.     QStringList Column1;
  18.     Column1.append("avahi-daemon");
  19.     Column1.append(QString::fromLocal8Bit("Avahi 是 zeroconf 协议的实现,它是一个轻量级的服务发现协议,用于注册和寻找附近的可用协议、设备"));
  20.     QTreeWidgetItem *child1= new QTreeWidgetItem(Column1);
  21.     child1->setIcon(0, QIcon("/usr/share/icons/hicolor/48x48/apps/gparted.png"));
  22.     treeWidget->addTopLevelItem(child1);
  23.    
  24.     QStringList Column2;
  25.     Column2.append("bluetooth");
  26.     Column2.append(QString::fromLocal8Bit("蓝牙技术是爱立信、IBM等5家公司在1998年联合推出的一项无线网络技术"));
  27.     QTreeWidgetItem *child2= new QTreeWidgetItem(Column2);
  28.     child2->setIcon(0, QIcon("/usr/share/icons/hicolor/48x48/apps/gparted.png"));
  29.     treeWidget->addTopLevelItem(child2);
  30.    
  31.     QStringList Column3;
  32.     Column3.append("crond");
  33.     Column3.append(QString::fromLocal8Bit("定时执行程序的服务,在 /etc/crontab 中可设置具体时间和程序"));
  34.     QTreeWidgetItem *child3= new QTreeWidgetItem(Column3);
  35.     child3->setIcon(0, QIcon("/usr/share/icons/hicolor/48x48/apps/gparted.png"));
  36.     treeWidget->addTopLevelItem(child3);
  37.    
  38.    QStringList Column4;
  39.     Column4.append("cups");
  40.     Column4.append(QString::fromLocal8Bit("您可以在Linux计算机上像和Windows计算机一样方便地使用打印机,而且拥有Linux的强大功能"));
  41.     QTreeWidgetItem *child4= new QTreeWidgetItem(Column4);
  42.     child4->setIcon(0, QIcon("/usr/share/icons/hicolor/48x48/apps/gparted.png"));
  43.     treeWidget->addTopLevelItem(child4);

  44.     QStringList join1;
  45.     join1.append("line join");
  46.     join1.append("child join");
  47.     QTreeWidgetItem *childx = new QTreeWidgetItem(join1);
  48.     childx->setIcon(0, QIcon("/usr/share/icons/hicolor/48x48/apps/gparted.png"));
  49.     childx->setCheckState(0, Qt::Checked);
  50.     child->addChild(childx);
  51.     treeWidget->show();
  52.     return app.exec();
  53. }
复制代码

本帖子中包含更多资源

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

×
发表于 2009-8-13 17:21:32 | 显示全部楼层
应该用另外的数据文件,不过如果是管理服务的话,管理这部分的代码还是应该先写吧。
回复

使用道具 举报

 楼主| 发表于 2009-8-13 18:00:44 | 显示全部楼层
原帖由 sejishikong 于 2009-8-13 17:21 发表
应该用另外的数据文件,不过如果是管理服务的话,管理这部分的代码还是应该先写吧。

管理部份直接调用外部指令,这个实现并不难,现在没理清思路。
回复

使用道具 举报

发表于 2009-8-13 18:39:27 | 显示全部楼层
参考KDE3 的ksysv

遍历服务目录,就可以了
回复

使用道具 举报

发表于 2009-8-13 18:43:03 | 显示全部楼层
我的一点想法:
常用的服务和服务说明存在magic服务管理器自带的文件中。
但是服务不太可能列全吧,一些不常用的需要有个可以被magic服务管理器识别的机制。
比如有个 timidity-alsa 的服务,把服务的名称和中文说明建立一个文件,安装在magic服务管理器每次启动都会找的地方(除自带的服务列表文件之外),比方说 /etc/magic-service-list/timidity-alsa.mgcserviceinfo,从中读取服务名称、说明、可用控制命令等。
回复

使用道具 举报

发表于 2009-8-13 18:46:22 | 显示全部楼层
原帖由 stdio 于 2009-8-13 18:39 发表
参考KDE3 的ksysv

遍历服务目录,就可以了


中文说明没有吧....

感觉 magic 服务管理器的服务说明是个亮点,单纯列出 acpid, avahi 之类的都不知道是干啥的。。。
回复

使用道具 举报

 楼主| 发表于 2009-8-13 19:10:28 | 显示全部楼层
原帖由 stdio 于 2009-8-13 18:39 发表
参考KDE3 的ksysv

遍历服务目录,就可以了

不准备那样写,因为未来的服务不一定会在那里体现。
我的大概想法是用sqlite来存储数据,然后读取这些数据列出magic常用的服务和中文解释,我这里指的服务并不仅仅是系统服务,还可以是一些其它的东西。最大的难点是如何进行控制,如果说只是写一个服务检索倒是不难,但要是进行控制就涉及到自身的编程基础,我这方面有点弱。我可能需要有一个数组来存储所有的服务名,然后从这个数组空间顺序读取服务,然后将服务名按照数组位置一样和列表位置进行一一对应,当列表被操作后返回的位置应该可以对应找到服务名本身。

[ 本帖最后由 haulm 于 2009-8-13 19:30 编辑 ]
回复

使用道具 举报

发表于 2009-8-13 19:58:18 | 显示全部楼层
哈哈!这点儿数据还用得着sqlite啊?

行啊,有啥新点子就尽管实现啊。

我是这样想的
看ntsysv ,系统服务的说明应该在脚本文件里面哦?

每次启动程序的时候都读取服务脚本文件,把注释弄出来。

然后读取每个运行级别里面的服务。
回复

使用道具 举报

发表于 2009-8-13 19:58:32 | 显示全部楼层


类似于这种的?
回复

使用道具 举报

发表于 2009-8-13 20:05:06 | 显示全部楼层
啊,这不是有现成的嘛~~~哈哈哈哈哈哈哈!!!

就是不知道具体是怎么实现的。

把脚本里面添加上中文就行了嘛~

[ 本帖最后由 stdio 于 2009-8-13 20:06 编辑 ]
回复

使用道具 举报

发表于 2009-8-13 20:11:06 | 显示全部楼层
原帖由 stdio 于 2009-8-13 20:05 发表
啊,这不是有现成的嘛~~~哈哈哈哈哈哈哈!!!

就是不知道具体是怎么实现的。

把脚本里面添加上中文就行了嘛~ ...


KDE 4.4+ kdeadmin 的特性列表里的东西,用的都是 pyKDE4。
除了服务管理器外,还有 分区挂载管理器、用户帐户编辑器、winecfg 的 KCM 模块。。。。

http://websvn.kde.org/branches/guidance/guidance-kde4/
回复

使用道具 举报

发表于 2009-8-13 20:34:12 | 显示全部楼层
请看附件,这是红旗linux的rfsysv,我在magic 2.1中使用。请参考一下。

本帖子中包含更多资源

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

×
回复

使用道具 举报

发表于 2009-8-13 20:36:26 | 显示全部楼层
很好很强大啊。哈哈!
回复

使用道具 举报

 楼主| 发表于 2009-8-14 20:59:54 | 显示全部楼层
原帖由 stdio 于 2009-8-13 19:58 发表
哈哈!这点儿数据还用得着sqlite啊?

行啊,有啥新点子就尽管实现啊。

我是这样想的
看ntsysv ,系统服务的说明应该在脚本文件里面哦?

每次启动程 ...

不幸的消息,写管理器的计划让nihui 破坏了。。。
写那点数据的确用不到sqlite,不过好的创作修修改改可以大用哈。
回复

使用道具 举报

发表于 2009-8-15 06:41:42 | 显示全部楼层


那可以写点儿别的嘛~~哈哈哈!
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 22:41 , Processed in 0.049014 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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