|
Типы СОМ |
ТипСП |
|
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, сделайте вызов функции QAxBase : :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, чтобы элемент управления ActiveX мог занять все имеющееся в менеджере компоновки пространство, и мы подсоединяем три события 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;
<< назад вперед >>