Использование mscomm ActiveX с Qt - PullRequest
1 голос
/ 23 сентября 2010

Я знаю, что этот вопрос может показаться странным из-за новых существующих альтернатив, но поверьте мне, есть причина.

Я хотел бы использовать элемент управления mscomm active X для связи через последовательный порт с Qt. Да, я знаю, что есть QextSerialPort, QSerialDevice и множество примеров того, как писать код последовательной связи. Но из-за проблем у меня есть, я хотел бы проверить mscomm.

Я знаю, что в Qt есть система для использования элементов управления ActiveX, но я не могу найти какой-либо четкой информации о том, как их использовать (я не понимаю официальный документ qt по этому поводу).

В Visual C ++ 6 есть mscomm.h и mscomm.cpp, которые, я думаю, реализуют активный интерфейс x, но повсюду множество макросов и зависимостей msoft от Microsoft.

Есть подсказка?

1 Ответ

1 голос
/ 30 августа 2011

Хорошо, кажется, я достиг этого.

Вы должны использовать QAxObject, чтобы обернуть activeX, который вы хотите выполнить.Для этого вам нужно знать CLSID, в моем случае:

  QAxObject* activex = new QAxObject("648A5600-2C6E-101B-82B6-000000000014");

Тогда вам нужно только использовать dynamicCall (QString, QVariant) для вызова любого из элементов, которые есть у элемента управления ActiveX.Чтобы сгенерировать список всех доступных методов, используйте:

  QString doc = activex->generateDocumentation();

Это замечательно, вы получаете HTML-документ со всеми доступными членами, свойствами и примерами, которые объясняют, как их использовать (документация Qt говорит, что вы можете использовать dumpdoc для генерации той же информации)

Вот пример того, как открыть порт (номер порта 4):

  QAxObject* activex = new QAxObject("648A5600-2C6E-101B-82B6-000000000014");
  activex->dynamicCall("SetCommPort(int)", 4);
  activex->dynamicCall("SetPortOpen(bool)", true);
...