LINUX.ORG.RU

Сообщения kkmspb

 

QSvgWidget криво отрисовывает анимацию, не могу понять где

Здравствуйте увадажаемые форумчане!

Мучаю QSvgWidget на Qt. Надо сделать крутящийся элемент (ожидание).

Вижу , что крутит но ось смещена куда-то влево.

Вот код:

    QIcon icon(":eqpt/waiting/spinner0.gif");

    //        QSvgRenderer * svg_renderer = new QSvgRenderer( QString(":view/img/checked.svg") , this);
    //        QSvgRenderer * svg_renderer = new QSvgRenderer( QString(":eqpt/check-disabled.svg") , this);

    QpSvgWidget *svg0 = new QpSvgWidget( this );
    svg0->load( QString(":eqpt/waiting/spinner1.svg") );
    svg0->setBaseSize( QSize( 200, 200 ));


    QpSvgWidget *svg1 = new QpSvgWidget( this );
    svg1->setBaseSize( QSize( 200, 200 ));
    svg1->setMinimumSize( 200 , 200 );
    svg1->setMaximumSize( 200 , 200 );
    svg1->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed);
    svg1->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed);

    svg1->load( QString(":eqpt/waiting/spinner1.svg") );

    svg1->setAutoFillBackground(false);

    ui->vl_0->addWidget( svg0 );
    ui->vl_4->addWidget( svg1 );

Вот сам svg:

<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>

<radialGradient id='a11' cx='.66' fx='.66' cy='.3125' fy='.3125' gradientTransform='scale(1.5)'>
	<stop offset='0' stop-color='#1302DC'></stop><stop offset='.3' stop-color='#1302DC' stop-opacity='.9'></stop>
	<stop offset='.6' stop-color='#1302DC' stop-opacity='.6'></stop>
	<stop offset='.8' stop-color='#1302DC' stop-opacity='.3'></stop>
	<stop offset='1' stop-color='#1302DC' stop-opacity='0'></stop>
</radialGradient>

<circle transform-origin='center' fill='none' stroke='url(#a11)' stroke-width='15' stroke-linecap='round' stroke-dasharray='100 500' stroke-dashoffset='0' cx='50' cy='50' r='40'>

<animateTransform type='rotate' attributeName='transform' calcMode='spline' dur='2' values='360;0' keyTimes='0;1' keySplines='0 0 1 1' repeatCount='indefinite'>
</animateTransform>

</circle>

<circle transform-origin='center' fill='none' opacity='.2' stroke='#222222' stroke-width='15' stroke-linecap='round' cx='50' cy='50' r='40'></circle>
</svg>

в браузере картинка крутится правильно, но мне надо в Qt 4, а тут нижний circle (который стоит на месте) - располагается правильно, а вот animateTransform крутится вокруг оси, которая как-то смещена влево и вверх (похоже ось на 0,0 координатах).

Может кто скажет как решить проблему? Какой класс переопределить и т.д.

Как видео прикрепить не понял пока.

 

kkmspb
()

Кодирование json строки для передачи через ajax и php, хотелось бы единообразный подход

Всех приветствую!

Что имеется ввиду?

Понял, занимаясь web-ом и десктопом на винде, что давно не могу разобраться - как кодировать json строку при передаче серверу через POST запрос.

Дело в том, что сейчас написал прогу под виндой, которая является сервером, и парсит входящие запросы (на С++).

На данный момент при передаче пост запроса клиент, указывает доп. параметр (в заголовке), что это запрос из js или php.

И далее на сервере я обрабатываю тело запроса (это кодированная json строка) соответственно по разному. И это все работает ОК.

Делаю я так потому, что для клиентов севера у меня есть так называемый АПИ с примерами вызовов.

И я хочу для пользователей (т.е. клиентов) сделать АПИ такой, чтобы они меньше заморачивались с кодированием/экранированием и прочей хренью в посылаемом пакете.

Но у меня пока получилось так:

  1. при передаче через ajax кодируем тело через encodeUriComponent.
  2. при передаче через php (curl) кодируем тело через json_encode.

Меня мучают сомнения, что это лучший вариант… Может есть более единообразный подход (по принципу чем клиенту проще тем лучше).

 , , , ,

kkmspb
()

static метод из разных потоков - есть ли подводные камни?

Давно хочу, но стесняюсь, спросить - ибо до конца не уверен в своих знаниях.

Вопрос в том, что могут ли быть проблемы при использовании статического метода (например класса) в программе, у которой несколько потоков могут вызывать этот метод «одновременно»?

Конечно речь только о таких методах, где на входе какие данные, потом эти данные как-то кодируем/декодируем и возвращаем результат. То есть в самом классе или в общих для всех потоков данных - ничего не меняем.

Я пользуюсь такими методами в своей проге на qt, c++, windows и пока проблем не замечено, но все же душа не спокойна…

Предполагаю, что при переключении с потока на другой поток ОС сохраняет контекст прерванного потока на стеке прерванного потока, а новый поток использует свой контекст (стек) и получается вроде бы проблем не должно быть…

Меня смущает, что все это слишком удобно (в программировании), чтобы не было проблем. Удобно - имеется в виду, что память под статику определяется один раз, то есть не надо создавать/уничтожать ничего.

В общем давно сомневаюсь в перспективах данного подхода, но продолжаю пользоваться.

Программа, которую верстаю и некоторые клиенты уже пользуются, конечно периодически падает, но в основном при отсутствии нужных dll оборудования. Отслеживаю это запуском предварительного отдельного стартера, который получает логи от основного приложения. Это я к тому, что процесс идёт под кое-каким контролем. В конце стартер выгружает на сервер в инете логи.

 ,

kkmspb
()

Как сделать свой QTableView

В общем хочу поделится открыто классом QpTableView, который выводит ячейки в строке таблицы по шаблону в несколько рядов.

Небольшое видео для наглядности https://youtu.be/zgqkdXJhbpc?si=F0zMMr8oJgx69_47

По итогам работы понятно, что создавать свои виджеты на основе QAbstractItemView можно и нужно.

Но похоже придется из собирать свои виджеты в составе исходников Qt, что на самом деле не проблема (надо один раз попробовать только).

Надо сказать что на то, чтобы изучить исходный QTableView и QHeaderView и сделать свои варианты ушло 5 рабочих недель.

В основном время убило изменение ширины и высоты секций интерактивно мышкой (там отрисовка сразу идёт при перетаскивании края секции мышкой).

И ещё много ушло времени на модель выделения ячеек (selectionModel), что тоже оказалось не просто.

В общем, если кому интересно на гитхабе здесь: https://github.com/PavelDorofeev/How-to-create-own-QTableView-with-new-capabilities

 , ,

kkmspb
()

Как защитить программу, привязать к ПК

Тема не решаемая на 100%. Но опишу как получается на данный момент. Программа запускается на ПК и работает с сервером в интернете, соединяется с личным кабинетом и тогда проблем с защитой нет. Часть функционала мы отдаем с сервера. Но как быть если интернета нет?..

Локально есть база данных sqlite, точнее две базы: основная где товары и продажи товаров накапливаются и вторая, где хранятся пользователи и настройки оборудования. Идея в том, чтобы можно было грохнуть вторую базу и тогда придется регистрировать пользователей и оборудование заново, а для этого нужен интернет по любому.

Но в чем вопрос? Работа без интернета допустима, но не поощряется (нужен просто аварийный вариант на 1,2,3,4 дня вдруг сервак накроется и т.д.). Таким образом :

  1. хотелось бы, чтобы программа начала подтормаживать без интернета и в какой-то момент вставала колом. Потом перезагрузка опять поработали и хватит. Но тут хотелось бы как-то в логику конфигурации базы данных такой алгоритм заложить.

Надо сказать, что обе базы данных шифруются без проблем через sqleet. Более того есть вариант с шифрацией прямо в оперативной памяти через эмуляцию файловой системы (vfs + sqleet). Но речь о другом: пароль от расшифровки базы данных надо хранить на ПК локально, т.к. когда интернета нет - базу расшифровывать при запуске по любому как-то надо.

Думаю пароль от базы как-то привязать к паспорту компьютера, то есть к id процессора (правда их может быть не один) и/или к номеру материнки и/или RAM. И тогда не хранить пароль в явном виде ни где не надо…

В общем понятно, что ломануть программу можно любую (когда она локально работает), но прошу помощи у гуру как можно усложнить этот процесс, какие есть у кого может были варианты.

Заранее благодарен за любые варианты.

 , , , ,

kkmspb
()

Развитие QtSql направления

Вот небольшое видео сделал с демонстрацией новых возможностей работы с таблицами данных на Qt 4.8.1. Открытый свободный проект.

Сам использую в двух коммерческих проектах. Планирую развивать и поддерживать.

Может кому интересно будет.

https://youtu.be/vUrVNU1h_rY

 , , , ,

kkmspb
()

Qt 4.8.1 LGPL надо ли открывать исходный код своей программы (не исходников Qt)

Я извиняюсь наверное уже все сужено/пересужено. Но хочу спросить опять насчет лицензирования Qt. У меня прога под Windows (не пинайте сильно) на Qt 4.8.1.

Нокиа в 4.5 придумала LGPL. Если я принимаю LGPL,можно ли мне по «фен-шую» НЕ открывать исходный код на свою программу. Собирается конечно в Qt Creator с использованием Qt 4.8.1 библиотек QtGui,QtCore,QtSQl,QtNetWork,svg.

Боюсь поверить саму программу можно оставить закрытой (exe-шник)?

Сами исходники Qt немного правил (TLS1.2 добавлял) и проблем нет на сайте выложить эти так сказать патчи.

Да еще добавлю собирать все-таки люблю статически (x86).

И тогда можно ли программу оставить закрытой?

Примечание: живу и работаю в РФ.

 ,

kkmspb
()

Сборка отладка С++ под Андроид возможна?

Давно мучает вопрос почему (по моим данным) никто не отлаживает свои проекты прямо по андроид ОС.

Прошли те времена, когда смартфоны на ARM были слабыми.

Но по-прежнему Андроид Студия, кросскомпиляция, эмуляторы, удаленные отладчики…

Неужели это никому не надоело?

Может знает кто какие IDE для сборки С++ исходников прямо под Андроид?

 , ,

kkmspb
()

QSqlRelationalTableModel - что с ним не так

QSqlRelationalTableModel не позволяет получить доступ к id полю внешней связи и это создаёт очень много неудобств. Более того сама реализация этого класса весьма сомнительна и создаётся впечатление, что это не законченная поделка (будем говорить прямо).

Возможно вам тоже покажется, что развитие Qt как минимум в части Sql остановилось этак лет 15 назад.

А ведь фреймворк заслуживает развития ибо базовые классы уровня QSqlTabelModel и QTableView предоставляют богатый функционал для реализации ваших запросов.

Итак речь пойдет о версии Qt 4.8.1 (как ни странно), помните такую - Nokia connecting people.

Главная проблема в том, что фреймворк не так прост как кажется. Огромный объем кода, где каждая строчка имеет значение в буквальном смысле этого слова. Все по делу во всем надо разобраться и порог вхождения не пару лет месье…

Предлагаем вашему вниманию развитие классов QSqlTableModel/QTableView, с вашего позволения обзовем их PblSqlRelationalTableModel/PblTableModel. Префикс Pbl мы придумали от имени создателя Pablo (не Public как может показаться), но это все в общем-то неважно, главное отличать классы от родных Qt-ых.

Итак, что мы хотим? Мы хотим в нашем приложении на с++, которое работает с базой данных, QSlite3 к примеру, иметь возможность отрыть любую таблицу в диалоге и увидеть элементы управления: кнопки добавить, копировать, удалить строку. Также нам не помешает увидеть кнопки поиска по колонкам, отбор по значению поля, сортировку по колонке.

Но самое наверное заветное нам хотелось бы увидеть подстановку в поле с внешней связью текстовой замены поля id по данным другой связанной таблицы. И больше никогда не возвращаться к этой проблеме.

Ну и когда все уже начинает работать как надо нам, выясняется, что добавить вычисляемые поля к функционалу наших классов по данным других таблиц тоже не проблема.

https://github.com/PavelDorofeev/Fork-Sql-Qt-4.8.1--SQLite-3--relations--calc-fields

 , ,

kkmspb
()

RSS подписка на новые темы