Типы СОМ

ТипСП

VARIANT_B00L

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

0LE_C0L0R

QColor

SAFEARRAY(VARIANT)

QList<QVariant>

SAFEARRAY(BSTR)

QStringList

SAFEARRAY(BYTE)

QByteArray

VARIANT

QVariant

IFontDisp *

QFont

IPictureDisp *

QPixmap

Тип, определяемый пользователем

QRect, QSize, QPoint

Рис. 20.5. Связь между типами СОМ и Qt

Для получения списка всех свойств, сигналов и слотов, доступных в объектах QAxObject или QAxWidget вместе с их типами Qt, сделайте вызов функции QAx­Base : :generateDocumentation() или используйте утилиту командной строки Qt dump-doc, расположенную в каталоге Qt tools\activeqt\dumpdoc.

Теперь продолжим рассмотрение конструктора PlayerWindow:

wmp->setProperty("ShowControls", false);

wmp->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); connect(wmp, SIGNAL(PlayStateChange(int, int)),

this, SLOT(onPlayStateChange(int, int))); connect(wmp, SIGNAL(ReadyStateChange(ReadyStateConstants)),

this, SLOT(onReadyStateChange(ReadyStateConstants))); connect(wmp, SIGNAL(PositionChange(double, double)),

this, SLOT(onPositionChange(double, double)));

После вызова QAxWidget:: set Control () мы вызываем функцию QObject:: set-Property ( ) для установки свойства ShowCont rols (отображать элементы управления) элемента управления Media Player системы Windows на значение false, поскольку мы предоставляем свои собственные кнопки для работы с компонентом. Функция

QObj ect:: setP rope rty() может использоваться как для свойств СОМ, так и для обыч­ных свойств Qt. Ее второй параметр имеет тип QVariant.

Затем мы вызываем функцию setSizePolicyO, чтобы элемент управления Ac­tiveX мог занять все имеющееся в менеджере компоновки пространство, и мы подсо­единяем три события ActiveX компонента СОМ к трем слотам.

stopButton = new QToolButton; stopButton->setText(t r("&Stop")); stopButton->setEnabled(false);

connect (stopButton, SIGNAL(clickedO), wmp, SLOT(StopO));

}

Остальная часть конструктора PlayerWindow следует обычному образцу, за ис­ключением того, что мы подсоединяем некоторые сигналы Qt к слотам объекта СОМ (Р1ау(), Pause() и Stop()). Мы показали здесь реализацию только кнопки Stop, поскольку другие кнопки реализуются аналогично.

Давайте на этом закончим обсуждение конструктора и рассмотрим функцию timerEvent():

void PlayerWindow::timerEvent(QTimerEvent *event) {

if (event->timerld() == updateTimer) {

double curPos = wmp->property("CurrentPosition").toDoubleO;


<< назад вперед >>