snapshot 0.5.2 от 26.03.2016

малогабаритные снапшоты сборщика проектов (только основные модули и изменения)
WxMaper
Аватара пользователя
Администратор
 
Сообщения: 92
Благодарил (а): 8 раз
Поблагодарили: 4 раза
PQEngineWidgets QLabel:
  • Исправлен баг с методом pixmap() - нельзя было получить картинку после уничтожения объекта QPixmap;


PQEngineWidgets QSplitter:
  • Исправлена невозможность использования класса.


PHPQt5:
  • Добавлена шаблонная функция, с помощью которой можно создать объект по имени класса и зарегистрировать его в PHP, при условии, что
    запрашиваемый класс был зарегистрирован (класс может быть зарегистрирован другим расширением).
    Функция позволяет создавать непрямые взаимосвязи между расширениями, когда расширения не зависят друг от друга на этапе компиляции, но могут совместо работать с классами объявленными в них.
    T* pq_createObjectT<T>(const QString &className, const QVariantList &args);
    Реальный пример использования на примере расширения PQEngineWidgets, которое не зависит от расширения PQEngineDrawKit, но может работать с его классом QPixmap:

    Код:
    PQObject *PQLabel::pixmap() const
    {
        QVariantList args;
        args << *(QLabel::pixmap());

        // т.к. PHP вероятнее всего уничтожил объект QPixmap вместе с переменной, а его копия
        // по прежнему существует в QLabel, нужно пересоздать этот объект:
        PQObject *pqobject = pq_createObjectT<PQObject>("QPixmap", args);
        return pqobject;
    }


    phpqt Код:
        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
Аватара пользователя
Администратор
 
Сообщения: 92
Благодарил (а): 8 раз
Поблагодарили: 4 раза
Пример работы с QSplitter:
phpqt Код:
   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 КБ) 3375 просмотров

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

WxMaper
Аватара пользователя
Администратор
 
Сообщения: 92
Благодарил (а): 8 раз
Поблагодарили: 4 раза
zazaka писал:запустил я почти пустой проект 10 раз подряд .. открыл диспетчер задач .. а там почти все проекты занимают по 14.2 мегобайта в памяти. а парочка в разнобой 13.6 13.8 14.0 это почему так? и таки должно быть ??


Не могу сказать почему так, но это нормально и в этом нет ничего удивительного

WxMaper
Аватара пользователя
Администратор
 
Сообщения: 92
Благодарил (а): 8 раз
Поблагодарили: 4 раза
zazaka писал:запустил я  почти пустой  проект 10 раз подряд  .. открыл диспетчер задач ..  а там почти все проекты занимают по 14.2 мегобайта в памяти. а парочка в разнобой 13.6 13.8 14.0  это почему так?  и таки должно быть ??

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

Обычное состояние окошка
Изображение


После двиганья сплитера
Изображение


кнопка кстати тоже такая же растянутая ...

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

zazaka
Аватара пользователя
Ответственный глюкогенератор
 
Сообщения: 98
Поблагодарили: 2 раза
$this->imj = new  QImage();

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

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


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

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

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


пример
php Код:
<?php

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

qApp::exec();



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

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

Так он и не отработает, ты же вызываешь qApp::exec();, тем самым прерывая завершение программы. Это стандартное поведение любого приложения. Пока qApp (QApplication) не получит команду на завершение, программа не закроется. В случае с виджетами (формами), QApplication получает сигнал завершения после закрытия последнего видимого виджета (вывод команд pre() и ub_write() сюда не относится).

ты ведь можешь и вот так сделать:
php Код:
$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 секунды


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

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