如何在基于 Qt 的 Autodesk Maya 插件中使用相对路径?
How to use relative paths in a Qt-based Autodesk Maya plug-in?
我正在尝试使用 Qt 为 Maya 2016 构建插件,但我不确定如何使用相对路径来引用我需要的特定资产。
在我的插件代码中,我使用 QUiLoader
和 QFile
加载一个 my_ui.ui
文件,其中包含我预先设计的对话框 window由 Qt Designer 制作:
QUiLoader loader;
QFile file("my_ui.ui");
file.open(QFile::ReadOnly);
fForm = loader.load(&file, this);
file.close();
my_ui.ui
和我编译的plugin.so
插件在同一个目录下(我用的是Linux)。
任何类型的相对路径(./
、.
)都可以让我知道 Maya 运行 所在的位置,这是可以理解的。但是有没有办法获取我的 .so
插件本身的路径?
我自己想出了解决方案:
在我的 Qt 项目 .pro
文件中,我添加了以下行:
FORMS += my_ui.ui
RESOURCES += my_ui.qrc
我添加了一个新文件 my_ui.qrc
,其中包含:
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>my_ui.ui</file>
</qresource>
</RCC>
.qrc
资源集合文件列出了我的应用程序的依赖项,并将 RESOURCES
行添加到我的 .pro
文件告诉 qmake 将我的资源文件编译成最终的二进制文件。
然后在我的应用程序中,我修改了 QFile 构造函数以使用资源路径:
QFile file(":/my_ui.ui");
我通过查看 Maya devkit Qt 示例和 Qt 资源系统文档 (http://doc.qt.io/qt-5/resources.html) 获得了此信息。
我正在尝试使用 Qt 为 Maya 2016 构建插件,但我不确定如何使用相对路径来引用我需要的特定资产。
在我的插件代码中,我使用 QUiLoader
和 QFile
加载一个 my_ui.ui
文件,其中包含我预先设计的对话框 window由 Qt Designer 制作:
QUiLoader loader;
QFile file("my_ui.ui");
file.open(QFile::ReadOnly);
fForm = loader.load(&file, this);
file.close();
my_ui.ui
和我编译的plugin.so
插件在同一个目录下(我用的是Linux)。
任何类型的相对路径(./
、.
)都可以让我知道 Maya 运行 所在的位置,这是可以理解的。但是有没有办法获取我的 .so
插件本身的路径?
我自己想出了解决方案:
在我的 Qt 项目 .pro
文件中,我添加了以下行:
FORMS += my_ui.ui
RESOURCES += my_ui.qrc
我添加了一个新文件 my_ui.qrc
,其中包含:
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>my_ui.ui</file>
</qresource>
</RCC>
.qrc
资源集合文件列出了我的应用程序的依赖项,并将 RESOURCES
行添加到我的 .pro
文件告诉 qmake 将我的资源文件编译成最终的二进制文件。
然后在我的应用程序中,我修改了 QFile 构造函数以使用资源路径:
QFile file(":/my_ui.ui");
我通过查看 Maya devkit Qt 示例和 Qt 资源系统文档 (http://doc.qt.io/qt-5/resources.html) 获得了此信息。