Page 1 of 1

snapshot 0.5.2 от 26.03.2016

PostPosted: 26 Mar 2016, 17:16
by WxMaper
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, запустить самораспаковывающийся архив и извлечь с заменой файлов.

Re: snapshot 0.5.2 от 26.03.2016

PostPosted: 26 Mar 2016, 17:21
by WxMaper
Пример работы с 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 4589 times

Re: snapshot 0.5.2 от 26.03.2016

PostPosted: 30 Mar 2016, 10:20
by zazaka
запустил я почти пустой проект 10 раз подряд .. открыл диспетчер задач .. а там почти все проекты занимают по 14.2 мегобайта в памяти. а парочка в разнобой 13.6 13.8 14.0 это почему так? и таки должно быть ??

Re: snapshot 0.5.2 от 26.03.2016

PostPosted: 31 Mar 2016, 05:54
by WxMaper
zazaka писал:запустил я почти пустой проект 10 раз подряд .. открыл диспетчер задач .. а там почти все проекты занимают по 14.2 мегобайта в памяти. а парочка в разнобой 13.6 13.8 14.0 это почему так? и таки должно быть ??
Не могу сказать почему так, но это нормально и в этом нет ничего удивительного

Re: snapshot 0.5.2 от 26.03.2016

PostPosted: 31 Mar 2016, 06:22
by WxMaper
zazaka писал:запустил я  почти пустой  проект 10 раз подряд  .. открыл диспетчер задач ..  а там почти все проекты занимают по 14.2 мегобайта в памяти. а парочка в разнобой 13.6 13.8 14.0  это почему так?  и таки должно быть ??

Re: snapshot 0.5.2 от 26.03.2016

PostPosted: 31 Mar 2016, 07:24
by zazaka
При применении сплитера появляется странная фигня с отображением информации
у меня сплитер делит страничку на левую  правую
на левой у меня кнопка на правой кнопка и пара форм
так вот когда я тяну  влево сплитер залипает на левом поле потом тяну в право он отлипает  но размер правого поля не восстонавливается оно как будто   остается огромным и уходит за края программы
Обычное состояние окошка
Image


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

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

Re: snapshot 0.5.2 от 26.03.2016

PostPosted: 31 Mar 2016, 21:05
by zazaka
$this->imj = new  QImage();

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

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


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

Re: snapshot 0.5.2 от 26.03.2016

PostPosted: 01 Apr 2016, 20:27
by zazaka
хм как ни странно но QPixmap (); больше не вызывает падения программы.. и даже всё работает .. и картинка подключается и ресайзится.. вот только картинки jpg не отображаются пока их не пересохраниш в формате png

Re: snapshot 0.5.2 от 26.03.2016

PostPosted: 01 Apr 2016, 21:38
by zazaka
Кстати если не делать форму и запустить программу то процесс отработав не закрывается оставаясь висеть в памяти...


пример
Code:
<?php

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

qApp::exec();

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

Re: snapshot 0.5.2 от 26.03.2016

PostPosted: 02 Apr 2016, 04:49
by WxMaper
[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 секунды