-
想不出好的名字,还是继续用lighthouse这个名字吧,毕竟和Qt Lighthouse学习(二)内容相连。
注:本文内容基于现阶段的Qt5源码,等Qt5正式发布时,本文的内容可能不再适用了。 2011.09.11
QPA插件加载
Qt5所有的gui程序都将依赖一个 qpa 插件(QGuiApplication初始化时将会加载qpa插件)。
- 程序如何知道去哪儿找插件呢?
- 又如何知道加载哪一个插件呢?
路径
-
命令行参数:-platformpluginpath
-
环境变量:QT_QPA_PLATFORM_PLUGIN_PATH
-
常规插件路径(QCoreApplication::libraryPaths())下的platform子目录
-
恩,常规路径很复杂,详见:Qt 插件路径(笔记)
-
QLibraryInfo::location(QLibraryInfo::PluginsPath)
- 文件:/qt/etc/qt.conf中设置的路径
- 环境变量:QT_PLUGIN_PATH
- 编译Qt时生成的 src/corelib/global/config.cpp 中写死的路径
- 可执行程序自身所在路径
- 可执行程序路径下qt.conf设置的路径
- 手动调用 QCoreApplication::addLibraryPath()设置的路径
- 环境变量QT_QPA_PLATFORM_PLUGIN_PATH设置的路径以及-platformpluginpath指定的路径
-
插件名
-
命令行参数:-platform
-
环境变量:QT_QPA_PLATFORM
-
编译Qt源码时定义的宏:QT_QPA_DEFAULT_PLATFORM_NAME
- 默认插件名:
- MAC 平台下的 “cocoa”
- WIN 平台下的 “windows”
- 其他 平台下 "xcb"
QWindow
QWidget和QApplication都从QtGui模块中移走了(移到了QtWidgets模块)。那么如何使用QtGui模块写一个最简单的界面呢?
需要使用 QWindow 和 QGuiApplication,一个简单的例子:
- widget.h
#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
- window.cpp
#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);
}
- main.cpp
#include <QtGui/QGuiApplication>
#include "window.h"
int main(int argc, char *argv[])
{
QGuiApplication a(argc, argv);
Window w;
w.show();
return a.exec();
}
Qt5 QPA插件加载机制详解
本文详细解析了Qt5中QPA插件的加载路径和选择过程,包括命令行参数、环境变量、常规路径及插件名的配置方式。
535

被折叠的 条评论
为什么被折叠?



