snapshot 0.5.2 от 25.03.2016

малогабаритные снапшоты сборщика проектов (только основные модули и изменения)
WxMaper
Аватара пользователя
Администратор
 
Сообщения: 92
Благодарил (а): 8 раз
Поблагодарили: 4 раза
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
Аватара пользователя
Администратор
 
Сообщения: 92
Благодарил (а): 8 раз
Поблагодарили: 4 раза
Пример сохранения и восстановления состояния окна:
phpqt Код:
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
Аватара пользователя
 
Сообщения: 36
Skype: art7emw
Поблагодарили: 2 раза
Обнаруженные баги:
  • QSplitter-а все-таки нет:
    Код:
    Uncaught Error: Class 'QSplitter' not found

  •  
  • Начиная со 2 запуска начинает появляться такое (PQBuilder при этом не крашится):
    Код:
    Cannot open translation file `D:/Program Files (x86)/PQBuilder/translations/ !.xml`


Вопрос:
Если создать QMainWindow, насоздавать в нем кучу виджетов, layout-ов, вложенностей разных, а затем удалить все переменные, ссылающиеся на эти объекты, они останутся.

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

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

WxMaper
Аватара пользователя
Администратор
 
Сообщения: 92
Благодарил (а): 8 раз
Поблагодарили: 4 раза
rinart73 писал:Если создать QMainWindow, насоздавать в нем кучу виджетов, layout-ов, вложенностей разных, а затем удалить все переменные, ссылающиеся на эти объекты, они останутся.

Всё правильно, объекты получившие родителей не удаляются автоматически. Когда объект отправляется в компоновщик, он автоматически получает родителя, поэтому не уничтожается вслед за удалением переменной.

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

zazaka
Аватара пользователя
Ответственный глюкогенератор
 
Сообщения: 98
Поблагодарили: 2 раза
Изображение
Унабле то лоад дынамиц либрары

WxMaper
Аватара пользователя
Администратор
 
Сообщения: 92
Благодарил (а): 8 раз
Поблагодарили: 4 раза
zazaka, угу :) сегодня будет исправленный снап

rinart73
Аватара пользователя
 
Сообщения: 36
Skype: art7emw
Поблагодарили: 2 раза
Ок, по поводу:
Код:
Cannot open translation file `D:/Program Files (x86)/PQBuilder/translations/ !.xml`

Если кто столкнется, удалите pqbuilder.ini из папки, запустите PQBuilder, а после того, как файл снова появится, поменяйте в нем язык на ru.
Или просто замените строчку с language на language=ru
Почетный страдалец фигней
Пилю load_ui_file :good2:

ArtMares
Аватара пользователя
 
Сообщения: 72
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 5 раз
rinart73 писал:Если кто столкнется, удалите pqbuilder.ini из папки, запустите PQBuilder, а после того, как файл снова появится, поменяйте в нем язык на ru.
Или просто замените строчку с language на language=ru


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

WxMaper
Аватара пользователя
Администратор
 
Сообщения: 92
Благодарил (а): 8 раз
Поблагодарили: 4 раза
ArtMares писал:У кого нибудь еще возникала данная ошибка?

Да могла быть, я там в очередной раз подправил работу со строками, не совсем удачно получилось. В новом снапшоте эта ошибка должна быть исправлена.
Если содержимое pqbuilder.ini у вас будет таким:
Код:
[General]
language=ru

то все хорошо. А если что-то вроде такого:
Код:
[General]
language=@QByteArray(ru)

то нужно скачать последний снап и удалить pqbuilder.ini


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

Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя
cron