Саммерфилд Марк
Шрифт:
Мы вызываем функцию setControl для объекта QAxWidget с идентификатором класса элемента управления Media Player 6.4 системы Windows. Это создает экземпляр требуемого компонента. С этого момента все свойства, события и методы элемента управления ActiveX доступны как свойства, сигналы и методы Qt объекта QAxWidget.
Рис. 20.4. Дерево наследования для модуля QAxContainer.
Типы данных СОМ автоматически преобразуются в соответствующие типы объектов, как показано на рис. 20.5:
• VARIANT_BOOL — bool,
• char, short, int, long — int,
• unsigned char, unsigned short, unsigned int, unsigned long — uint,
• float, double — double,
• CY — qlonglong, qulonglong,
• BSTR — QString,
• DATE — QDateTime, QDate, QTime,
• OLE_COLOR — QColor,
• SAFEARRAY(VARIANT) — QList<QVariant>,
• SAFEARRAY(BSTR) — QStringList,
• SAFEARRAY(BYTE) — QByteArray,
• VARIANT — QVariant,
• IFontDisp * — QFont,
• IPictureDisp * — QPixmap,
• Тип, определяемый пользователем — QRect, QSize, QPoint.
Например, входной параметр типа VARIANT_BOOL становится типом bool, а выходной параметр типа VARIANT_BOOL становится типом bool &. Ecли пoлyчeнный тип являeтcя клaccoм Qt (QString, QDateTime и так далее), входной параметр становится ссылкой с модификатором const (например, const QString &).
Для получения списка всех свойств, сигналов и слотов, доступных в объектах QAxObject или QAxWidget вместе с их типами Qt, сделайте вызов функции QAxBase::generateDocumentation или используйте утилиту командной строки Qt dumpdoc, расположенную в каталоге Qt tools\activeqt\dumpdoc.
Теперь продолжим рассмотрение конструктора PlayerWindow:
После вызова QAxWidget::setControl мы вызываем функцию QObject::setProperty для установки свойства ShowControls (отображать элементы управления) элемента управления Media Player системы Windows на значение false, поскольку мы предоставляем свои собственные кнопки для работы с компонентом. Функция QObject::setProperty может использоваться как для свойств СОМ, так и для обычных свойств Qt. Ее второй параметр имеет тип QVariant.
Затем мы вызываем функцию setSizePolicy, чтобы элемент управления ActiveX мог занять все имеющееся в менеджере компоновки пространство, и мы подсоединяем три события ActiveX компонента СОМ к трем слотам.
Остальная часть конструктора PlayerWindow следует обычному образцу, за исключением того, что мы подсоединяем некоторые сигналы Qt к слотам объекта COM (Play, Pause и Stop). Мы показали здесь реализацию только кнопки Stop, поскольку другие кнопки реализуются аналогично.