snapshot 0.5.2 от 25.03.2016

малогабаритные снапшоты сборщика проектов (только основные модули и изменения)
WxMaper
User avatar
Администратор
 
Posts: 92
PQEngineCore QSettings:
  • Удалена перегрузка методов variant  value(string $key, variant $default) и
    void setValue(string $key, variant $value). Теперь все значения (кроме ключа) передаются с типом QVariant, строки сохраняются в QByteArray (позволяет сохранять бинарные данные).
PQEngineWidgets QMenu:
  • Добавлено свойство string title [ string title() | setTitle(string $title) ];
  • Добавлено свойство bool empty [ bool isEmpty() | - ];
  • Добавлен метод void setIcon(QIcon $icon). Для использования потребуется расширение PQEngine DrawKit;
  • Добавлен метод void exec(int $x, int $y);
  • Добавлен метод void popup(int $x, int $y);
PQEngineWidgets QMainWindow:
  • Добавлен метод raw saveState(int $version = 0);
  • Добавлен метод bool restoreState(raw $state, int $version = 0);
  • Добавлен метод raw saveGeometry();
  • Добавлен метод bool restoreGeometry(raw $geometry);
  • Добавлен метод void setTabPosition(int $areas, int $tabPosition);
  • Добавлен метод void tabifyDockWidget(QDockWidget $first, QDockWidget $second);
  • Добавлен метод void splitDockWidget(QDockWidget $first, QDockWidget $second, int $orientation);
  • Добавлен метод objectArray tabifiedDockWidgets(QDockWidget $dockwidget);
PQEngineWidgets QSplitter:
  • Новый класс, доступны все методы и свойства оригинального класса.
Скачать: Установка:
Скопировать в папку с установленным PQBuilder, запустить самораспаковывающийся архив и извлечь с заменой файлов.

WxMaper
User avatar
Администратор
 
Posts: 92
Пример сохранения и восстановления состояния окна:
Code:
class MainWindow extends QMainWindow {
    // путь к файлу настроек
    static $settingsFileName = __DIR__ . "/settings.ini";

    public function __construct() {
        parent::__construct();
        
        $this->restoreWindow();
        $this->initComponents();
        $this->initConnections();
    }
    
    /**
     * Восстановление состояния окна
     * @return void
     */
    private function restoreWindow() {
        if(file_exists(self::$settingsFileName)) {
            // загружаем сохранённое состояние
            $settings = new QSettings(self::$settingsFileName, QSettings::IniFormat);
            $geometry = $settings->value("geometry", "");
            $state = $settings->value("state", "");
            
            $this->restoreGeometry($geometry);
            $this->restoreState($state);
        }
    }
    
    /**
     * Инициализация компонентов
     * @return void
     */
    private function initComponents() {
        // для того чтобы сохранение состояний работало корректно,
        // виджеты должны иметь уникальные имена.
        // Префикс "_1" может быть заменён на любой другой
        // и совершенно необязателен, если у вас всего один экземпляр QMainWindow
        $this->objectName = "mainWindow_1";
        
        $this->centralWidget = new QWidget;
    
        // доквиджеты тоже должны быть именованы
        $dock = new QDockWidget("ДокВиджет", $this);
        $dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
        $dock->objectName = "dockWidget_1";
        
        $this->addDockWidget(Qt::RightDockWidgetArea, $dock);
    }
    
    /**
     * Инициализация связей сигналов со слотами
     * @return void
     */
    private function initConnections() {
        // на событие закрития окна устанавливаем 
        // функцию сохранения состояния
        $this->onClose = function() {
            $settings = new QSettings(self::$settingsFileName, QSettings::IniFormat);
            $settings->setValue("geometry", self::saveGeometry());
            $settings->setValue("state", self::saveState());
        };
    }
}

$mainWindow = new MainWindow();
$mainWindow->show();

qApp::exec();
После повторного открытия, главное окно восстановит свои размеры и позицию.

rinart73
User avatar
 
Posts: 36
Skype: art7emw
Обнаруженные баги:
  • QSplitter-а все-таки нет:
    Code:
    Uncaught Error: Class 'QSplitter' not found
  •  
  • Начиная со 2 запуска начинает появляться такое (PQBuilder при этом не крашится):
    Code:
    Cannot open translation file `D:/Program Files (x86)/PQBuilder/translations/ !.xml`
Вопрос:
Если создать QMainWindow, насоздавать в нем кучу виджетов, layout-ов, вложенностей разных, а затем удалить все переменные, ссылающиеся на эти объекты, они останутся.

А вот если создать QMenuBar, заполнить его QMenu, а затем удалить все ссылки на QMenu, их как не бывало.

Баг или норма?
Почетный страдалец фигней
Пилю load_ui_file :good2:

WxMaper
User avatar
Администратор
 
Posts: 92
[bquote=rinart73|/viewtopic.php?f=18&t=22&p=146#p146|25 мар 2016, 21:56]Если создать QMainWindow, насоздавать в нем кучу виджетов, layout-ов, вложенностей разных, а затем удалить все переменные, ссылающиеся на эти объекты, они останутся.[/bquote]
Всё правильно, объекты получившие родителей не удаляются автоматически. Когда объект отправляется в компоновщик, он автоматически получает родителя, поэтому не уничтожается вслед за удалением переменной.

На счет QMenu сказать ничего не могу, нужно код посмотреть.

zazaka
User avatar
Ответственный глюкогенератор
 
Posts: 98
Image
Унабле то лоад дынамиц либрары

WxMaper
User avatar
Администратор
 
Posts: 92
zazaka, угу :) сегодня будет исправленный снап

rinart73
User avatar
 
Posts: 36
Skype: art7emw
Ок, по поводу:
Code:
Cannot open translation file `D:/Program Files (x86)/PQBuilder/translations/ !.xml`
Если кто столкнется, удалите pqbuilder.ini из папки, запустите PQBuilder, а после того, как файл снова появится, поменяйте в нем язык на ru.
Или просто замените строчку с language на language=ru
Почетный страдалец фигней
Пилю load_ui_file :good2:

ArtMares
User avatar
 
Posts: 72
Location: Москва
[bquote=rinart73|/viewtopic.php?f=18&t=22&p=161#p161|27 мар 2016, 03:11]Если кто столкнется, удалите pqbuilder.ini из папки, запустите PQBuilder, а после того, как файл снова появится, поменяйте в нем язык на ru.
Или просто замените строчку с language на language=ru[/bquote]

Вообще на самом деле старнная ошибка так как я посмотрел код отвечающий за язык в PQBuilder, там все хорошо.
У кого нибудь еще возникала данная ошибка?
PQStudio Development Progress: 75%
Version: 0.2

WxMaper
User avatar
Администратор
 
Posts: 92
[bquote=ArtMares|/viewtopic.php?f=18&t=22&p=169#p169|28 мар 2016, 07:05]У кого нибудь еще возникала данная ошибка?[/bquote]
Да могла быть, я там в очередной раз подправил работу со строками, не совсем удачно получилось. В новом снапшоте эта ошибка должна быть исправлена.
Если содержимое pqbuilder.ini у вас будет таким:
Code:
[General]
language=ru
то все хорошо. А если что-то вроде такого:
Code:
[General]
language=@QByteArray(ru)
то нужно скачать последний снап и удалить pqbuilder.ini


Вернуться в Снапшоты

Who is online
Users browsing this forum: No registered users and 2 guests