本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
N9绝对是一款诺基亚献给Linux开发人员的神器,他为你提供了无穷无尽的可能。在开始释放神器的能量前,你需要做一个小小的动作,那就是激活开发者模式.
激活开发者模式
激活开发者模式很简单,你只需通过菜单 设置->安全性->开发人员模式,即可打开如下界面

将开关按钮拨到右边,系统自动会提示你安装必要的软件,最重要的是Terminal和SDK Connectivity,可以在主菜单页找到它们。Terminal可以进行liux命令行的操作,而SDK Connectivity则让你可以在手机和开发主机之间进行网络连接。
root权限
root帐号的密码是rootme 。
有些文章提到可以在Terminal中执行 $ ssh root@localhost 命令可以登录root帐号,可能只是在开发机上的情况。在行货手机上真正起作用的命令应该是
$ devel-su
这也是官方SDK开发文档中介绍的方法。
和Linux主机连接
如果觉得在手机上通过软键盘来执行命令显得自己太像2B青年的话,建议还是通过PC主机和N9进行连接。这里只介绍Linux机器的连接方法。
打开SDK Connectivity软件
利用USB线或WLAN将Linux主机和N9连接起来
你可以看到如下界面

在这里你可有得到如下信息
N9的IP为192.168.2.15,通常Linux PC端的IP为192.168.2.14
一个密码,这个密码的用户是developer
PC端的Qt SDK如果要安装和调试时会用到上面两个信息。本文不会涉及SDK,不过会介绍怎么远程登录到N9上。
ssh登录到N9
SDK Connectivity连接成功的话,就可以在PC端通过ssh连接N9了,命令是
$ ssh developer@192.168.2.15 #密码就是在SDK Connecity自动生成的,每次都会变
如果你不想每次登录都要输入密码,则可以将本机公钥拷贝到N9上。
$ ssh-copy-id developer@192.168.2.15 #若提示本地公钥文件不存在,可先执行$ ssh-keygen
这样的话,以后再执行$ ssh developer@192.168.2.15就无需输入密码了。
在你通过通过ssh登录到N9后,$ devel-su 命令进入root权限。
N9上的文件系统
进入N9后你可以大概了解一下里面的文件系统,用户生成的文件都会在MyDocs下
~/MyDocs $ pwd
/home/developer/MyDocs
~/MyDocs $ ls Pictures/ #系统自带的图片和截图生成的图片在这
~/MyDocs $ ls DCIM/ #照片在这
通过诺基亚软件商店安装的程序主体都在 /opt/目录下,如果你想学习学习别人的QML都怎么学习的,可以去这里参考:)
安装未验证软件
如果你想安装未经验证的软件,比如网上下载到的QQ,那么你需要通过 设置->应用程序->安装,打开如下界面

然后使能允许来自非商店来源的安装。
$ dpkg -i filename.deb
可以让你在命令行下安装一个软件。
截图软件
软件商店里带的ScreenshotMe就很好用,本文的截图都是通过它完成的。截图方法很简单,在ScreenshotMee运行后,放到后台。在你想截图的时候将手机屏幕右上角轻轻盖住一会就可以了。
将N9里的图片和照相拷贝到Linux主机的方法也很简单,只需在Linux上执行
scp -r developer@192.168.2.15:~/MyDocs/Pictures .
scp -r developer@192.168.2.15:~/MyDocs/DCIM .
就可以把图片都拷贝出来了。
更多帮助
请访问 http://harmattan-dev.nokia.com/docs/library/html/guide/html/main.html
感谢诺基亚MeeGo团队不仅提供了一个完美的手机给我们,还提供了这么优秀的文档。
by 臭虫 Tags: MeeGo, n9
Posted on December 5th, 2011 in Linux技术 | No Comments »
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
原作者liuyanghejerry 发表于本站论坛
很久以前许诺RED要写这个来着,后来各种事情冒出导致没能完成,今天履行一下诺言= =
代码大部分参考的都是libqxt的全局热键的内容,对于新手希望有所帮助。
Linux很多发行版都使用的是X11系统作为窗口系统的,比如Ubuntu 10。所以注册全局热键实际上是在X11窗口系统当中注册一个热键,作为全局热键来使用。
和Windows当中相仿,需要用到的几个API是:
XGrabKey,参考http://tronche.com/gui/x/xlib/input/XGrabKey.html
XStringToKeysym,参考http://tronche.com/gui/x/xlib/ut … StringToKeysym.html
XKeysymToKeycode,参考http://tronche.com/gui/x/xlib/ut … eysymToKeycode.html
XSync,参考http://tronche.com/gui/x/xlib/event-handling/XSync.html
XUngrabKey,参考http://tronche.com/gui/x/xlib/input/XUngrabKey.html
XSetErrorHandler,参考http://tronche.com/gui/x/xlib/ev … etErrorHandler.html
其过程是这样的:
首先,将需要注册的键值通过XStringToKeysym和XKeysymToKeycode两个函数计算得出(注意,像Ctrl这样的功能键需要自己进行枚举);
其次,使用XSetErrorHandler注册一个错误处理函数;
之后使用XGrabKey注册热键;
然后使用XSync通知X11系统更新缓存
最后恢复X11原来的错误处理函数。
XUngrabKey的过程与之类似,只不过是换了一个函数罢了。
核心代码:
static int (*original_x_errhandler)(Display* display, XErrorEvent* event);
static int my_x_errhandler(Display* display, XErrorEvent *event)
{
Q_UNUSED(display);
switch (event->error_code)
{
case BadAccess:
case BadValue:
case BadWindow:
if (event->request_code == 33 /* X_GrabKey */ ||
event->request_code == 34 /* X_UngrabKey */)
{
qDebug()<<"error:"<error_code<<"when "<request_code;
}
default:
return 0;
}
}
MyApplication::MyApplication ( int & argc, char ** argv ):QApplication (argc,argv)
{
Display* display = QX11Info::display();
Window window = QX11Info::appRootWindow();
Bool owner = True;
int pointer = GrabModeAsync;
int keyboard = GrabModeAsync;
quint32 keyCode = XKeysymToKeycode(display,XStringToKeysym("M"));
quint32 keyMod = 0;
keyMod |=ControlMask;
original_x_errhandler = XSetErrorHandler(my_x_errhandler);
XGrabKey(display, keyCode, keyMod, window, owner, pointer, keyboard);
XSync(display, false);
XSetErrorHandler(original_x_errhandler);
}
bool MyApplication::x11EventFilter ( XEvent * event )
{
XEvent* eventX = static_cast(event);
if (eventX->type == KeyPress)
{
qDebug()<<"Got you, my baby.";
Display* display = QX11Info::display();
Window window = QX11Info::appRootWindow();
quint32 keyCode = XKeysymToKeycode(display,XStringToKeysym("M"));
quint32 keyMod = 0;
keyMod |=ControlMask;
original_x_errhandler = XSetErrorHandler(my_x_errhandler);
XUngrabKey(display, keyCode, keyMod, window);
XSync(display, false);
XSetErrorHandler(original_x_errhandler);
}
return false;
}
最后提供一个可以编译的实例:hotkey.zip
运行程序后,在全局按下Ctrl+M可以在debug处收到消息,收到一次后程序即注销热键。注意,不要和其他程序冲突。
by shiroki Tags: global, hotkey, lib, Qt4, X11, 全局热键, 热键
Posted on August 1st, 2011 in C++, Linux技术, Qt技术 | No Comments »
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
Qt为不同平台提供了平台相关的事件过滤函数, 如X11下为
bool QApplication::x11EventFilter ( XEvent * event ) [virtual]
一般情况下,开发者可以通过派生QApplication,然后重写该函数获得程序得到的所有X11事件。 在其他平台上也有类似的函数可以重写。 但笔者在做Mac相关的程序时在文档中发现了这样一段话:
“
bool QApplication::macEventFilter ( EventHandlerCallRef caller, EventRef event ) [virtual]
Warning: This virtual function is only implemented under Mac OS X when against Carbon.
”
这说明在用Cocoa时, 标准的Qt方法没有办法截获程序的事件。 文档后面还描述了在Cocoa下该如何做才能得到事件:“
Cocoa uses a different event system which means this function is NOT CALLED when building Qt against Cocoa. If you want similar functionality subclass NSApplication and reimplement the sendEvent: message to handle all the NSEvents. You also will need to to instantiate your custom NSApplication before creating a QApplication. See Apple’s NSApplication Reference for more information.
”
这段话说来算是很详细具体了, 但由于笔者对Mac编程所知甚少, 一时之间还是觉得有些无所适从, 相信很多朋友跟笔者有同样的疑虑。 通过在网上查找例子和文档, 笔者终于搞定了一个小例子, 特在此和广大qter分享, 希望对大家有所帮助。 闲话少说, 上代码:
#include
#include
#include "mainwin.h"
@interface KeyLoggerApplication : NSApplication
{
}
@end
@implementation KeyLoggerApplication
- (BOOL)sendEvent:(NSEvent *)anEvent {
NSEventType type = [anEvent type];
bool handled = NO;
if (type == NSKeyUp)
{
switch( [anEvent keyCode] )
{
default:
NSLog(@"Keypressed: %d, **%@**", [anEvent keyCode], [anEvent characters]);
break;
}
}
//handle only the keys i need then let the other go through the regular channels
//this stops the annoying beep
if( !handled )
[super sendEvent:anEvent];
}
@end
int main(int argc, char* argv[])
{
[KeyLoggerApplication sharedApplication];
QApplication a(argc, argv);
MainWin mw;
mw.show();
return a.exec();
}
上面这段代码将接收到的键盘按下的事件打印到console上。除了语法是奇怪的Objective C的语法之外, 没有什么难点, 相信大家都是看得懂的。 还有一点值得提醒的地方, 就是这段代码保存的文件必须以.mm为后缀名, 也就是我们通常写的main.cpp要改成main.mm, 相应的pro文件也要修改。 pro里还要加上 “LIBS+= -framework AppKit”,因为用到了AppKit提供的NSApplication等API。
个人觉得Mac编程的这些奇怪的条条框框有点太另类,俺是非常不喜欢的。
by shiroki Tags: Mac, macEventFilter, NSApplication, NSEvent
Posted on July 15th, 2011 in C++, Qt技术, 其他平台技术 | No Comments »
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
OpenCV安装
关于OpenCV的安装,参考:
http://opencv.willowgarage.com/wiki/InstallGuide
安装文档写得无比详细, 这里就不赘述了。 简单来说就是安装CMake,然后用cmake命令去配置和编译。
最简单的命令是 “cmake .”。 这一步应该不算一帆风顺, 笔者遇到了gstreamer头文件找不到的问题。 在OpenCV的代码里搜索一番没找到gstreamer的头文件目录在哪里配置, 而笔者对cmake又非常不熟悉, 只好用了个土方法, 在/usr/include下给本机的gstreamer目录建了个link到OpenCV使用的gstreamer路径。 OpenCV使用的gstreamer路径在生成的Makefile里提到了, 是/usr/include/gstreamer-0.10, 这个路径是从哪儿得到的这一点很神奇…谁要是知道的请不吝赐教啊。 笔者电脑中的路径则为/usr/inlcude/gstreamer-0.10-a, 故建立链接如下:
ln -s /usr/include/gstreamer-0.10-a /usr/include/gstreamer-0.10
代码例子
OpenCV里带了很多的sample, 在samples目录下, 其中一个引起了笔者的注意, 那就是samples/cpp/Qt_sample。 简单看了看代码, OpenCV里已经实现了和Qt的集成, 里面用Qt的API写了widget,可以直接把摄像头取得的内容显示在Qt的widget里。
但这个例子工程似乎并没有做好, 编译过程实在是太曲折了, 到目前还没找到方法编译成功, 报的错误是undefined reference。 第一个遇到的问题是默认的编译选项不会去编译samples目录, 为了寻找合适的编译选项颇费了点脑筋(因为笔者对cmake基本上可以说是一窍不通的…汗)。 尝试单独编译samples目录, 失败了, 报了个莫名其妙的cmake版本的问题。 估计是有些依赖的东西是需要顶层目录里读取的。 继续查找相关的脚本和配置, 发现CMakeList.txt里提到了一个BUILD_EXAMPLES变量, 当此变量为真值时会编译samples目录。 但笔者绞尽脑汁也没想出来怎么才能从外部配置这个值, 是用环境变量? cmake参数? 都试了, 没一个管用的。 找来找去发现了OpenCV的文档里有个例子,说明了如何设置变量,是在cmake的命令行传入 -D BUILD_EXAMPLES=ON这样的方式。 如此一来build整个工程时就会自动为samples目录创建Makefile。所以configure的命令变成:
cmake -D BUILD_EXAMPLES=ON .
生成的例子都在OPENCV_DIR/bin下,大家可以运行看看。(不包括Qt_sample这个例子)
在Qt中使用OpenCV
Qt程序要想用OpenCV的函数需要将opencv的头文件和库在工程pro文件里配置一下,添加INCLUDEPATH和LIBS,具体的方法参考:
http://www.opencv.org.cn/index.php/%E5%9C%A8Qt%E4%B8%AD%E4%BD%BF%E7%94%A8OpenCV%E5%BA%93
另外有一篇更实用更详细的文章, 还提供几个很好的例子, 是绝佳的参考。 大家有问题就仔细看这篇文章, 一般都能得到解答:
http://code.google.com/p/qt-opencv-multithreaded/wiki/Documentation
by shiroki Tags: cmake, OpenCV, Qt4
Posted on June 20th, 2011 in C++, Linux技术, Qt技术 | 3 Comments »
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
笔者以前撰写过一篇关于QPlainTextEdit计算和绘制行号的文章, 里面详细讲述了遍历QPlainTextEdit的每一行及其位置的方法。 最近遇到一个问题是要为QTextEdit实现相同的功能。 经过实践发现, 原理相同但使用的函数略有不同, 特此memo, 希望对广大qter有用。
如果没有阅读过笔者前文的, 请自行复习: 计算和绘制QPlainTextEdit的行号
针对QTextEdit的代码版本列举如下:
QPainter painter(w);
QTextBlock block = document()->begin();
int top = 0;
QTextCursor cursor(block);
cursor.setPosition(0);//move to the beginning of the document
int linenum = 0;
while(linenum < document()->lineCount())
{
for( int i = 0 ; i < block.lineCount(); i ++) { color += 50; color %= 255; QColor pc(color,color,color); QTextLine line = block.layout()->lineAt(i);
painter.fillRect( block.layout()->position().x(), block.layout()->position().y(), line.width(), line.height(), pc);
qWarning() << linenum << block.layout()->position() << color;
linenum ++;
}
block = block.next();
if(!block.isValid())
{
break;
}
}
其实比较两者, 其相似程度达到95%以上。 只有一点需要提示注意, 那就是QTextLine的位置信息(x、y,rect等)是相对于当前QTextBlock而言, 所以需要按照block的位置信息相应位移才是正确的值。
这篇blog比较简单, 仅做memo用。
by shiroki Tags: Qt4, QTextEdit
Posted on June 16th, 2011 in C++, Qt技术 | 2 Comments »
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
在前面到系列文章中,笔者只给了Native Quick Widget二星的评价,现在看来,这是一个非常肤浅的认识,在没有深入源码和具体功能到前提下,仅仅依靠界面来判断是非常愚蠢到行为。
这也提示了笔者,每个开源项目都有存在都有它到可取之处,由于开源者无私到分享,才能铸就出更好的软件,提供更好到代码逻辑。
这套Native Quick Widgets也是,它的存在价值并不是提供了美仑美焕的界面,而是提供了在目前到QtQuick中缺失的几个重要功能。
这几个功能作为触摸屏的移动设备开发来说,并没有非存在不可的的价值,但是一旦将QML应用于桌面开发,就显示出巨大的影响。
很显然,Native Quick Widgets的作者应该是使用QML进行了桌面软件开发或者在这方面的尝试,因此意识到了这方面的不足,才有这套组件的出现。
首先对这套QML组件进行最基本的分析,通过阅读源码发现,它提供了7个自定义QML元素:
1.Button元素
2.CheckBox元素
3.CursorArea元素
4.LineEdit元素
5.MenuAction元素
6.Menu元素
7.ProgressBar元素
8.ScrollBar元素
除了这些元素,还提供了7个QML组件:
1.Button.qml
2.ContextMenu.qml
3.ProgressBar.qml
4.ScrollBar.qml
5.CheckBox.qml
6.LineEdit.qml
7.ScrollArea.qml
逐一对这些进行分析,就可以发现这些组件提供的功能对于进行桌面开发的重要意义,从上面列出的QML组件和QML元素可以抽取出这些功能点:
1.最基本的按钮,用于用户的事件触发
2.输入编辑框,用于用户的输入
3.进度条,用户显示一个事件的处理进度
4.菜单和菜单动作,用于区域的用户事件触发
5.滚动条和滚动区域,用于查看可视范围外的界面
6.鼠标显示区域,用于改变鼠标显示的形状
Read the rest of this entry »
by qpang Tags: QML, Qt4, QtQuick
Posted on May 9th, 2011 in Qt技术 | 2 Comments »
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
原文: Qt Lighthouse & Wayland Posted on 2011/03/23 by csslayer
Lighthouse是QtGui的一个Window System Agnostic移植(使得QtGui不了解它在什么窗口系统上运行,把处理逻辑交给了Lighthouse的插件)。
Lighthouse 直到前段时间还没有的一个特性是它没有提供在服务器和客户端同时运行Qt时的多进程的解决方案,这对于嵌入式设备是很重要的。虽然现在Qt当中有 QWS(开发嵌入式Qt程序时使用的一个窗口系统,类似X Windows的C/S结构,从而保证Qt程序的的可移植性)。但是QWS并不是一个正式的协议,从而使得QWS的服务器和客户端是紧密耦合的。
因此如果有一个现成的协议可以利用的话,就会省下Qt开发者的不少功夫,然后他们最终发现Wayland(严格说来Wayland也是一个协议)正是他们所需要的。
在过去的几个月里Qt的几名开发者都在研究Wayland,然后他创建了一个新的实验室项目Qt-Compositor,这个项目的目标是作为一个基础层让其他人完成他们自己的Wayland compositor。Qt-Compositor抽象了所有Wayland Compositor所需要的通信。
其实我想很多人关心的重点其实就是Qt现在也有一个可以demo下的Wayland支持啦。虽然开发者们更多提到的是嵌入式系统,大概也就是想让Lighthouse替代以前的QWS,Wayland在Qt嵌入式的下一步也有着重要的作用。
Lighthouse在去年10月底的时候决定和Qt的master合并,评论里面不少人其实在催xcb支持(X的c语言绑定),后面也回复有xcb现在也正在开发中。lighthouse看来将成为Qt的移植性/跨平台的下一步。


来源:
http://labs.qt.nokia.com/2011/03/18/multi-process-lighthouse/
关于wayland的介绍,我就扔两篇tualatriX的blog了做参考了:
http://imtx.me/archives/1573.html
http://imtx.me/archives/1574.html
by shiroki Tags: embedded, Lighthouse
Posted on April 1st, 2011 in Linux技术, Qt技术 | No Comments »
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等。既然Qt可能出于某种原因,不对这些进行支持,我们就只能自己写代码,调用系统相关的API了。
注意,这个是Windows篇,就说明这些代码只支持windows系统。同时,也说明肯定还有其他平台的要写。不过要等O(∩_∩)O~
在Qt要调用Windows的API其实很简单,只要在需要用到的头文件中添加#include <windows.h>即可。不过要注意,Qt仅支持win32的API,像MFC之类的是不支持的。
想要在Qt里使用全局热键,最好的办法是重载QApplication里的winEventFilter函数。这个函数是用来响应Windows系统信息的。其函数原型为virtual bool winEventFilter(MSG *msg, long *result)。当msg指针中的message(MSG结构中的一个元素)为WM_HOTKEY类型时,就是用户激发了热键。整个过程和在VC的消息响应机制很类似,只不过换成了Qt而已。
而如果我们想要添加自己的全局热键,只需要使用RegisterHotKey函数即可。其函数原型为:
BOOL RegisterHotKey( HWND hWnd, int id, UINT fsModifiers, UINT vk );
HWND类型是Windows中的窗口句柄类型,在Qt中,QWidget及其子类均可使用winId()函数得到。
第二个参数,是一个原子操作类型,用ATOM GlobalAddAtom(LPCTSTR lpString )函数得到。这也是一个Win32API,根据一个string参数可以得到一个唯一的值。使用完之后,必须使用GlobalDeleteAtom函数删除掉整个ATOM。其函数原型为ATOM GlobalDeleteAtom( ATOM nAtom )。
后面两个参数,一个是修饰键,一个是普通按键。例如,假设我们想注册Ctrl+F4这个热键组合,则fsModifiers就是MOD_CONTROL,而vk就是VK_F4。
如果注册成功,就返回true,否则,返回false。
注意,使用完之后,要使用UnregisterHotKey函数注销,否则你可能再也无法注册这个热键了!除非重启。其函数原型为:BOOL UnregisterHotKey(HWND hWnd, int id )。
ok,热键注册就完成了。当按下热键后,我们就会在QApplication里的winEventFilter函数中收到一个msg。这个msg,前面也说过,我们需要知道它的一个元素message是不是WM_HOTKEY。如果是,就证明我们收到了Windows系统的热键信息。在MSG结构中,我们可能还需要理解的元素有两个,分别是wParam和lParam。wParam是注册热键时所用的id,也就是ATOM(原子)。而lParam就是我们的热键了。其实际上是一个32位的类型,前面16位代表普通按键,后16位代表的是修饰键。
至此,Qt在Windows下使用全局热键就完成了。如果有兴趣的朋友,还可以自己尝试一下,修改或直接自己写一份代码。
如有错误,敬请指正。
我把我写的测试代码放到CuteQt论坛,有兴趣的朋友可以去下载。
http://cuteqt.org/bbs/viewthread.php?tid=1641&extra=page%3D1
by red Tags: global hotkey, hotkey, Qt, 全局热键, 热键
Posted on March 21st, 2011 in C++, Qt技术, Windows技术 | No Comments »
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
屈指一算,QML从公布到正式推出来,也将近有一年多的时间了。
虽然在很多方面,QML依然显得很新,但采用QML的项目已经越来越多了,qtmediahub就是其中之一。
本身这个项目的介绍也非常地有趣:
This is a reference implementation of XBMC intended to showcase the power and convenience of QML and as a demo for use at Qt related events more…
It is intended for research and to convey best practices when using Qt/QML. It deliberately touches as much of QML as possible in order to serve as a full fledged bleeding edge real world example.
Use at your own risk, please read the included license file and associated headers for further information
简单来说,这是一个替代XBMC的替代实现,同时也想探索及展示关于使用QML的技巧,而通过这个项目源码,也的确展示这些内容。这是截止到现在为止,笔者看到的最为复杂和庞大的使用QML的相关项目。
在qtmediahub中,不仅使用前面介绍的qt-components项目,而且也编写了自定义的相关部件,事实上,如果把该项目的QML部件单独拿出来,也足以满足其他的QML项目。并且更为重要是,qtmediahub中有完整地将数据暴露给QML层使用的过程。这些过程,可不是单纯地像文档里简单的DEMO所示,而是具有完整的数据结构,严格按照MVC过程来的。
对于想使用QML做项目的同学来说,这个项目是做参考的最好选择之一,当然,里面丰富的部件也可以作为项目部件库的参考。
by qpang Tags: QML, Qt, qtmediahub
Posted on March 18th, 2011 in Qt技术 | No Comments »
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
首先,声明下,这个不是一个连续的教程,只是对QML一系列的心得,因为在使用QML中,总会发现很多知识点。
虽然这些知识点并不连贯,但是也是宝贵的经验。
这几天在qt的labs上发布了文章QML Components for Desktop? 证实了我对于QtComponents项目的理解。 该项目的确包含了对desktop的支持,当然就是Mx部分,但是该支持放在新开的分支中。
不过,以我看来,要成熟到发布,至少是QtQuick2以后的事了,所以,现阶段还是用用官方的QtComponents就好了。
首先,要到gitorious上获取源码,地址:http://qt.gitorious.org/qt-components,使用如下命令
git clone git://gitorious.org/qt-components/qt-components.git
下载完毕后,进入源码目录,在编译前,请确保qmake在环境变量中
对QtComponets的安装,由于对应桌面版,因为需要两次编译安装,第一步是QtComponents插件,第二步是安装Mx相关以及QML。
进入源码目录后,输入命令
./configure
如果qmake能识别出,就将会进行配置的过程,如果没有,请检查环境变量的配置,然后
make
就是进行编译,编译完毕后,最后输入
sudo make install
正常执行后,就可以在你的Qt的安装目录去检查,在与lib平级的目录,有一个import目录,这是QtQuick引入后才有的目录,在下面,可以看到imports/Qt/labs/components路径,这代表QtComponents插件已经安装成功,接下来就是安装Mx插件和Mx的qml。
进入src下的mx源码目录,可以看到有mx.pro文件,很显然这跟编译Qt程序一致,只要进行如下步骤即可:
qmake #生成makefile文件
make #进行编译
sudo make install
至此,mx安装完成,同样也可以看到imports/Qt/labs/Mx的存在。
好了,接下来就可以在你的QML文件中使用官方的组件了,这其实是个很easy的过程。
by qpang Tags: desktop, QML
Posted on March 13th, 2011 in Qt技术 | 4 Comments »