snapshot 0.5.2 от 26.03.2016

малогабаритные снапшоты сборщика проектов (только основные модули и изменения)
WxMaper
User avatar
Администратор
 
Posts: 92
PQEngineWidgets QLabel:
  • Исправлен баг с методом pixmap() - нельзя было получить картинку после уничтожения объекта QPixmap;
PQEngineWidgets QSplitter:
  • Исправлена невозможность использования класса.
PHPQt5:
  • Добавлена шаблонная функция, с помощью которой можно создать объект по имени класса и зарегистрировать его в PHP, при условии, что
    запрашиваемый класс был зарегистрирован (класс может быть зарегистрирован другим расширением).
    Функция позволяет создавать непрямые взаимосвязи между расширениями, когда расширения не зависят друг от друга на этапе компиляции, но могут совместо работать с классами объявленными в них.
    T* pq_createObjectT<T>(const QString &className, const QVariantList &args);
    Реальный пример использования на примере расширения PQEngineWidgets, которое не зависит от расширения PQEngineDrawKit, но может работать с его классом QPixmap:
    Code:
    PQObject *PQLabel::pixmap() const
    {
        QVariantList args;
        args << *(QLabel::pixmap());
    
        // т.к. PHP вероятнее всего уничтожил объект QPixmap вместе с переменной, а его копия 
        // по прежнему существует в QLabel, нужно пересоздать этот объект:
        PQObject *pqobject = pq_createObjectT<PQObject>("QPixmap", args);
        return pqobject;
    }
    
    Code:
        function method_one() {
            $pixmap = new QPixmap;
            $pixmap->loadFromData(file_get_contents("http://example.com/image.png"));
            
            $this->label->pixmap = $pixmap;
            // $pixmap уничтожается
            // но его копия остается в QLabel
        }
        
        function method_two() {
            // и тут мы всё-равно получим доступ к его копии
            pre($this->label->pixmap->size());
        }
    
    В качестве шаблона может выступать совершенно любой класс доступный в текущем контексте. В примере используется PQObject, но для получения ссылки на объект можно использовать и QObject, и QWidget и любой другой;
  • Исправлена функция конвертации строк при вызове методов;
Скачать Установка:
Скопировать в папку с установленным PQBuilder, запустить самораспаковывающийся архив и извлечь с заменой файлов.

WxMaper
User avatar
Администратор
 
Posts: 92
Пример работы с QSplitter:
Code:
   private function initComponents() {
        $editor1 = new QTextEdit;
        $editor2 = new QTextEdit;
        $editor3 = new QTextEdit;
        
        $split1 = new QSplitter;
        $split2 = new QSplitter;
        
        $split1->addWidget($editor1);
        $split1->addWidget($editor2);
        
        $container = new QWidget;
        $container->layout = new QVBoxLayout;
        $container->layout->addWidget($split1);
        $container->layout->setContentsMargins(0,0,0,0);
        
        $split2->setOrientation(Qt::Vertical);
        $split2->addWidget($container);
        $split2->addWidget($editor3);
        
        $this->styleSheet = '
            QSplitter::handle { 
            }
            
            QSplitter::handle:horizontal { 
                width: 8px;
                image: url(D:/horisontal.png); 
            }
            
            QSplitter::handle:vertical { 
                height: 8px;
                image: url(D:/vertical.png); 
            }
        ';
       
        $this->centralWidget = new QWidget;
        $this->centralWidget->layout = new QVBoxLayout;
        
        $this->centralWidget->layout->addWidget($split2);
    }
splitter.png
splitter.png (3.62 KiB) Viewed 4564 times

zazaka
User avatar
Ответственный глюкогенератор
 
Posts: 98
запустил я почти пустой проект 10 раз подряд .. открыл диспетчер задач .. а там почти все проекты занимают по 14.2 мегобайта в памяти. а парочка в разнобой 13.6 13.8 14.0 это почему так? и таки должно быть ??
Унабле то лоад дынамиц либрары

WxMaper
User avatar
Администратор
 
Posts: 92
zazaka писал:запустил я почти пустой проект 10 раз подряд .. открыл диспетчер задач .. а там почти все проекты занимают по 14.2 мегобайта в памяти. а парочка в разнобой 13.6 13.8 14.0 это почему так? и таки должно быть ??
Не могу сказать почему так, но это нормально и в этом нет ничего удивительного

WxMaper
User avatar
Администратор
 
Posts: 92
zazaka писал:запустил я  почти пустой  проект 10 раз подряд  .. открыл диспетчер задач ..  а там почти все проекты занимают по 14.2 мегобайта в памяти. а парочка в разнобой 13.6 13.8 14.0  это почему так?  и таки должно быть ??

zazaka
User avatar
Ответственный глюкогенератор
 
Posts: 98
При применении сплитера появляется странная фигня с отображением информации
у меня сплитер делит страничку на левую  правую
на левой у меня кнопка на правой кнопка и пара форм
так вот когда я тяну  влево сплитер залипает на левом поле потом тяну в право он отлипает  но размер правого поля не восстонавливается оно как будто   остается огромным и уходит за края программы
Обычное состояние окошка
Image


После двиганья сплитера
Image
кнопка кстати тоже такая же растянутая ...

И как только возьмёшь за край окошка и поменяшь размер окна всё сразу перерисовывается в нормальных размерах
Унабле то лоад дынамиц либрары

zazaka
User avatar
Ответственный глюкогенератор
 
Posts: 98
$this->imj = new  QImage();

пишет класс не найден (((

при записи $this->imj = new  QPixmap (); или QBrush
программа не запускается выдавая  ошибку с винды типа "Прекращена работа программы"


и картинки в формате jpg не хавает удалось только в png засунуть картинку чтобы отображалась
$this->imj = new QLabel;
$this->imj->icon = 'imj.png';
Унабле то лоад дынамиц либрары

zazaka
User avatar
Ответственный глюкогенератор
 
Posts: 98
хм как ни странно но QPixmap (); больше не вызывает падения программы.. и даже всё работает .. и картинка подключается и ресайзится.. вот только картинки jpg не отображаются пока их не пересохраниш в формате png
Унабле то лоад дынамиц либрары

zazaka
User avatar
Ответственный глюкогенератор
 
Posts: 98
Кстати если не делать форму и запустить программу то процесс отработав не закрывается оставаясь висеть в памяти...


пример
Code:
<?php

$widget = new QWidget;
$widget->qobjProperties();

qApp::exec();

но если не писать в конце qApp::exec(); то процесс после выполнения самозавершается =)
Унабле то лоад дынамиц либрары

WxMaper
User avatar
Администратор
 
Posts: 92
[bquote=zazaka|/viewtopic.php?f=18&t=26&p=230#p230|01 апр 2016, 21:38]Кстати если не делать форму и запустить программу то процесс отработав не закрывается оставаясь висеть в памяти...[/bquote]
Так он и не отработает, ты же вызываешь qApp::exec();, тем самым прерывая завершение программы. Это стандартное поведение любого приложения. Пока qApp (QApplication) не получит команду на завершение, программа не закроется. В случае с виджетами (формами), QApplication получает сигнал завершения после закрытия последнего видимого виджета (вывод команд pre() и ub_write() сюда не относится).

ты ведь можешь и вот так сделать:
Code:
$widget = new QWidget;

$timer = new QTimer;
$timer->onTimeout = function($sender) use($widget) {
    $widget->show();
    $sender->stop(); // кстати, нужно допилить таймер, не хватает поля singleShot :)
};

$timer->interval = 2000; // 2 сек
$timer->start(); // сработает один раз через 2 сек

qApp::exec();
код за мгновение будет выполнен до qApp::exec();, но полезную работу начнет делать только через 2 секунды


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

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