(замена вывода информации вместо pre() выводит информацию на отдельную форму или на любую переданную в класс форму)
- phpqt Код:
class Debyg extends QMainWindow
{
private $array_param = array();
private $debyger = 1; // on - 1 off - 0
private $dy = 12; // шаг строк
private $tip_form = 0; // на какую форму выводить 1- новую 0 - ту что передали
private $form; // форма дял вывода
private $name_form; // имя формы
public function __construct($name_form = '', $forms = '')
{
parent::__construct();
$this->name_form = $name_form; //сохраним имя формы
if ($forms != '') {
$this->form = $forms; //сохраним переданную форму
} else {
$this->tip_form = 1;
}
if ($this->debyger && $this->tip_form == 1) {
$this->form = new QMainWindow;
$this->form->centralWidget = new QWidget;
$this->form->windowTitle = 'дебагер ' . $this->name_form;
$this->form->show();
}
}
public function add($obj, $param)//
{
if (!$this->debyger) return;
if (!isset($obj)) {
echo('Передан не существующий элемент: <b>' . $param . '<b>');
return;
}
// сгенерим имя обекта и определим его тип
$temp = $this->get_name_and_tip($obj, $param);
$name_obj = $temp['name'];
$tip_obj = $temp['tip'];
// если уже есть в базе обьект то сразу показать
if (array_key_exists($name_obj, $this->array_param)) {
$this->display($obj, $name_obj, $param);
} else {
// если нет обьект то создать и показать
$this->create($name_obj, $tip_obj);
$this->display($obj, $name_obj, $param);
}
}
private function get_name_and_tip($obj, $param)
{
$rez = array();
if (is_object($obj)) {
$rez['name'] = $obj->uid . '_' . $param;
$rez['tip'] = 'obj';
return ($rez);
}
if (is_array($obj)) {
$rez['name'] = 'array_' . $param;
$rez['tip'] = 'array';
return ($rez);
}
$rez['name'] = $param;
$rez['tip'] = 'val';
return ($rez);
}
private function create($name_obj, $tip_obj)
{
$all = count($this->array_param);
$ladel = new QLabel($this->form);
$ladel->objectName = $name_obj;
$ladel->x = 5;
$ladel->y = $this->dy * $all;
$ladel->width = 500;
$this->array_param[$name_obj]['obj'] = $ladel;
$this->array_param[$name_obj]['tip'] = $tip_obj;
}
private function display($obj, $name_obj, $param)
{
if ($this->debyger) {//&& isset($this->array_param[$name_obj]['obj'])
$text = $param . ' = ';
switch ($this->array_param[$name_obj]['tip']) {
case 'obj': {
$text .= '<b>' . $obj->$param . '</b> -' . $obj;
break;
}
case 'val': {
$text .= '<b>' . $obj . '</b>';
break;
}
}
$this->array_param[$name_obj]['obj']->text = $text;
$this->array_param[$name_obj]['obj']->show();
}
}
}
пример использования
- phpqt Код:
class MainWindow extends QMainWindow
{
private $centralWidget;
protected $array_object = array(); /// массив с элементами
protected $debyg;
private $pole_x = 50;// размер поля Х в шагах
private $pole_y = 50; // размер поля У в шагах
private $shag = 5; // шаг в пикселях
//private $razmer_img=16; // размер квадрактной картинки
private $speed = 35; // скорость обработки циктов (скорость движения)
public function __construct()
{
parent::__construct();
$this->debyg = new debyg('главная ФОРМА',$this);
$this->initComponents();
}
private function initComponents()
{
$this->centralWidget = new QWidget;
$razm_x = $this->shag * $this->pole_x;// ---
$razm_y = $this->shag * $this->pole_y;/// |||
$this->test();
$this->resize($razm_x, $razm_y);
$this->minimumWidth = $razm_x;
$this->minimumHeight = $razm_y;
$this->maximumWidth = $razm_x;
$this->maximumHeight = $razm_y;
$ladel = new QLabel($this);
$ladel->text = 'text 1111';
$ladel->objectName = 'objectName 2222';
$ladel->x = 16;
$ladel->y = 72;
$ladel->width = 352;
$this->debyg->add($ladel, 'text'); // объект - параметр (название)
$this->debyg->add($ladel, 'objectName');
//$this->debyg->add($ladel, 'width');
$rr = 5;
$this->debyg->add($rr, 'переменная rr');// переменная - название
$this->debyg->add($this->shag, 'шаг');
//$this->debyg->add($rt, 'rrrrrr');
//$this->debyg->add($rtr, '');
$timer = new QTimer;
$timer->interval = $this->speed;
$timer->onTimeout = function() {
$this->render();
};
$timer->start(); // запускаем таймер
}
// рисуем стрелку
private function render()
{
$this->shag++;
$this->debyg->add($this->shag, 'шаг');
}
private function test()
{
$ladel = new QLabel($this);
$ladel->text = 'text 1111';
$ladel->objectName = 'objectName 2222';
$ladel->x = 16;
$ladel->y = 72;
$ladel->width = 352;
$this->array_object['test']['label'] = $ladel;
}
}
$mainWindow = new MainWindow;
$mainWindow->show();
qApp::exec();
