Здравствуйте!
Есть сторонняя программа с закрытыми исходниками, являющаяся RTD сервером. Требуется получать от неё моей программой данные в реальном времени. Про RTD можно прочитать здесь: http://msdn.microsoft.com/en-us/library/aa140060(v=office.10).aspx. Microsoft предполагал, что RTD сервер сможет сделать любой, а клиентом будет являться Excel. В связи с этим есть 2 варианта:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
...
// Присоединяюсь к уже открытому Excel
// excel, cell - поля класса, чтобы иметь доступ из деструктора и из слота
excel = new QAxObject("{00024500-0000-0000-C000-000000000046}&", this);
QAxObject *workbooks = excel->querySubObject("Workbooks");
QAxObject *workbook = workbooks->querySubObject("Item(const QVariant&)", QVariant("data.xls") );
QAxObject *sheets = workbook->querySubObject("Sheets");
QAxObject *sheet = sheets->querySubObject("Item(const QVariant&)", QVariant("list") );
cell = sheet->querySubObject("Cells(QVariant,QVariant)", 1, 1);
QVariant result = cell->property("Value"); // result успешно получает значение ячейки (1, 1)
if (connect(cell, SIGNAL(propertyChanged(const QString&)), SLOT(valueChanged())))
ui->label->setText("Slot connected"); // заходит, слот якобы присоединяется к сигналу
...
}
void MainWindow::valueChanged() // Не заходит при изменении значения ячейки
{
ui->label->setText(cell->property("Value").toString());
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)