• 1. Qt概述一.Qt的跨平台特性,嵌入式特性 二.Qt的开发简介 三.Webkit的特点 四.Js与Qt之间的调用 五.Qt的其他特性LOGO
  • 2. Qt的跨平台特性,嵌入式特性 Qt是跨平台的C++图形界面的工具包,可以方便 的应用于绝大多数的操作系统。 ◆ MS/Windows 95、Windows 98、WindowsNT 4.0、Windows 2000、Windows XP; ◆ Unix/X11 Linux、Sun Solaris、HP-UX、Compaq True64Unix、IBM AIX、SGI IRIX和很多其它X11 平台,例如linux下的KDE,UBUNTU的界面; ◆ Macintoshi Mac OSX; ◆ 嵌入式的,包含有FramBuffer 的Linux 平台,NOKIA的meego等。 LOGO
  • 3. Qt特性 Qt作为新型的GUI开发工具,具有与一般工具包所不同的特性,使他的应用非常的广泛。 面向对象 构件支持 有好的联机帮助 用户自定义 方便性 国际化 丰富的API函数 完整的一套组建 高性能的工具 可用户化的外观 优越的绘画功能 2D/3D图形润色功能
  • 4. Qt与X11的关系 Xlib构建了编写X Window程序的是最底层的功能,Qt则基于Xlib之上建立了更高层次的工具包。KDEQT库Xwindow系统/Xlib操作系统硬件与平台
  • 5. 二.Qt的开发简介 开发环境在windows,linux,mac os相同 编译方式分两种,一种是通过开发工具的编译器直接编译;另一种方式是通过qmake来进行编译,不需要写makefile,实现一次编写,不同平台编译,多平台运行; Qt的开发中最重要的一点就是“信号”与“槽”机制,也就是所谓的signal与slot;
  • 6. Qt中3个主要的基类1.QObjiect QObjiect类是所有能够处理signal,slot和时间的 Qt对象的基类 2.QApplication QApplication类负责GUI应用程序的的控制流和主要的设置,它包含主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始,结束以及会话管理,还包括系统和应用程序方面的设置。 3.QWidget QWidget类是所有用户接口对象的基类,它继承QObject类的属性。
  • 7. Qt的组件常见的Qt的组件: Button按钮 Frame框架 Dialog对话框 Geometry几何图像 Combox选择组件 顶层组件 其他(QscrollBar,QTabbar)
  • 8. ◆Signal 和 Slot声明 在所有包含signal与slot的类的声明中,都需要加上Q_OBJECT。定义为: signals: void clicked(); private slots: void animate(); ◆Signalhe Slot的连接 在signal和slot声明以后,需要用connect()函数连接起来,因为signal与slot彼此之间并不了解对方。 bool QObject::connect(const QObject* sender,const char*signal,const QObject* receiver,cont char* member)[static] 第一个和第三个参数分别指single或slot是属于哪个对象或组件的对象
  • 9. ◆signal和slot的断开连接 断开与一个对象的任何signal的任何连接 discount (myObject); 断开与一个signal的任何连接 discount (myObject, SIGNAL(mySignal())); 断开一个指定的接受者 discount (myObject, 0,SIGNAL(mySignal(),0)); ◆退出事件程序 return a.exec();
  • 10. (本页无文本内容)
  • 11. 一个简单的例子#include #include #include int main( int argc, char **argv ) { QApplication a( argc, argv ); QPushButton quit( "Quit", 0 ); quit.resize( 75, 30 ); quit.setFont( QFont( "Times", 18, QFont::Bold ) ); QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) ); a.setMainWidget( &quit ); quit.show(); return a.exec(); }
  • 12. #include 这一行包含了QApplication 类的定义。在每个使用Qt 的应用程序中都必须使用一个QApplication 对象。QApplication 管理了各种各样的应用程序的广泛资源,比如默认的字体和光标。 #include 这一行包含了QPushButton 类的定义。QPushButton 是一个经典的图形用户界面按钮,用户可以按下去,也可以放开。一个QPushButton 可以显示一段文本或者一个QPixmap
  • 13. #include 因为这个程序使用了QFont,所以它需要包含qfont.h。Qt 的字体的载入和使用都已经被高度优化了。 int main( int argc, char **argv ) { main()函数是程序的入口。几乎在使用Qt 的所有情况下,main()只需要在把控制转 交给Qt 库之前执行一些初始化,然后Qt 库通过事件来向程序告知用户的行为。 argc 是命令行变量的数量,argv 是命令行变量的数组。
  • 14. QApplication a( argc, argv ); a 是这个程序的QApplication。在任何Qt 的窗口系统部件被使用之前创建QApplication 对象是必须的。 QPushButton quit( "Quit", 0 ); 这个按钮被设置成显示“Quit”并且它自己构成了一个窗口(因为在构造函数指定0 为它的父窗口,在这个父窗口中按钮被定位)。 quit.resize( 75, 30 ); 这个按扭被设置成75像素宽,30 像素高(加上窗口系统边框)。
  • 15. quit.setFont( QFont( "Times", 18, QFont::Bold ) ); 这里我们给这个按钮选择了一个新字体,Times 字体中的18 点加粗字体。 QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit())); 这里 quit 的clicked()信号和a 的quit()槽连接起来了,所以当这个按钮被按下的时候,这个程序就退出了。 a.setMainWidget( &quite ); 这个按钮被选为这个应用程序的主窗口部件。如果用户关闭了主窗口部件,应用程序就退出了。
  • 16. hello.show(); 当你创建一个窗口部件的时候,它是不可见的。你必须调用show()来使它变为可见的。 return a.exec(); 这里就是main()把控制转交给Qt,并且当应用程序退出的时候exec()就会返回。在 exec()中,Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
  • 17. Webkit的特点 QtWebkit 只是一个浏览器框架,其核心引擎是 webkit , QtWebkit 简单的归纳为 webkit 的显示界面,即表现层和逻辑层的关系。 QtWebkit 的优势在于: 1、可移植性强。 Linux , windows , embedded linux 。 2、对 javascript 支持比较好。 3、对 css 支持比较全面。 4、封装比较好,简单易用。 5、通过BS模式实现cs模式的效果,避免js,css对浏览器差异化的影响。
  • 18. 小实例实现openkk网站调用1.main.cpp #include #include "openkkmainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); OpenKKMainWindow w; w.showMaximized();/*将窗口最大化*/ w.setWindowTitle("OpenKK"); w.show(); return a.exec(); }
  • 19. 小实例实现openkk网站调用#include "openkkmainwindow.h" #include "ui_openkkmainwindow.h" OpenKKMainWindow::OpenKKMainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::OpenKKMainWindow) { ui->setupUi(this); openKKLoadFullWeb(); } void OpenKKMainWindow::openKKLoadFullWeb() { openKKwebkit = new QWebView(this); openKKwebkit->setGeometry(0, 0, 1400,1024); openKKwebkit->load(QUrl("http://www.openkk.com:3000/net_shop_m")); }
  • 20. (本页无文本内容)
  • 21. Js与Qt之间的相互调用一.在QtWebkit的javascript里访问QObject的最关键的关键就是下面这个方法:void QWebFrame::addToJavaScriptWindowObject ( const QString &name,QObject *object ) 二.要在QtWebKit中使用JavaScript,核心的一个函数就是evaluateJavaScript(QString),参数是要执行的 JavaScript语句
  • 22. 1.javascript访问QtWebkit connect(ui.webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),this, SLOT(populateJavaScriptWindowObject())); void FormExtractor::populateJavaScriptWindowObject() { ui.webView->page()->mainFrame()->addToJavaScriptWindowObject(“tryalert”, this); } function tryalert()     {       ……..     } 注意:在js调用该QObject之前调用这个函数
  • 23. 在QtWebKit中使用JavaScripthtml文件里加入了如下js代码:
  • 24. 在QtWebKit中使用JavaScript最好是响应loadFinished(bool)信号: connect(ui.webView->page()->mainFrame(), SIGNAL(loadFinished(bool)), this, SLOT(tryalert())); ... void FormExtractor:: tryalert() {     ui.webView->page()->mainFrame()->evaluateJavaScript("tryalert();"); }
  • 25. 谢谢