Russian Qt Forum

Qt => ActiveX => Тема начата: Денис от Октябрь 07, 2014, 12:39



Название: ActiveX отлавливание событий ?
Отправлено: Денис от Октябрь 07, 2014, 12:39
Порылся по столь обильной ветке, но так и не понял как к QAxObject подтянуть какие-то события, класс не содержит никаких сигнальных функций или статусных методов, я так понял необходимо подключать эти события из вне ?

Пример стандартный:
Код:
    QAxObject *mExcel = new QAxObject( "Excel.Application",this);  //Это мы получаем указатель на Excel
    QAxObject *workbooks = mExcel->querySubObject( "Workbooks" ); //это на книги
    QAxObject *workbook = workbooks->querySubObject( "Open(const QString&)", "C:\\Qt\\hello5.xlsx" ); //это на директорию,откуда грузить книгу
    QAxObject *mSheets = workbook->querySubObject( "Sheets" ); //это на листы(снизу вкладки)
    QAxObject *StatSheet = mSheets->querySubObject( "Item(QVariant&)", QVariant("Main") ); //Это мы указываем,какой лист выбрать. У меня он называется topic

    QAxObject *rangec = StatSheet->querySubObject( "Cells(const QVariant&,const QVariant&)",QVariant(1),QVariant(1)); //получаем указатель на ячейку,откуда будем копировать.
    QAxObject *rangep = StatSheet->querySubObject( "Cells(const QVariant&,const QVariant&)",QVariant(2),QVariant(3)); // получаем указатель на ячейку,куда будем копировать.
    rangec->dynamicCall("Copy()"); //осуществляем запрос на копирование.
    rangep->dynamicCall("Select()"); ///выбираем ячейку,в которую будем вставлять данные
    StatSheet->dynamicCall("Paste()");  ///вставляем.

    delete StatSheet;
    delete mSheets;
    workbook->dynamicCall("Save()");
    connect(workbook,SIGNAL());
    workbook->dynamicCall("Close()");
    delete workbook;
    delete workbooks;
    mExcel->dynamicCall("Quit()");
    delete mExcel;

Но как увидеть что при открытии идет событие файл можн открыть только для чтения и остальные которые отображаются в GUI ?


Название: Re: ActiveX отлавливание событий ?
Отправлено: Johnik от Октябрь 07, 2014, 13:07
С событиями COM и Qt не всё так просто.

Если совсем по простому. Есть несколько типов событий в COM:
1. Более новый механизм (в классах унаследованных от IDispath). Из этих классов Qt подтягивает события и отображает на сигналы.
2. Старый механизм (в классах унаследованных от IUnknown). Тут придется ручками.

В обоих случаях есть нюансы.


Название: Re: ActiveX отлавливание событий ?
Отправлено: Денис от Октябрь 07, 2014, 15:23
А где конкретно можно почитать про это, про данное наследование и методы привязки ?


Название: Re: ActiveX отлавливание событий ?
Отправлено: Johnik от Октябрь 07, 2014, 19:51
Для начала: Дейл Роджерсон | Основы COM, потом по крохам в разных местах...

Вот тут (http://www.prog.org.ru/topic_25993_0.html) я разбирался...