* система ресурсов поддерживается с версии PQEngine 0.4 *

* данная статья актуальна для PQEngine версии 0.5.1 или новее *

Чтобы связать с приложением ресурсы (пиктограммы, текстовые файлы и т.д.), в директории с проектом необходимо создать поддиректорию с именем "res" и скопировать в неё необходимые файлы.

 

Иерархия файлов

PQBuilderProjects/
    untitled1/
        res/
            icons/
                exit.png
            texts/
                file.txt
        main.php
        untitled1.pqb

Файлы ресурсов из дериктории res будут являться частью дерева исходников приложения.

Ресурсы доступны в приложении под тем же именем, под которым они находятся в дереве исходников, с помощью префикса :/%PROJECT_NAME%/. Например, путь :/untitled1/icons/exit.png даст доступ к файлу exit.png, который располагается в директории %PROJECT_PATH%/res/icons/exit.png.

Использование ресурсов в приложении

Для обращения к ресурсам следует использовать один из двух зарегистрированных в PQEngine методов:

  1. Метод для передачи ресурсов функциям PHP
    Для обращения к ресурсу через такие функции, как include, require, file_get_contents и д.р., необходимо в пути к ресурсу добавить протокол qrc://
    // загрузка файла MyButton.php из директори res/myClasses/
    require("qrc://myClasses/MyButton.php");
    $myButton = new MyButton;
    
    // загрузка текста из файла button_text.txt из директории res/texts
    $myButton->text = file_get_contents("qrc://texts/button_text.txt");
  2. Метод для передачи ресурсов объектам Qt
    Для передачи ресурса объекту Qt, следует использовать функцию R
    // загрузка иконки icon.png из директори res/icons/32x32/
    $label = new QLabel;
    $label->icon = R("text/button_text.txt");
    
    // Но! Загрузка бинарных данных должна производится по протоколу qrc://
    $data = file_get_contents("qrc://text/button_text.txt");
    $pixmap = new QPixmap;
    $pixmap->fromRawData($data); 

Будьте внимательны! Не рекомендуется использовать устаревшие методы обращения к ресурсам через функции pqread, pqinclude, а так же через установку пути с помощью префикса :/%CORENAME%/

Дополнительные примеры:

/* ... */
$label = new QLabel;
$label->icon = ":/untitled1/icons/exit.png"; // рабочий вариант (плохой)
$label->icon = R("icons/exit.png"); // рабочий вариант (правильный)
$label->text = file_get_contents("qrc://texts/file.txt"); // рабочий вариант (правильный)

$label->icon = R(":/icons/exit.png"); // неправильно!
$label->icon = R("/icons/exit.png"); // неправильно!
$label->text = file_get_contents(":/untitled1/texts/file.txt"); // неправильно!
/*
 * ... 
 */
// рабочий вариант для файла res/source.php
include("qrc://source.php"); 

// рабочий вариант для файла res/some/long/path/source.php
include("qrc://some/long/path/source.php");

// НЕРАБОЧИЕ ВАРИАНТЫ!
include(":/source.php");
include(R("source.php"));
include(R("some/long/path/source.php"));
/* ... */
comments powered by HyperComments