想不出好的名字,还是继续用lighthouse这个名字吧,毕竟和Qt Lighthouse学习(二)内容相连。
注:本文内容基于现阶段的Qt5源码,等Qt5正式发布时,本文的内容可能不再适用了。 2011.09.11
Qt5所有的gui程序都将依赖一个 qpa 插件(QGuiApplication初始化时将会加载qpa插件)。
命令行参数:-platformpluginpath
环境变量: QT_QPA_PLATFORM_PLUGIN_PATH
常规插件路径(QCoreApplication::libraryPaths())下的platform子目录
恩,常规路径很复杂,详见:Qt 插件路径(笔记)
QLibraryInfo::location(QLibraryInfo::PluginsPath)
命令行参数:-platform
环境变量:QT_QPA_PLATFORM
编译Qt源码时定义的宏:QT_QPA_DEFAULT_PLATFORM_NAME
QWidget和QApplication都从QtGui模块中移走了(移到了QtWidgets模块)。那么如何使用QtGui模块写一个最简单的界面呢?
需要使用 QWindow 和 QGuiApplication,一个简单的例子:
#ifndef WINDOW_H #define WINDOW_H #include <QtGui/QWindow> class Window : public QWindow { Q_OBJECT public: Window(QWindow *parent = 0); protected: void exposeEvent(QExposeEvent *); void resizeEvent(QResizeEvent *); private: void render(); QBackingStore *m_backingStore; }; #endif // WINDOW_H
#include "window.h" #include <QtGui/QPainter> #include <QtGui/QBackingStore> Window::Window(QWindow *parent) : QWindow(parent) { setGeometry(QRect(10, 10, 640, 480)); m_backingStore = new QBackingStore(this); } void Window::exposeEvent(QExposeEvent *) { render(); } void Window::resizeEvent(QResizeEvent *) { render(); } void Window::render() { QRect rect(QPoint(), geometry().size()); m_backingStore->resize(rect.size()); m_backingStore->beginPaint(rect); QPainter p(m_backingStore->paintDevice()); p.drawRect(rect); m_backingStore->endPaint(); m_backingStore->flush(rect); }
#include <QtGui/QGuiApplication> #include "window.h" int main(int argc, char *argv[]) { QGuiApplication a(argc, argv); Window w; w.show(); return a.exec(); }