Реклама
10 июля 2017 г. 13:19

Использование модуля QtTextToSpeech для синтеза речи

РуководствоQtqttexttospeech, Qt, синтезатор речи, qt speech, qt читалка954

Библиотека Qt 5.8.0 предоставила программистам возможность использовать системный синтезатор речи. Синтезатор речи - это программа, преобразующая текст в речь. Синтезаторы речи является неотъемлемой частью любой современной операционной системы: Windows (версии 7 и выше), Mac OS, Linux , iOS и Android . Кроссплатформенный интерфейс для управления синтезом речи предоставляет модуль QtTextToSpeech библиотеки Qt .

  • Для работы с модулем QtTextToSpeech на ОС Windows необходимо:
  • установить библиотеку Qt c модулем QtTextToSpeech для компилятора Visual Studio 2015 или старше ( mingw работать не будет );
  • установить компилятор Visual Studio 2015 ;
  • установить библиотеку SAPI 5.1 , если по какой-то причине она отсутствует на вашем компьютере;
  • установить голоса для синтезатора речи (если у вас они отсутствуют).
  • При сборке проекта необходимо использовать теневую сборку.
8 июля 2017 г. 16:40

C++ - Урок 007. Классы

РуководствоC++C++, class594

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

В C++ такие типы данных называются классами. Класс имеет такой комплект составляющих, как переменные и методы для доступа к функционалу класса.

В интерфейсе класса могут быть определены следующие секции:

  • public - методы и переменные доступны для взаимодействия извне класса;
  • protected - методы и переменные доступны для использования внутри класса, а также в классах, наследованных от этого класса;
  • private - методы и переменные доступны для использования только внутри класса
8 июля 2017 г. 15:31

C++ - Урок 006. Структуры

РуководствоC++C++, struct466

Одним из первых шагов в построении новых типов данных является организация данных в структуру, объединяющую несколько различных переменных с разными типами данных. Объявления структуры выполняется с помощью ключевого слова struct .

Например, объявим структуру Vector , в котором будет храниться указатель на начало массива элементов типа double и переменная с количеством этих элементов.

struct Vector {
    int sz;       // Число элементов
    double∗ elem; // указатель на элементы
};

Переменная типа Vector может быть объявлена в коде следующим образом:

Vector v;
6 июля 2017 г. 22:22

Использование gif-анимации в Qt с помощью класса QMovie

РуководствоQtqt, qmovie, gif, анимация, gif-анимация1069

Все видели в интернете красивые анимированные изображения. Их можно скачать на свой компьютер качестве файла с расширением gif. Возникает вопрос — можно ли использовать разместить эти картинки в своих программах? Можно, отвечает библиотека Qt. Рассмотрим, как это сделать.

Создаём новый проект типа Qt widgets. Добавляем объект класса QMovie для воспроизведения анимации. На форме размещаем объект класса QLabel. В конструкторе приложения указываем имя файла для объекта, воспроизводящего анимацию:

mo.setFileName(":/ico/loader.gif");

Передаём указатель на этот объект в lable:

ui->label->setMovie(&mo);

Запускаем воспроизведение анимации:

mo.start();
6 июля 2017 г. 13:40

C++ - Урок 005. Указатели, Массивы и Циклы

РуководствоC++C++, pointer, arrays, loops1057

Массив элементов типа char может быть объявлен следующим образом:

char v[6];  // Массив из шести символов

Таким образом можно объявить указатель на символ:

char* p; // указатель на символ

В объявлении, [] означают массив, тогда как * означает указатель. Индексация массива начинается с 0, таким образом массив v будет иметь шесть элементов, от v[0] до v[5] . Размер массива должен быть константным выражением. Переменная указателя может содержать адрес объекта соответствующего типа.

char∗ p = &v[3]; // p указывает на четвёртый элемент массива v
char x = ∗p; // *p является объектом, на который указывает p

В выражении унарный префикс * означает "содержимое чего-либо", тогда как унарный префикс & означает "адрес чего-либо". Представим результат инициализации графически:

5 июля 2017 г. 17:14

QML - Урок 030. Регистрация QML Типа в качестве Синглетон объекта

РуководствоQMLQML, singleton887

Помимо C++ классов в QML в качестве Синглетона можно использовать и QML типы, которые представляют собой отдельные файлы QML.

Для этого также используется qmlRegisterSingletonType , но чтобы этот тип работал в качестве Singleton объекта, необходимо прописать в самом QML файле pragma Singleton.

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

5 июля 2017 г. 16:05

QML - Урок 029. Регистрация Синглетон объекта для использования "Статических" методов в QML

РуководствоQMLqml, singleton, static452

Понятие статических методов, которые используются в QML несколько отличается от классического в C++, когда в классе создаются статические методы, которые можно использовать обращаясь к имени класса, а не к какому-то конкретному объекту. В случае с QML дела обстоят несколько иначе. Для того, чтобы использовать такие методы в QML, которые присутствуют в C++ классе, необходимо зарегистрировать Синглетон объект, который будет предоставлять требуемые методы, причём эти методы уже не должны быть статическими сами по себе. Они должны как минимум быть помечены макросом Q_INVOKABLE , чтобы их можно было использовать в QML.

Для регистрации Синглетона необходимо использовать функцию qmlRegisterSingletonType , в которую помимо стандартных параметров, которые передаются в qmlRegisterType , необходимо также передать статическую функцию singletonProvider , которую также предстоит написать самим.

1 июля 2017 г. 16:03

QML - Урок 028. Регистрация пользовательских enum в QML

РуководствоQMLQML, enum, qmlRegisterType1150

Для того, чтобы использовать в QML перечисления enum, прописанные в C++, необходимо создать класс, наследованный от QObject, и зарегистрировать его в качестве QML Type перед запуском QML движка  в приложении.

Для изучения создайте проект с использованием QtQuick.

Минимальный вариант такого класса с перечислениям будет следующим:

#ifndef INFO_H
#define INFO_H

#include <QObject>

class Info : public QObject
{
    Q_OBJECT
public:
    enum State {
        Information,
        Debug,
        Warning,
        Error
    };
    Q_ENUM(State)
};

#endif // INFO_H
28 июня 2017 г. 22:10

Создание командной строки на Qt Creator с помощью класса QProcess

РуководствоQtQt, QProcess, командная строка995

С помощью класса QProcess можно создать собственную консоль работы с командной строкой. Для этого достаточно следующего: создадим приложение с графическим интерфейсом и разметим на главном окне объекты классов QLineEdit и QTextEdit (lineEdit и textEdit), для написания запроса и отображения результата запроса. Добавим к нашему классу объект типа QProcess. Он необходим для выполнения системных команд. Создадим два слота. Слот command() для выполнения командного запроса. Этот слот мы подключает к сигналу returnPressed() объекта lineEdit. Слот будет вызываться при нажатии клавиши «Enter», когда в фокусе наша строка для ввода текста. При его выполнении происходит считывание текста из lineEdit и его передача в качестве аргумента функции start() объекта класса QProcess. Для работы на ОС Windows необходимо добавить к строке команды префикс "cmd /C ". Слот setStdout() будет принимать поток данных, полученный от объекта класса QProcess и отображать его в textEdit. Здесь необходимо учитывать ещё одну особенность Windows заключается в том, что кодировки в командной строке и самой ОС отличаются. Конвертирование можно провести с помощью метода toUnicode() класса QTextCodec. При этом надо установить кодировку "IBM 866".

28 июня 2017 г. 12:31

EVILEG - Празднуем 2 года и подводим итоги

НовостиКарьера и бизнес в ITEVILEG, 2 года2232

Настал знаменательный день! Ресурс EVILEG празднует два года со дня своего основания - 28 июня 2015 года.

Два года назад был зарегистрирован первый домен ресурса EVILEG в зоне RU, поднят сайт на Wordpress и началась работа над статейными материалами.

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

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

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

Qt/C++ - Урок 023. Перетаскивание QGraphicsItem на QGraphicsScene мышью

Ну например так можете сделать.void MoveItem::mousePressEvent(QGraphicsSceneMouseEvent *event){ if (QApplication::mouseButtons() == Qt::RightButton) { this->deleteLa...

  • Mark
  • 13 июля 2017 г. 1:26

Qt/C++ - Урок 023. Перетаскивание QGraphicsItem на QGraphicsScene мышью

Подскажите пожалуйста как в данном проекте по перетаскиванию организовать удаление объекта со scene методом delete item, допустим при щелчке ПКМ по объекту QGraphicsScene. Мои попытки оказалис...

  • EVILEG
  • 10 июля 2017 г. 21:34

Qt/C++ - Урок 048. QThread - работа с потоками с помощью moveToThread

А что делали? Повторяете урок или как? Пытались просто скачать проект в конце статьи и запустить?

Qt/C++ - Урок 048. QThread - работа с потоками с помощью moveToThread

У меня происходит переполнение счетчика count, появляется ошибка malloc(): memory corruption (fast). Не подскажите, как с этим бороться?

  • EVILEG
  • 9 июля 2017 г. 2:07

GameDev на Qt - Урок 3. Уничтожение противников

Поэтому в пятом уроке есть исходники всего проекта )))). Вообще, все эти материалы были не предыдущей версии сайта, которая на WordPress. Во время переноса мог что-то потерять.

Сейчас обсуждают на форуме

тестирование классов в QT

это вопрос.

Как реализовать отправку e-mail

Возможно что уже и нет необходимости в почтовом клиенте, но в своё время так же столкнулся с данной проблемой в QT. Нашел один интересный проект под названием libqxt, там реализовано дов...

  • Asteri
  • 14 июля 2017 г. 12:23

css

Делюсь, может, пригодится когда-нибудь) QTableView QHeaderView { background-color: #ffffff; } Вот так эта проблема лечится, градиент задать не получается, но хоть...

  • EVILEG
  • 12 июля 2017 г. 19:52

QSqlQuery выполнение sql запросов из файла

Мне думается, что это уже будет дело вкуса и вашего взгляда на проект. Если Вы действительно собираетесь просто скармливать своему софту SQL скрипты, которые должны будут выполняться для...

QML Canvas + Line. Bug?

Вот оно что, значит не баг) Спасибо