© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
21 апреля 2018 г. 20:18

QtQt/C++ - Урок 076. Визуализация математических формул на Qt

Formula, QPainter, Qt, QRegularExpression

Недавно на форуме появился довольно интересный вопрос, о том, как можно сделать визуализацию формул в Qt. К сожалению я не имел возможности длительное время заниматься сайтом и форумом, но решил, что представить своё возможное видение проблемы даже спустя некоторое время, будет полезным.

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

Например, вы печатаете в некотором поле ввода sqrt(5), а в каком-то виджете будет выведено графическое отображение корня квадратного из 5, то есть не результат, а сама формула. Подобный функционал реализован в Latex и LibreOffice.

Выглядеть это будет следующим образом.

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

6 марта 2018 г. 7:17

AndroidAndroid. Java vs Qt QML - Урок 005. Создаём контекстное меню

Qt, Menu, JAVA, Android, QML

После того, как мы разобрались с тем, как создать меню в Action Bar, добавим контекстное меню к каким-нибудь объектам.

В данном уроке добавим два текстовых поля, которые будут иметь контекстное меню.

  • Контекстное меню первого текстового поля будет изменять цвет и размер текста в первом текстовом поле
  • Контекстное меню второго текстового поля будет просто изменять текст во втором текстовом поле.

Первое контекстное меню будет иметь два подменю, первое будет отвечать за изменение цвета, а второе будет отвечать за изменение размера.

ActionBar в Java активити отключим, чтобы он не мешался.

5 марта 2018 г. 8:13

AndroidAndroid. Java vs Qt QML - Урок 000. Включение Material Design

material design, Android

При разработке как на Java, так и на Qt QML требуется включение Material Design.

Material Design на Java

В случае с Java достаточно включить оформление темы в файле styles.xml и задать необходимую цветовую гамму для приложения.

styles.xml

<resources>

    <style name="AppTheme" parent="android:Theme.Material">
        <!-- Main theme colors -->
        <!--   your app branding color for the app bar -->
        <item name="android:colorPrimary">@color/colorPrimary</item>
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
        <!--   theme UI controls like checkboxes and text fields -->
        <item name="android:colorAccent">@color/colorAccent</item>
    </style>

</resources>
2 марта 2018 г. 7:53

AndroidAndroid. Java vs Qt QML - Урок 004. Создание меню в Action Bar с подменю

Qt, JAVA, Android, QML

Итак, продолжаем реализовывать одинаковый функционал в приложениях под Android из двух принципиально различных миров. А именно на традиционной Java и менее распространённом Qt QML C++.

На этот раз реализуем меню в ActionBar активити. Отмечу, что ActionBar для варианта с QML придётся писать самостоятельно, поскольку такого элемента в Qt QML нет, но он реализуется через компонент ToolBar. Поскольку этот момент был описан в уроке про Hello World , то в данном уроке тщательно останавливаться на нём не будем, только вынесем ActionBar в отдельный QML файл, сделав его отдельным типом QML и добавим в него иконку меню, по нажатию на которую будем вызывать меню.

Меню будет следующую структуру:

  • Information
    • First
    • Second
  • About

В центре окна приложения должен быть текст, который будет заменяться другим текстом при нажатии следующие пункты меню

  • First
  • Second
  • About
1 марта 2018 г. 7:58

AndroidAndroid. Java vs Qt QML - Урок 003. Сообщения в консоли и всплывающие сообщения Toast

Android, Toast, QML, log, Qt, JAVA, console

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

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

Вывод в консоль

В случае с Java для этого служит класс Log, а в случае с QML для этого служит функционал console, который хорошо знаком Web-программистам.

Сообщения консоли имеют различные уровни важности:

  • ERROR
  • WARN
  • NFO
  • DEBUG
  • VERBOSE
28 февраля 2018 г. 9:57

DjangoDjango - Урок 033. Передача списка аргументов в метод order_by для сортировки QuerySet

сортировка, sort, Django

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

Например, в модели данных есть несколько колонок

  • title
  • pub_date
  • views

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

Article.objects.all().order_by('title', 'pub_date', 'views')

Но поскольку мы используем чекбоксы, то варианты сортировку могу присутствовать, а могу и отсутствовать. Но не будем же мы писать if else блоки на каждую комбинацию чекбоксов? Конечно, нет.

27 февраля 2018 г. 7:40

AndroidAndroid. Java vs Qt QML - Урок 002. Обработка нажатий по кнопкам

Qt, Android, JAVA, button, QML

После того, как мы познакомились с Hello World из мира Java и Qt QML под Android, предлагаю написать приложение, которое будет иметь две кнопки и по нажатию на эти кнопки будет изменять текст в небольшом текстовом поле. Приложения должны выглядеть одинаково, но не на 100 процентов идентично. При желании этого можно добиться, но в данном примере не обязательно.

В обоих случаях будет использоваться Material Design .

Прежде, чем посмотреть на программный код, посмотрим на внешний вид обоих приложений.

Приложение, которое написано на Java

26 февраля 2018 г. 7:07

QtQt/C++ - Урок 075. Улучшение синтаксиса сигналов и слотов в Qt 5.7 и выше для перегруженных сигналов и слотов

слоты, Qt, сигналы

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

Так вот, в Qt присутствует функционал для упрощённой записи таких перегрузок через шаблонные методы QOverload или через макрос qOverload .

Принципиальное различие между qOverload и QOverload заключается в том, что макрос требует C++ версии 14, тогда как шаблон требует C++ версии 11.

24 февраля 2018 г. 16:51

Python 3Python 3 - Урок 003. Базовый синтаксис

Синтаксис, Python 3, Syntax

Язык Python имеет много общего с Perl, C и Java. Однако между языками существуют определенные различия.

Первая программа Python

Давайте выполним программы в разных режимах программирования.

Интерактивный режим программирования

Вызов интерпретатора без передачи файла сценария в качестве параметра вызывает следующую подсказку -

$ python

Python 3.5.2 (default, Dec 10 2013, 11:35:01)
[GCC 5.4.0] on Linux
Type "help", "copyright", "credits", or "license" for more information.
>>>

On Windows:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>

Введите следующий текст в приглашении Python и нажмите Enter -

>>> print ("Hello, Python!")

Если вы используете более старую версию Python (Python 2.x), использование скобок в качестве функции inprint необязательно. Это дает следующий результат:

Hello, Python!
19 февраля 2018 г. 7:13

AndroidAndroid. Java vs Qt QML - Урок 001. Hello World

Qt, JAVA, Android, QML

Любопытства ради решил сравнить два варианта написания приложений под Андроид. Когда-то давно начинал заниматься программированием под Андроид на Java, но со временем перешёл на разработку Desktop приложений на Qt QML. Но теперь вновь решил освежить в памяти некоторые аспекты, чтобы убедиться, что Qt QML мне нравится больше.

Сразу приведу результат двух Hello world`ов. Они конечно не будут на 100 процентов идентичны, но должны быть похожи. В качестве базового примера возьму пустую Activity, которая создаётся в Android Studio.

Первый образец - это Hello World на Java

22 апреля 2018 г. 6:46
imay_97

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

  • Результат 80 баллов
  • Очки рейтинга 4
21 апреля 2018 г. 13:12
danila718

C++ - Тест 002. Константы

  • Результат 33 баллов
  • Очки рейтинга -10
21 апреля 2018 г. 13:07
danila718

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

  • Результат 100 баллов
  • Очки рейтинга 10
Последние комментарии
22 апреля 2018 г. 11:30
EVILEG

Qt/C++ - Урок 026. Применение CallBack функции

It is especciality of workflow with static members. And I think using of nullptr instead of NULL is better. Because of using of nullptr is modern standard...

22 апреля 2018 г. 11:26
cyberdoc71

Qt/C++ - Урок 026. Применение CallBack функции

That is what I thought however do not understand why it is necessary. I guess the format was new and unfamiliar to me. Found other examples online where the value was assigned to NULL. Tha...

22 апреля 2018 г. 10:34
EVILEG

Qt/C++ - Урок 026. Применение CallBack функции

There are static members of class. There in cpp file it isn`t declaration of these members, it`s implementation without assigning a value. Some value will be assigned to these members in const...

21 апреля 2018 г. 15:53
cyberdoc71

Qt/C++ - Урок 026. Применение CallBack функции

I don’t understand in Mainwindow.cpp lines 40 + 41 what or how these lines work? They look like a declaration but they are in the implementation which doesnt make sense to me. Please explain:...

18 апреля 2018 г. 14:24
EVILEG

Qt/C++ - Урок 002. QSystemTrayIcon или Как свернуть приложение в трей?

Добрый день! В рамках самого Qt здесь утечки не будет. Особенность фреймворка в том, что при создании объектов, которыe наследованы от QObject (подавляющее большинство классов), передаёт...

Сейчас обсуждают на форуме
22 апреля 2018 г. 11:11
EVILEG

Темы оформления (скины) для приложения

Добрый день! Обычно значки устанавливаются через прямой вызов метода setIcon setImage и т.д., какой там присутствует в классе объекта... При этом создаётся экземпляр данной...

22 апреля 2018 г. 10:53
EVILEG

Работа с векторами

Добрый день! В сухом остатке логика программы должны быть следующей #include <iostream>#include <string>#include <algorithm>#include <vector>...

21 апреля 2018 г. 20:21
EVILEG

Написание формул в qt

У меня наконец-то выдалось свободное время и я набросал свои мысли по вашему вопросу. Можете ознакомиться с ними вот в этой статье https://evileg.com/post/339/ , там же есть и...

21 апреля 2018 г. 10:53
EVILEG

Не заполняется модель в ListView данными json

Ошибка в функции getFriends(). Полагаю, что VK изменили API и возвращаемый ответ. Вот исправленный вариант данной функции function getFriends() { var requ = new XMLHttpR...

10 апреля 2018 г. 14:20
alex_lip

Подключение файла js к проекту.

Спасибо. Весьма доходчиво.

Рекомендуемые страницы