Реклама
25 января 2017 г. 21:07

Qt 5.8 released

НовостиQtQt Lite, Qt 5.8, QML, Charts, Wayland, CAN, Modbus, Quick1796

23-го января Qt Company анонсировала выпуск Qt 5.8, с рядом нововведений, которые носят достаточно глобальный характер. Давайте ознакомимся с ними.

Qt Lite

Одной из главных тематик Qt 5.8 стало сделать так, чтобы Qt был более гибким и лёгким к адаптации к целям пользователей, в частности для разработчиков встраиваемых систем. Qt Lite является кодовым именем проекта, целью которого является внедрение данных целей.

Целью разработчиков Qt Company стало сделать Qt проще в настройке под нужды разработчиков с избеганием использования функционала, который не требуется в проекте. Это приносит значительную экономию в размере скомпилированных библиотек Qt и разрабатываемого приложения.

Внедряемая система является длинным путешествием, где была переписана значительная часть системы, которая отвечает за конфигурирование Qt. Эта новая система очищена от того, что наросло за последние 15 лет, и это также может привести к несоответствиям с тем, как Qt был сконфигурирован на различных платформах.

Как результат, получена одна унифицированная система для настройки различных частей Qt. В дополнение пользователям даётся более гибкая в настройке библиотека Qt. И также призвана облегчить бремя разработчиков Qt Company в поддержке всех различных способов настройки и использования Qt.

22 января 2017 г. 21:33

Qt/C++ - Урок 059. Требуется ли удалять QStandardItem из памяти вручную при вызове метода clear в модели данных?

РуководствоQtQStandardItem, QStandardItemModel1541

При работе с таблицами, да и вообще с различными данными в C++ требуется контроль над удалением, чтобы не было утечек памяти. Но требуется ли такой тотальный контроль при удалении объектов QStandardItem помещённых в QStandardItemModel , у которой вызвали метод clear ?

Такой вопрос может возникнуть исходя из того, каким образом обычно добавляются объекты QStandardItem в QStandardItemModel, а именно:

QList<QStandardItem *> items;
items.append(new QStandardItem("Item 1"));
items.append(new QStandardItem("Item 2"));
items.append(new QStandardItem("Item 3"));
model->appendRow(items);

И так далее в цикле для заполнения необходимого числа строк. При этом указатели на данные объекты нигде в коде больше не фигурируют и не удаляются. Поэтому и возникает вопрос о том, что происходит, если вызвать метод clear .

Когда объект QStandardItem передаётся в QStandardItemModel , то права собственности на данные объекты передаются в модель. И при вызове метода clear модель автоматически удаляет эти объекты из памяти.

22 января 2017 г. 14:05

Django - Урок 019. Настройка HTTPS протокола на сайте от Let`s Encrypt

РуководствоDjangoSSL, HTTPS, Nginx, Django, letsencrypt1364

Вчера получил письмо счастья от Google , поскольку пользуюсь Google Search Console для отслеживания индексации сайта в поисковике Google. Суть письма заключается в том, что Google Chrome будет сообщать о небезопасности сайта, который использует протокол http на тех страницах, где требуется ввод пароля. А если учесть, что на моём сайте форма авторизации располагается на всех страницах, то значит предупреждение будет на всех страницах сайта. Не самая приятная ситуация, поэтому пришлось быстренько доставать сертификат SSL и настраивать https.

На данный момент существует центр сертификации Let`s Encrypt , который выдаёт бесплатные сертификаты сроком на 90 дней. Данный центр сертификации поддерживается такими организациями, как Electronic Frontier Foundation (EFF), Mozilla Foundation, Akamai, Cisco Systems.

Процесс получения и установки сертификата автоматизирован, но в случае с сайтом, работающем на Django и Nginx , нужно будет дополнительно поработать над настройками сервера Nginx .

15 января 2017 г. 17:49

PyQt5 - Урок 004. Использование QSettings

РуководствоPyQt5PyQt5, QSettings, Qt, python1822

Ознакомимся с использование QSettings в PyQt5. Для этого предлагаю написать небольшое приложение, в котором будет один единственный чекбокс, состояние которого мы будем сохранять в настройках. Состояние чекбокса будет сохраняться по клику на данный чекбокс. После закрытия программы и повторного его открытия чекбокс будет выставлен с тем состоянием, в котором он был при закрытии программы.

13 января 2017 г. 20:15

Qt/C++ - Урок 058. Подсветка синтаксиса HTML кода в QTextEdit

РуководствоQtHTML, QSyntaxHighLighter, Qt, QTextEdit, QTextDocument3179

Некоторое время назад я занимался изучением подсветки синтаксиса в QTextEdit и практиковался на подсветке для HTML кода. В результате удалось сделать довольно неплохой вариант подсветки синтаксиса HTML кода, но в связи с тем, что есть вероятность того, что этот код не будет мною применён где-нибудь, я решил выложить данный пример программного кода.

Подсветка синтаксиса HTML в QTextEdit будет выглядеть следующим образом:

9 января 2017 г. 20:45

Django - Урок 018. Блокировка злоумышленников по IP при попытках подбора пароля на Django

РуководствоDjangoIP, брутфорс, подбор пароля, блокировка, Django, brute force2129

После того, как мы подменили страницу авторизации Django на свою собственную кастомизированную страницу авторизации , настал момент для использования данной подмены для целей улучшения безопасности сайта. Например, внедрение блокировки злоумышленника по IP при попытке подбора пароля.

Предлагаю такой вариант блокировки: при трех неудачных попытках ввода пароля IP блокируется на 15 минут, если такая блокировка на 15 минут происходит 3 раза, то IP блокируется на 24 часа.

Для реализации блокировки понадобится модель, в которой будет находится 4 поля:

  • IP адрес;
  • Количество попыток ввода пароля;
  • Время разблокировки;
  • Статус блокировки - True - если заблокирован, False - если не заблокирован.

Сразу покажу результат работы блокировок в админке сайта, за пару месяцев уже накопилась небольшая коллекция.

7 января 2017 г. 19:20

Django - Урок 017. Кастомизированная страница авторизации на Django

РуководствоDjangoDjango, login, авторизация1741

Для того, чтобы сделать оформление страницы авторизации в едином стиле с оформлением всего сайта, можно подготовить шаблон оформления и подменить шаблон url, чтобы отдавать требуемое нам представление страницы с требуемым шаблоном. Также это может быть полезно для внедрения функционала блокировок от подбора пароля и более интеллектуального перенаправления пользователя на страницы сайта после авторизации в зависимости от того, имеет ли пользователь статус персонала или нет.

Для работы с авторизацией пользователей предлагаю использовать отдельное приложение/модуль, который будет называться accounts.

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

Структура модуля accounts

accounts/
    templates/
        accounts/
            login.html
            login_widget.html
    __init__.py
    admin.py
    apps.py
    models.py
    special_func.py
    urls.py
    views.py

В данном модуле используется два шаблона:

  • login.html - это шаблон для страницы авторизации
  • login_widget.html - это шаблон для виджета авторизации, который может быть помещён на любой странице сайта, чтобы пользователь мог авторизоваться не только со страницы авторизации, но и с любой страницы со статьёй, например.

Файл special_func.py содержит некоторые полезные функции, как например, получение предыдущего Url из запроса , чтобы перенаправить пользователя обратно на страницу, где пользователь авторизовался.

5 января 2017 г. 19:21

Qt/C++ - Урок 057. Ошибки вывода qDebug() для чисел с плавающей точкой

РуководствоQtQt, qDebug, float1408

При разработке программного обеспечения на Qt довелось столкнуться с одним нюансом при выводе чисел с плавающей запятой через qDebug(). Проблема заключается в том, что выводятся не все символы после запятой. Тем же самым грешит и вывод std::cout .

Подобный user case может возникнуть в следующей ситуации:

У вас имеется объект QString, который содержит некое число "8564.26495574", которое мы переводим в число с плавающей точкой с помощью метода toDouble(), и проверяем результат с помощью вывода qDebug() , но вот незадача, вывода оказывается ложным.

QString str("8564.26495574");
qDebug() << str.toDouble();

// В выводе получаем -> 8564.26

Хотя на самом деле мы получаем совершенно правильное число, то есть из строки было получено число 8564.26495574 , просто вывод qDebug() показывает округлённый результат.

Тоже самое можно наблюдать, если попытаться просто вывести значение числа double в qDebug().

double a = 8564.26495574;
qDebug() << a;

// В выводе получаем -> 8564.26
5 января 2017 г. 18:47

Django - Урок 016. Вывод списка популярных статей на любой странице сайта

РуководствоDjangoDjango, templatetags, список популярных статей, Python957

На сайте уже была статья о выводе списка популярных статей за последние 7 дней . Но в том варианте, который использован в данной статье, показано, как сделать вывод на странице со статьями. Но возник вопрос, как быстро внедрять список популярных статей на любую страницу сайта.

У себя я решил эту проблему с использованием собственного тега , который может быть использован в шаблоне Django. То есть, вместо того, чтобы в каждом View на сайте прописывать один и тот же код для получения списка статей или использования одной и той же функции в этих View, я просто сделал отдельный шаблон с уже готовой разметкой для списка популярных статей, в котором используется мой пользовательский тег, которым я забираю список этих статей. Таким образом, нужно только внедрять данный шаблон в нужном месте в шаблоне страницы с помощью тега include.

4 января 2017 г. 12:27

Программирование - Индивидуальное предпринимательство и работа с зарубежными заказчиками

РуководствоКарьера и бизнес в ITИП, валютный контроль, договор1256

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

Что для этого требуется и какие шаги необходимо предпринять, чтобы деньги за работу дошли до вашего кошелька?

Итак, план действий может быть следующий:

  1. Валютный расчётный счёт и транзитный счёт Индивидуального Предпринимателя
  2. Договор с заказчиком
  3. Подписание актов выполненных работ
  4. Выставление счетов
  5. Получение оплаты выполненных работ на транзитный счёт
  6. Распоряжение о распределении средств с транзитного счёта на ваш валютный расчётный счёт

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

Реклама
Последние комментарии
  • EVILEG
  • 23 мая 2017 г. 12:26

Qt/C++ - Урок 005. QSqlRelationalTableModel - Работаем со связными таблицами

В классе DataBase указывается путь к базе данных. В данном случае C:/example/ и т.д. Так вот, у вас есть каталог example ?

  • EVILEG
  • 23 мая 2017 г. 12:19

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

Нет. не верно. Ошибка вот в этой строке: QPixmap inixmap = fileName; // Сохраняем его в изображение объекта QPixmap; Выше я показывал, как что нужно путь передавать в качестве аргумент...

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "/home", tr("Images (*.png *.xpm *.jpg)")); QPixmap inixmap = fileName; // Сохраняем его в и...

Qt/C++ - Урок 005. QSqlRelationalTableModel - Работаем со связными таблицами

https://www.dropbox.com/sh/vhxcx0iyq0j4578/AACwgWPnZwNqGBndKESiXfFqa?dl=0

  • tetta
  • 22 мая 2017 г. 1:32

Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP

Как сделать так, что бы только когда верхнюю полосу зажимаешь, то перетаскивалось окно и что бы оно оставалось на месте?

Сейчас обсуждают на форуме
  • tetta
  • 23 мая 2017 г. 17:59

Создание кнопки "new", "save" и "open". MDI. toolBar

void MainWindow::open(){ QString openFile = QFileDialog::getOpenFileName(this, tr("Open File"), "C:/", ...

Проверка наличия записи в БД при выполнении запроса

Код форм про которые говорил прикрепил. regrdit форма в которой отображается информация отбираемая из базы. editobject форма для редактирования

  • Arrow
  • 23 мая 2017 г. 13:41

qmake

Странно по сообщениям выдает, что у меня компилирутся 32 bit версия (x86 build). Компилятор опознан правильно и в ABI сам определилил x86-windows-msys-pre-64bit и исполняемый файл создае...

WinApi CBTProc

Да всех активных, тоесть через CBT.