• 82818阅读
  • 196回复

qtembedded的桌面系统EMD(即Embedded desktop) [复制链接]

上一主题 下一主题
离线zzz945
 
只看楼主 倒序阅读 楼主  发表于: 2010-05-20
— 本帖被 XChinux 执行加亮操作(2010-09-03) —
       EMD(即Embedded desktop)是基于qt4的嵌入式桌面系统, 和qtopia是同一类型的软件,它的优点是小巧,
你可以从这个软件中学到构建自己的桌面系统的方法, 现在他不包含任何有用的应用软件。它和QtEmbedded
开源版本遵循同样的许可证。现在这个它才刚刚起步, 还在不断的扩展和优化中, 希望能有更多的人对它
感兴趣。

http://emd.svn.sourceforge.net/viewvc/emd/?view=tar
[ 此帖被zzz945在2010-07-04 11:33重新编辑 ]
离线zzz945
只看该作者 1楼 发表于: 2010-05-20
这是几张截图
[ 此帖被zzz945在2010-07-27 16:18重新编辑 ]
附件: jietu.tar.gz (303 K) 下载次数:890
离线chinabin
只看该作者 2楼 发表于: 2010-05-28
先下了,有空弄弄
离线passioncsu

只看该作者 3楼 发表于: 2010-05-28
多谢~  这就放到板子上试一下
离线zzz945
只看该作者 4楼 发表于: 2010-06-05
1.能够自动话编译和安装了。
2.添加了imageviewer和pdfviewer两个应用程序。
3.重构了代码。
4.对关键部分进行了自动化单元测试.

上传不了东西, 不知道什么原因
离线zzz945
只看该作者 5楼 发表于: 2010-06-10
请关注http://emd.sourceforge.net
http://qttestrunner.sourceforge.net

第2个是一个运行单元测试组的图形界面程序, 支持qtestlib
[ 此帖被zzz945在2010-07-04 12:19重新编辑 ]
离线hard_study16
只看该作者 6楼 发表于: 2010-06-11
你好,我想放到板子上面运行,但是我交叉编译出错了。抑闷啊。
离线hard_study16
只看该作者 7楼 发表于: 2010-06-11
回 4楼(passioncsu) 的帖子
你好,请问你有放到板子运行吗?
离线zzz945
只看该作者 8楼 发表于: 2010-06-11
没有过, 现在还是在qvfb下运行
离线victorsummer
只看该作者 9楼 发表于: 2010-06-12
此帖当属精华
离线yinsun_01
只看该作者 10楼 发表于: 2010-06-20
我下载了程序,编译时出现如下错误:
     'QCopChannel' was not declared in this scope
     /emd/emdesktopclient/emdesktopclient.h
 
而我注意到在该文件的前面确己包含了头文件: QCopChannel
请问你的编译环境是怎样,是否我需设置其他的参数?
我是在LINUX下QT4的集成编译环境下试的, 在交叉编译环境下,也是出现同样的错误?
多谢!
离线zzz945
只看该作者 11楼 发表于: 2010-06-20
确定你用的是QtEmbedded吗
离线yinsun_01
只看该作者 12楼 发表于: 2010-06-21
多谢你的回复!
能否有一个较为详细的编译环境的资料, 我在WINDOWS下编译时, 将qcopchannel_qws.h中的QT_NO_COP注释掉后,可以继续下去,但又出现如下错误:
      
                        /mingw32/bin/ld.exe: cannot find -lemdesktopclient
                       collect2: ld returned 1 exit status
                      mingw32-make[3]: *** [debug\helloworld.exe] Error 1
                      mingw32-make[2]: *** [debug] Error 2
                      ...
  像是没有找到lemdesktopclient库. 
离线zzz945
只看该作者 13楼 发表于: 2010-06-21
1.编译qtembedded for x86的时候我并没有裁剪, ./configure --prefix=PATH_TO_INSTALL, make, make install就安装完了
2.在Window下不行, 因为window的目录分隔是'\',  而linux是'/'。
3.emdesktopclient是emd中的所有应用程序都会用到的一个库, 在应用程序的.pro文件中指定了路径(linux风格的路径), 编译时找不到可能就是2造成的。
离线yinsun_01
只看该作者 14楼 发表于: 2010-06-24
在LINUX编译时,会出现如下错误:
   undefined reference to 'QCopChannel::QCopChannel(QString const&, QObject*)
   emdesktopclient.h 41
 
请能一次性详细说明你的编译环境, 或你的调试环境. 以避免不必要的浪费精力.
离线zzz945
只看该作者 15楼 发表于: 2010-06-25
qtembedded4.5.2,   我的fedora11,  gcc4.4.1,  我想你应该重新编译一下Qt,  你的qcopchannel_qws.h中有QT_NO_COP, 就说明编译qt时, 没有把这模块编译进去, 你只注释掉是没用的, 只会骗过compiler, 而骗不过linker,  因为Qt的动态库里还是没有那个模块, 感谢你的尝试, 希望能够帮得到你
离线yinsun_01
只看该作者 16楼 发表于: 2010-06-26
多谢你的回复!
我重新编译了QT后,可以继续下去, 但出现了三个错误, 都是在moc_PinyinFrame.cpp中, 其中的第83和93行的错误可以按照你说明的方法, 将this用static_cast<QFrame*>(this)代替后可以消去, 但第55行的错误,并没有this这个参数, 请看看怎样能消去?
    出现的错误信息为:
                 'QOject' is an ambiguous base of 'QPinyinFrame'     moc_PinyinFrame.cpp 55

    moc_PinyinFrame.cpp 55行的内容是:

     53    const QMetaObject *QPinyinFrame::metaObject() const
     54    {
     55         return QObject::d_ptr->metaObject ? QObject::d_prt->metaObject : & staticMetaObject ;
     56    }
   
      ...

  请能告知,多谢!

离线yinsun_01
只看该作者 17楼 发表于: 2010-06-26
多谢你的回复!

我重新编译了QT后,可以继续下去, 但出现了三个错误, 都是在moc_PinyinFrame.cpp中, 其中的第83和93行的错误可以按照你说明的方法, 将this用static_cast<QFrame*>(this)代替后可以消去, 但第55行的错误,并没有this这个参数, 请看看怎样能消去?

出现的错误信息为:

'QOject' is an ambiguous base of 'QPinyinFrame' moc_PinyinFrame.cpp 55



moc_PinyinFrame.cpp 55行的内容是:



53 const QMetaObject *QPinyinFrame::metaObject() const

54 {

55 return QObject::d_ptr->metaObject ? QObject::d_prt->metaObject : & staticMetaObject ;

56 }



...



请能告知,多谢!

离线zzz945
只看该作者 18楼 发表于: 2010-06-26
出错的代码是我移植过来的, 本身由于多重继承了两个QObject的派生类, 才产生这些问题, 编译时经常要改这种错误真是很恶心, 这个类确实需要重新设计, 但现在忙没时间, 假期再弄。 在你那出现的这错误我这是没有的,  我看了, 是你我的moc生成的代码不一样, 我想你的错误可以通过把QObject::d_ptr改为QFrame::d_ptr来解决, 这样就能消除ambiguous(二义性)。 请暂时容忍这种丑陋的解决方案, 试一下, 等你的回复
离线yinsun_01
只看该作者 19楼 发表于: 2010-06-27
多谢你的及时回复.
我按照你的方法作了修改, 可以编译通过, 并且在ARM板上运行成功了.
请能详细描述各个应用程序在emdesktop-running-environment目录下的存放结构, 因运行make install后无效果. 我需要将所有应用程序放在一个目录下再作进一步的实验.现在只能看到大钟,而其他的界面的空的.
多谢!




离线zzz945
只看该作者 20楼 发表于: 2010-06-27
你应该首先 设好EMD_RUNNING_DIR环境变量到你主机上的emdesktop-running-environment文件夹, 这样make install就会把生成的程序安装进这个文件夹, 然后在把这个文件夹弄到板上, 进入这个文件夹启动emd
离线yinsun_01
只看该作者 21楼 发表于: 2010-06-27
多谢!
设置好环境变量EMD_RUNNING_ENVIRONMENT后,可以在APP界面上看到应用程序及图标.
但我在点击图标想运行该程序时, 该图标只是上下移动了一次,而没有去执行程序? 这个是什么原因?


离线zzz945
只看该作者 22楼 发表于: 2010-06-27
不是EMD_RUNNING_ENVIRONMENT而是EMD_RUNNING_DIR,  你看看你的emdesktop-running-environment/app文件夹下有没有程序, 没有就会在执行程序时找不到程序
[ 此帖被zzz945在2010-06-27 15:48重新编辑 ]
离线yinsun_01
只看该作者 23楼 发表于: 2010-06-27
现在可以进入程序了, 多谢!
但怎样输入汉字呢? 我在进入TEXTEDIT后, 找不到汉字输入的图标. 也无法通过键盘输入字符.
因我是在ARM板上作的实验, EMD系统的键盘输入是否支持软键盘?

离线zzz945
只看该作者 24楼 发表于: 2010-06-27
EMD中的是murphypinyin中文输入法, 它可以支持软键盘, 但我移植过来的版本目前没有软键盘, 很遗憾还有很多不足, 在qvfb下是通过ctrl+space启动输入法的
[ 此帖被zzz945在2010-06-27 21:05重新编辑 ]
离线yinsun_01
只看该作者 25楼 发表于: 2010-06-27
多谢!己经做得很好了.
我再试试键盘部份, 因嵌入式系统都不会有标准键盘,故软键盘就很重要了. 期待你新的版本.有问题再向你请教.



离线yinsun_01
只看该作者 26楼 发表于: 2010-06-30
请问你移植的MurphyPinyin是哪一个版本, 我看到在实用中有许多错误, 如"退格键"无法用等.
如果要增加对软键盘的支持, 你有何好的建议? 多谢!
离线zzz945
只看该作者 27楼 发表于: 2010-06-30
哪一个版本还真不好说, 我好像记得MurphyPinyin原本是QTopia的, 某人移植到了QtEmbedded上, 我就是拿某人的稍微改了一下而已。 添加软键盘其实很简单, 首先写一个软键盘的界面, 各个键都是个按钮, 鼠标点在按钮上就调用这个函数
void QWSServer::sendKeyEvent ( int unicode, int keycode, Qt::KeyboardModifiers modifiers, bool isPress, bool autoRepeat )   [static]

Sends the given key event. The key is identified by its unicode value and the given keycode, modifiers, isPress and autoRepeat parameters.

Use this function to send key events generated by "virtual keyboards" (note that the processKeyEvent() function is impelemented using this function).

The keycode parameter is the Qt keycode value as defined by the Qt::Key enum. The modifiers is an OR combination of Qt::KeyboardModifier values, indicating whether Shift/Alt/Ctrl keys are pressed. The isPress parameter is true if the event is a key press event and autoRepeat is true if the event is caused by an auto-repeat mechanism and not an actual key press.

Note that this function can only be used in the server process.

See also processKeyEvent() and Qt for Embedded Linux Character Input.

在我这退格键好像没有问题
[ 此帖被zzz945在2010-06-30 20:52重新编辑 ]
离线磐石
只看该作者 28楼 发表于: 2010-07-01
好东西,多谢分享,经过修改编译通过,能下到板子了,接下来的时间就好好吸收你的思想.
不怕做不到,只怕想不到
离线zzz945
只看该作者 29楼 发表于: 2010-07-01
不用谢, 以后还得靠各位得努力把它做得更好
离线磐石
只看该作者 30楼 发表于: 2010-07-01
看了一晚上你写的代码,感觉相当精巧,对着你的代码查帮助文档,学到了好多QT中类及API的用法,现在大致思想看明白了,一些细节慢慢研究。先请教一个问题,就是QSS文件怎么写,界面的颜色怎么搭配,就是那个参数怎么设置,比方说你写的QSS文件中的一条
QTabBar::tab:selected, QTabBar::tab:hover {
        background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5,
                            fx:0.5, fy:0.5, stop:0 #202020, stop:1 #784D4D);
}
里面的数字是怎么弄出来的,你有这方面的资料吗,有的话,希望楼主能传我一份,panshi5208@163.com
万分感谢
不怕做不到,只怕想不到
离线zzz945
只看该作者 31楼 发表于: 2010-07-02
qt的帮助文档里有qss的详细例子, 我没有其他的资料了, qradialgradient在qt里也是有对应的函数的, 至于里面的参数, 都是首先查文档看某参数是做什么的, 然后参考例子并改下例子里的参数试一下, 颜色都是自己觉得哪种颜色好就用哪种, 至于怎样获取颜色的rgb值, 我的方法是, 在我的linux中, 找个改变任务栏颜色的对话框出来, 在里面选择某个颜色就会有对应的rgb值出来
离线磐石
只看该作者 32楼 发表于: 2010-07-02
引用第32楼zzz945于2010-07-02 11:28发表的  :
qt的帮助文档里有qss的详细例子, 我没有其他的资料了, qradialgradient在qt里也是有对应的函数的, 至于里面的参数, 都是首先查文档看某参数是做什么的, 然后参考例子并改下例子里的参数试一下, 颜色都是自己觉得哪种颜色好就用哪种, 至于怎样获取颜色的rgb值, 我的方法是, 在我的linux中, 找个改变任务栏颜色的对话框出来, 在里面选择某个颜色就会有对应的rgb值出来

恩,好的,我自己再研究研究,我自己也在写简单的桌面系统,但我的思想很简单,主桌面界面首先运行起来,再读取应用程序文件(我把所用应用程序的可执行文件名保存在这个文件中),根据这个文件,申请对应个数的按钮控件,分布在主桌面界面上,再对每个按钮控件设置ICON,并与相应应用程序关联上,当有按钮的点击事件时,执行对应应用程序.看了楼主写的这个,感觉自己写的都还是小儿科的,C/S架构这种思想真的很好,以前我也想这么做,但都无从下手,看楼主写的这个桌面系统,对我帮助很大啊,再次感谢啊,可以的话,希望楼主能给我你的QQ号,我的是564027151,楼主愿意的话,请加一下,
不怕做不到,只怕想不到
离线zzz945
只看该作者 33楼 发表于: 2010-07-02
用qtembedded实现桌面系统其实很简单, 因为有很多工作在qtembedded中已经有实现, 比如c/s和窗口管理器, 我所作的只是充分利用qtembedded所提供的服务, 关键得类都是以qws开头得, 比如qwsserver,  认真看文档弄清楚我们可以从qtembedded提供的某个获得什么信息就尤其重要, 比如可以从qwsserver类中获得所有程序主窗口的层次等。
离线bryans

只看该作者 34楼 发表于: 2010-07-04
看不到源程序的下载连接 国
离线zzz945
只看该作者 35楼 发表于: 2010-07-04
离线xujiqiang092
只看该作者 36楼 发表于: 2010-07-26
楼主实在是太牛了!向你学习!呵呵
我也下载编译了一下,在Ubuntu+qvfb的环境下试了,可使点击“Application”页中的程序就只有图标跳了一下,然后就没了。app目录下也有那几个应用程序。我再点击一次就看到“Executing the same application twice is not supported”,说明程序已经运行起来了,可使为什么看不到界面呢?请赐教哦,呵呵
离线zzz945
只看该作者 37楼 发表于: 2010-07-26
请在编译后将emdesktopclient文件夹下生成的.so文件全拷贝到你的“QTEDIR”/lib里面, 否则应用程序会因为找不到这个动态库而不能运行, 这点现在已经在INSTALL文件里面补充说明。

再补充一下
1.EMD现在已经有软键盘(目前通过任务栏上的一个小按钮来启动输入法)。
2.在应用程序launching, raising, closing时增加了动画效果, 是用qt4.6中新增的animation framework实现的, 这就使编译它必须使用qt4.6以上的版本才可以。

以上的changes是今天才签入软件库的, 有兴趣可以重新下载, 欢迎尝试
[ 此帖被zzz945在2010-07-26 15:31重新编辑 ]
离线hangbing0203
只看该作者 38楼 发表于: 2010-07-28
能否给一下详细编译信息呢?
我也用qtembedded4.5.2,  配置也是:./configure --prefix=PATH_TO_INSTALL, make, make install
然后我在设置环境变量: export   EMD_RUNNING_DIR=
                                     export  QTEDIR=qtembedded4.5.2的安装路径。

然后我在编译的时候编译不过去呢
出现:akefile:1652: warning: ignoring old commands for target `main.o'
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -Iemdecorationplugin -Iemdesktopclient -Iemdesktopserver -Icommon/include -Iemdesktopserver/MurphyPinyin -Iemdesktopserver/MurphyPinyin/scim -Iemdesktopserver/MurphyPinyin/phrase -Iapp/pdfviewer -Itests/testappinfo -Itests/testapplicationsmanager -Itests/testmimetype -Iapp/imageviewer/src -Iapp/imageviewer/tests -I. -I. -o emdecoration.o emdecorationplugin/emdecoration.cpp
In file included from emdecorationplugin/emdecoration.cpp:1:
emdecorationplugin/emdecoration.h:4:23: error: QDecoration: No such file or directory
In file included from emdecorationplugin/emdecoration.cpp:1:
emdecorationplugin/emdecoration.h:7: error: expected class-name before ‘{’ token
emdecorationplugin/emdecoration.h:10: error: ‘QPainter’ has not been declared
emdecorationplugin/emdecoration.h:10: error: expected ‘,’ or ‘...’ before ‘*’ token
emdecorationplugin/emdecoration.h:10: error: ISO C++ forbids declaration of ‘QWidget’ with no type
emdecorationplugin/emdecoration.h:11: error: ‘QRegion’ does not name a type
emdecorationplugin/emdecoration.cpp: In constructor ‘EmDecoration::EmDecoration()’:
emdecorationplugin/emdecoration.cpp:6: error: class ‘EmDecoration’ does not have any field named ‘QDecoration’
emdecorationplugin/emdecoration.cpp: At global scope:



请问我该怎么设置环境变量呢。
离线zzz945
只看该作者 39楼 发表于: 2010-07-28
看这句-I/usr/include/qt4/QtCore就知道你并没有指定使用qte的库, QDecoration是qte特有的类, 在qt for x11里是没有的, 所以会出现上面的错误, 用export  QTDIR=qtembedded4.5.2试一试, 还有就是现在用qt4.6以下的版本是编译不过的, 因为用到了qt4.6新加入的动画类。
快速回复
限100 字节
 
上一个 下一个