© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
15 октября 2017 г. 21:31

C++C++ - Урок 011. Исключения

C++, throw, catch, exception

Что такое исключение? Это ситуация, которая не предусмотрена стандартным поведением программы. Например, попытка доступа к элементу в классе Vector (который мы разбирали в статье про классы ), который не существует. То есть происходит выход за пределы вектора. В данном случае можно воспользоваться исключениями, чтобы прервать выполнение программы. Это необходимо потому, что

  • Как правило в таких случаях, автор класса Vector не знает, как пользователь захочет использовать его класс, а также не знает в какой программе этот класс будет использоваться.
  • Пользователь класса Vector не может всегда контролировать правильность работы этого класса, поэтому ему нужно сообщить о том, что что-то пошло не так.

Для разрешения таких ситуация в C++ можно использовать технику исключений.

14 октября 2017 г. 20:41

C++C++ - Урок 010. Пространство имён

namespaces, C++

В дополнение к функциям, классам и перечислениям C++ предоставляет пространства имён (namespaces) как механизм управления и контроля за повторяющимися именами функций и классов. Например, если назвать некоторые ваши функции именами, которые пересекаются с именами функций в стандартной библиотеки, то Вы получите конфликт имён, то есть переопределение функции из стандартной библиотеки, что может привести к неопределённости и ошибкам в программе. Благодаря пространству имён можно избежать этой проблемы, просто поместив функции в namespace .

7 октября 2017 г. 20:46

SFMLSFML - Урок 001. Подключение библиотеки SFML в проект на Qt

SFML, Qt, C++, QWidget

SFML представляет собой объектно-ориентированный аналог SDL. Библиотека предоставляет простой доступ к системам ввода вывода, аудио, сети передачи данных, а также к функционалу OpenGL.

А что если дополнительно прикрутить к этой библиотеке ещё и функционал Qt, получить в управление мощные возможности сигналов и слотов, ресурсных файлов Qt? Что для этого потребуется?

  1. Скачать с GitHub последнюю версию исходников SFML .
  2. Скомпилировать исходники в библиотеку
  3. Создать проект Qt
  4. Подключить библиотеку в проект
  5. Написать виджет, который будет рендериться напрямую через функционал SFML
4 октября 2017 г. 17:05

QtQt, Сборка драйвера IBASE (FireBird) Win10 Fierbird 2.5

QIBASE, ming32, Qt, драйвер

Информация не претендует на супер полезную, но может помочь сэкономить время при настройке.

23 сентября 2017 г. 11:55

DjangoDjango - Урок 027. Добавление Google reCAPTCHA

Google, reCAPTCHA, Validation, Google API

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

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

Для внедрения reCAPCTHA на сайт необходимо зарегистрировать свой сайт в админке reCAPTCHA .

В качестве домена я выбрал IP адрес локальной петли своего ПК, на котором веду разработку сайта.

17 сентября 2017 г. 8:10

DjangoDjango - Урок 026. Настройка минификации CSS и JavaScript кода в PyCharm

Minification, CSS, JavaScript

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

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

  • style.css -> style.min.css
  • scripts.js -> scripts.miin.js

Предлагаю настроить среду разработки PyCharm для автоматической минификации всех этих файлов в вашем Django проекте.

Минификация кода css и jsavascript поддерживается только в PyCharm Professional Edition.

Важный момент, настройка будет производится под Ubuntu-based операционную систему KDE Neon 5.8 . Установку необходимых пакетов под Windows я не рассматриваю, поскольку считаю, что разработка Django проекта под этой ОС - это моветон.

14 сентября 2017 г. 19:05

C++C++ - Урок 009. Модульность

C++, Modularity

Ключевым моментом в управлении взаимодействием различных частей в C++ программе является разграничение интерфейса компопонентов программы с их реализацией. На уровне языка, C++ представляет интерфейс в виде объявлений. Обяъвление указывает все необходимые части интерфейса, которые необходимы например для функции: возвращаемое значение, аргументы, имя функции. Например:

double sqrt(double); // функция квадратного корня, которая принимает аргументы типа double и возвращает переменную типа double

// Объявление класса со всеми необходимыми методами и участниками класса
class Vector 
{
public:
    Vector(int s);
    double& operator[](int i);
    int size();
private:
    double∗ elem; 
    int sz;
};
13 сентября 2017 г. 20:05

QMLQML - Урок 031. Отключаем системное обрамление окна в QML и пишем код для обработки перемещения и ресайза окна

QML, Qt, Frameless Window, Custom Style

Если по какой-то причине, вы решили отказаться от стандартного системного обрамления окна и реализовать все Title Bar`ы окна самостоятельно в QML, то вы вполне можете реализовать это средствами QML, что будет даже проще чем в C++, на мой взгляд. Для ознакомления можете посмотреть статью по кастомизации окна приложения в стиле AIMP . Там имеется значительная доля кода по реализации механики перемещания окна, а также его ресайза. Преимущество QML в данном случае состоит в том, что QML сразу обеспечивает верстку приложения, а значит можно с помощью MouseArea и якорей сразу определить нужную обработку при клике и перемещении мыши без каких-либо специальных расчётов положения курсора в области окна.

А механика расчёта изменения размеров и положения будет сходна с той, которая была применена в статье по кастомизации приложения в C++. То есть необходимо будет запомнить положение, где была нажата кнопка мыши, а потом уже относительно этого положения делать ресайз и перемещение окна приложения, пока кнопка не будет отпущена.

2 сентября 2017 г. 11:25

C++C++ - Урок 008. Перечисления

c++, enum, enumerations

В дополнение к классам C++ поддерживает перечисления. В современном стандарте C++ поддерживаются как перечисления без области видимости, которые были введены в ранних версиях C++, а также C.

enum ColorTypes {
    Green,
    Yellow,
    Red
};

Так и перечисления с областью видимости

enum class ColorTypes {
    Green,
    Yellow,
    Red
};
29 августа 2017 г. 19:26

QtОткрываем fb2-файлы средствами Qt

fb2, html, xml, QXmlStreamReader

В настоящее время fb2 является популярным форматом для хранения книг. Файл fb2 – частный случай xml. Основным элементом его структуры, как и для html, является тэг (управляющие слова). В этой статье я расскажу, как создать простейший просмотрщик fb2-файлов. Проект с исходным текстом можно скачать по ссылке .

Общие сведения

Теги делятся блочные и строчные. Блочные теги группируются в пары из открывающего тега, закрывающего тега между которыми располагается содержимое. Например, абзац текста записывается как

<p>Абзац текст</p>

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

<image l:href = “#_0.jpg”/>

содержит информацию: 1) о том, что в данную точку документа нужно вставить рисунок, 2) ссылку на этот рисунок. Ниже разобран алгоритм вставки рисунка в текст. Различить 3 типа тэгов просто с помощью слеша. У строчного тэга слеш перед закрывающейся скобкой, у закрывающего блочного после открывающейся, у открывающего блочного он отсутствует.

Если хотите полностью разобраться, изучайте html. Между html и fb2 есть некоторая разница, хотя во многом они идентичны. На такие элементы я буду указывать по ходу повествования. Также отмечу, что xml в отличии от html не использует язык CSS, в нашем случае это значит то, что в fb2 файле нет указаний на то, как отформатирован текст (размер и цвет шрифта, расположение абзацев и т.п.). Всё это мы должны (при желании) реализовать самостоятельно.

21 сентября 2018 г. 15:37
irishaa

C++ - Тест 005. Структуры и Классы

  • Результат 41баллов,
  • Очки рейтинга-8
20 сентября 2018 г. 20:16
ZaRYa

C++ - Тест 001. Первая программа и типы данных

  • Результат 46баллов,
  • Очки рейтинга-6
17 сентября 2018 г. 20:45
Иван Поп

C++ - Тест 001. Первая программа и типы данных

  • Результат 93баллов,
  • Очки рейтинга8
Последние комментарии
21 сентября 2018 г. 9:24
Евгений Легоцкой

Qt Linux - Урок 001. Автозапуск Qt приложения под Linux

Если я вас правильно понял, то авторестарт сюда дописывается  QString autorunContent. Не могли бы вы не выделять пока слова жирным текстом, в комментариях сломан парсинг тегов, завтра буд...
21 сентября 2018 г. 9:08
avovana

Qt Linux - Урок 001. Автозапуск Qt приложения под Linux

Спасибо за статью! Пример рабочий! Со своим проектом тоже получилось! Наткнулся на эту статью когда решал задачу запуска Qt app с помощью . Когда пробовал с помощью...
20 сентября 2018 г. 13:27
Евгений Легоцкой

Привет Qt для Python

Может быть, я не все новости отслеживаю по Qt. По возможности слежу, но не всегда удаётся.
20 сентября 2018 г. 13:17
OBEH

Привет Qt для Python

По моему. в последней версии Qt анонсировали поддержку Python. Я где-то видел видео. К сожалению. не помню ссылку. Там что-то. типа. проекта "Qt forPython". Все аналогично тому. как для ...
20 сентября 2018 г. 9:58
Евгений Легоцкой

Привет Qt для Python

Qt Creator и Qt Designer по сути не имеют поддержки Python, чтобы код автоматически генерировался и т.д. Нужно устанавливаться дополнительные инструменты. Например сам Python, рекмоендую...
Сейчас обсуждают на форуме
22 сентября 2018 г. 16:21
Евгений Сальников

Проблемы при создании приложения под андроид

Добрый день!Хочу написать приложения для себя на телефон. Но запнулся на этапе создания проекта. в профилях Qt для Qt 5.11.2 for Android ARMv7 и Qt 5.11.2 for Android x86 пишет что: компилятор не...
21 сентября 2018 г. 8:25
Евгений Легоцкой

Прокси-модель, содержащая на 1 столбец больше, чем модель-источник.

Попробуйте ещё PySide 2 - это официально поддерживаемый пакет привязок Python к Qt, возможно, что там не будет таких проблем.
20 сентября 2018 г. 20:06
Евгений Легоцкой

Qt Installer Framework

Добрый день. Зачем собирать Qt Installer Framework-то из исходников? Я ещё понимаю Qt собирают из исходников статически (хотя тоже считаю по большей части бесполезной тратой времени),...
19 сентября 2018 г. 10:19
Евгений Легоцкой

Как в listview подставить модель?

Добрый день. А нельзя ли использовать какой-нибудь глобальный map контейнер, который бы мапил названия моделей на указатели этих моделей?
17 сентября 2018 г. 11:08
Евгений Легоцкой

Проблемы с статической компиляцией Qt с MySQL

Ну если, то да. Тогда просто буду давать ссылку на этот топик, если будут возникать подобные вопросы. Спасибо за ответ.
Присоединяйтесь к нам в социальных сетях