Фреймворк Qt позволяет добавить множество полезного функционала в Вашу внешнюю компоненту, например, QtMultimedia модуль предоставляет богатый набор функций, позволяющих использовать мультимедийные возможности платформы. QCamera - использование камер. Модуль работы с сетью QtNetwork предоставляет удобные как низкоуровневые сетевые концепции, так и высокоуровневые классы. Класс QTextToSpeech обеспечивает удобный доступ к механизмам синтеза речи по тексту. Также в фреймворке присутствует множество других классов, облегчающих работу программиста.
Тестировалось с версией платформы 1С:Предприятие 8.3.17.2306
В данном примере реализована работа как с вышеперечисленными классами, так и работа с GUI фреймворка из динамической библиотеки. Для этого, в конструкторе наследника от абстрактного класса IComponentBase, в worker_thread потока, создаваемого функцией_beginthreadex с помощью QCoreApplication::setLibraryPaths, вначале, до создания объектов, устанавливается путь для нахождения необходимых библиотек фреймворка. Соответственно сама компонента и ее библиотеки должны находится по данному пути, затем инициализируется объект QApplication. Далее создаются остальные объекты.
unsigned __stdcall worker_thread(void* arg)
{
if(!demoQtClass)
{
int argc = 0;
char* argv = { strdup("hi") };
QStringList paths = QCoreApplication::libraryPaths();
paths.append("c:/QtDemoAddInNative");
QCoreApplication::setLibraryPaths(paths);
QApplication* appp;
appp = new QApplication(argc, &argv);
appp->setQuitOnLastWindowClosed(false);
demoQtClass = new QtWidgetsDemoClass;
cameraWidget = new QtCameraWidget;
chatWidget = new QtChatWidget;
utils = new my_utils;
appp->exec();
_endthreadex(0);
}
return 0;
}
Затем с помощью механизма сигналов и слотов реализуются коммуникации между созданными объектами. Для нахождения библиотек фреймворка необходимо в Windows системную переменную Path также добавить каталог месторасположения библиотеки, в нашем случае это "c:\QtDemoAddInNative".
Также для работы компоненты необходима установка распространяемого компонента Visual C++ Redistributable x86 или x64, в зависимости от разрядности компоненты. Также следует учесть разрядность компоненты и разрядность платформы 1с.
Описание компоненты.
После нажатия на кнопку "Подключить компоненту" в случаете ее успешного подключения, появляется соответствующее сообщение:
В системном трее появится иконка компоненты:
Окно программы позволяет взаимодействовать с 1С посредством генерации внешнего события. В ответ из 1С в процедуре "Внешнее событие" вызывается метод внешней компоненты "ОтправитьТекстВВиджет" который добавляет в форму текстового редактора внешней компоненты текст.
Команды "Воспроизвести звук", "Остановить" - работают с классом QMediaPlayer фреймворка Qt.
По кнопке "Прочитать текст" с помощью класса QTextToSpeech происходит преобразование текста в речь. На компьютере должны быть установлены библиотека SAPI и голоса для синтезатора речи.
Модуль для работы с камерой использует класс QCamera, обеспечивающий интерфейс для системных устройств камеры. По кнопке в 1С "Получить фото" происходит преобразование типа QByteArray в двоичные данные с типом VTYPE_BLOB и возврат их в 1С.
Тест работы с e2eSoft VCam - эмулятор веб-камеры. По галочке "Отразить" можно зеркально отразить полученное фото.
Виджет чата - пример простого чата на основе QUdpSocket – позволяет принимать и отправлять сообщения как всем, так и выбранным адресатам.
Компиляция проекта проверялась в Visual Studio 2017 и в Visual Studio 2019 под Windows 10.
Версия Qt - 5.15.2
Работа проверялась в Windows 10. Также компонента функционировала и на более ранних операционных системах, например Server 2008 R2.
В архиве находится собранная 32-х разрядная версия со всеми библиотеками, конфигурация, а также исходные коды компоненты.