Russian Qt Forum
Ноябрь 25, 2024, 10:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: почему ошибка в потоке?  (Прочитано 14010 раз)
CJ1
Гость
« Ответ #30 : Октябрь 04, 2012, 14:47 »

В данный момент только ActivX
Нужно выполнять его и крутить прогресс бар, если найду такой способ то найду и для всего остольного
Записан
mutineer
Гость
« Ответ #31 : Октябрь 04, 2012, 14:49 »

С ActivX не работал и в чем проблема работы с ним из потока не знаю
Записан
CJ1
Гость
« Ответ #32 : Октябрь 04, 2012, 14:52 »

та же ошибка как и в первом посте который я дал
Тупо дальше вот этой строчки не идет
Код
C++ (Qt)
QAxWidget * application_ = new QAxWidget( "Excel.Application");
Записан
CJ1
Гость
« Ответ #33 : Октябрь 04, 2012, 14:53 »

ладно, фиг с ним, пусть будет так, не кто в инете не нашел решение этой проблемы
Записан
mutineer
Гость
« Ответ #34 : Октябрь 04, 2012, 14:55 »

зависит от того, где эта строчка стоит
Записан
CJ1
Гость
« Ответ #35 : Октябрь 04, 2012, 14:58 »

Да даже просто обращение к Qtablewidget преводит к краху, а вычисления идут прям из него
Записан
V1KT0P
Гость
« Ответ #36 : Октябрь 04, 2012, 21:25 »

Да даже просто обращение к Qtablewidget преводит к краху, а вычисления идут прям из него
Я же надеюсь что ты только из главного потока к нему обращаешься? А так минимальный нерабочий пример рулит.
Записан
CJ1
Гость
« Ответ #37 : Октябрь 05, 2012, 15:35 »

Вобщем сделал экспорт через буффер обмена.
И летает.



Но вот минимальный пример
Код
C++ (Qt)
       QAxObject* WordApplication=new QAxObject("Word.Application"); // Создаю интерфейс к MSWord
 
        WordApplication->setProperty("Visible", false); // Делаю его невидимым
       QApplication::processEvents();
       QAxObject* WordDocuments = WordApplication->querySubObject( "Documents()" ); // Получаю интерфейсы к его подобъекту "коллекция открытых документов":
       WordDocuments->querySubObject( "Add()" ); // Создаю новый документ
 
       QAxObject* ActiveDocument = WordApplication->querySubObject("ActiveDocument()");
 
       // создание таблицы
       QAxObject* Tables = ActiveDocument->querySubObject("Tables()");
 
 
       QApplication::processEvents();
 
       int r,c;
       if (startRow==0) r = table->rowCount(); else r =table->rowCount()-1;
       if (StartColumn==0) c = table->columnCount(); else c =table->columnCount()-1;
       QAxObject* NewTable = Tables->querySubObject("Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior)", ActiveDocument->dynamicCall("Range()"), r,  c, 1, 1);
 
       for (int i=startRow; i < table->rowCount(); i++){
           for (int j=StartColumn; j < table->columnCount(); j++){
 
               int i1,j1;
               if (startRow==0) i1 = i+1; else i1 =i;
               if (StartColumn==0) j1 = j+1; else j1 =j;
               // запись текста в ячейку
 
               QAxObject* Cell = NewTable->querySubObject("Cell(Row, Column)", i1, j1);
               if( !Cell ) {
                   QMessageBox::information(0,QString::number(i)+" - "+QString::number(j),"cell");
                   return;
               }
               QAxObject* CellRange = Cell->querySubObject("Range()");
 
 
               QString data = table->item(i,j)->text();
 
               // вставка значения переменной data (любой тип, приводимый к QVariant) в полученную ячейку
               CellRange->dynamicCall("InsertAfter(Text)", data);
 
               // освобождение памяти
               delete CellRange;
               delete Cell;
 
           }
       }
 
               ActiveDocument->dynamicCall("SaveAs(const QVariant&)",QVariant(exportname.replace("/","\\")));
 
 
               WordApplication->dynamicCall("Close (Boolean)", FALSE);
               WordApplication->dynamicCall("Quit()");
 
 
 
               delete NewTable;
               delete Tables;
               delete ActiveDocument;
               delete WordDocuments;
               delete WordApplication;
Записан
mutineer
Гость
« Ответ #38 : Октябрь 05, 2012, 15:52 »

А зачем в примере периодически QApplication::processEvents(); ?
Записан
CJ1
Гость
« Ответ #39 : Октябрь 05, 2012, 15:59 »

Ну, можно удалить, это чтобы прогресбар крутился.
Записан
CJ1
Гость
« Ответ #40 : Октябрь 05, 2012, 16:00 »

Ну в потоке его нету.
Всеравно к любому виджету обращения и хряц
Записан
CJ1
Гость
« Ответ #41 : Октябрь 05, 2012, 16:01 »

Код
C++ (Qt)
       for (int i=startRow; i < table->rowCount(); i++){
           for (int j=StartColumn; j < table->columnCount(); j++){
 
               int i1,j1;
               if (startRow==0) i1 = i+1; else i1 =i;
               if (StartColumn==0) j1 = j+1; else j1 =j;
               // запись текста в ячейку
 
               QAxObject* Cell = NewTable->querySubObject("Cell(Row, Column)", i1, j1);
               if( !Cell ) {
                   QMessageBox::information(0,QString::number(i)+" - "+QString::number(j),"cell");
                   return;
               }
               QAxObject* CellRange = Cell->querySubObject("Range()");
 
 
               QString data = table->item(i,j)->text();
 
               // вставка значения переменной data (любой тип, приводимый к QVariant) в полученную ячейку
               CellRange->dynamicCall("InsertAfter(Text)", data);
 
               // освобождение памяти
               delete CellRange;
               delete Cell;
 
           }
       }
Записан
mutineer
Гость
« Ответ #42 : Октябрь 05, 2012, 16:02 »

Ну, можно удалить, это чтобы прогресбар крутился.


А по какой логике он стоит не в самом долгом месте - в цикле - а в каких-то случайных точках?
Записан
CJ1
Гость
« Ответ #43 : Октябрь 05, 2012, 22:16 »

Цитировать
А по какой логике он стоит не в самом долгом месте - в цикле - а в каких-то случайных точках?

Я уже не помню, там тоже были помойму циклы, но я уже это все удалил, а про этот забыл.
Ну здесь незачем парится
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.323 секунд. Запросов: 21.