QT отладка

Описание: Разработка и отладка приложений. Упор на 3D-графику.

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3652
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 6 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#7 dyvniy » Пт, 6 сентября 2013, 16:46:16

Правильное использование QThread
http://habrahabr.ru/post/150274/

Код: Выделить всё

void Session::addThread(ReportType r_type)
{
    RBWorker* worker = new RBWorker(r_type);
    QThread* thread = new QThread;
    worker->setFileList(files); /* передаем список файлов для обработки */
    worker->moveToThread(thread);

/*  Теперь внимательно следите за руками.  Раз: */
    connect(thread, SIGNAL(started()), worker, SLOT(process()));
/* … и при запуске потока будет вызван метод process(), который создаст построитель отчетов, который будет работать в новом потоке

Два: */
    connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
/* … и при завершении работы построителя отчетов, обертка построителя передаст потоку сигнал finished() , вызвав срабатывание слота quit()

Три:
*/
    connect(this, SIGNAL(stopAll()), worker, SLOT(stop()));
/* … и Session может отправить сигнал о срочном завершении работы обертке построителя, а она уже остановит построитель и направит сигнал finished() потоку

Четыре: */
    connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
/* … и обертка пометит себя для удаления при окончании построения отчета

Пять: */
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
/* … и поток пометит себя для удаления, по окончании построения отчета. Удаление будет произведено только после полной остановки потока.

И наконец :
*/
    thread->start();
/* Запускаем поток, он запускает RBWorker::process(), который создает ReportBuilder и запускает  построение отчета */

    return ;
}


void Session::stopThreads()  /* принудительная остановка всех потоков */
{
    emit  stopAll();
/* каждый RBWorker получит сигнал остановиться, остановит свой построитель отчетов и вызовет слот quit() своего потока */
}

void Session::buildReports()
{
    stopThreads();
    for(int i =0; i < reports.size(); ++i) {
        addThread(reports.at(i));
    }
    return ;
}

void Session::~Session()
{
    stopThreads();  /* останавливаем и удаляем потоки  при окончании работы сессии */
    …
}
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3652
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 6 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#8 dyvniy » Пн, 30 сентября 2013, 11:20:16

Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3652
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 6 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#9 dyvniy » Ср, 9 октября 2013, 10:31:21

Qt и COM
http://www.pcs-service.ru/qt-i-com/

Код: Выделить всё

1. После создания нового проекта в pro – файле нужно прописать строчку CONFIG += qaxcontainer.
 2. Подключить компонент Qt для работы с ActiveX. Для этого нужно написать строчку #include <QAxObject>.
 3. Подключить заголовочный файл с описанием COM-интерфейса: #include »IMyComponentName.h»
 4. Объявить указатель на объект класса QAxObject. Например: QAxObject *object;
 5. Объявить указатель на объект интерфейса: IMyComponentName *pMyComponentName;
 6. Зная имя компонента выделить память под объект класса QAxObject: object = new QAxObject(«MyComponentName.Component.1″);
 7. Запросить интерфейс от компонента: HRESULT hr = object->queryInterface(IID_IMyComponentName, (LPVOID*)&amp;pMyComponentName);


Добавлено спустя 1 минуту 42 секунды:
Использование элементов управления ActiveX и COM в Qt
http://doc.crossplatform.ru/qt/4.7.x/activeqt-container.html
Модуль QAxContainer является частью каркаса ActiveQt.

Добавлено спустя 3 часа 21 минуту 57 секунд:
QT под Android на маке))
http://habrahabr.ru/post/185140/
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3652
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 6 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#10 dyvniy » Вт, 5 ноября 2013, 09:03:34

Qt Designer + OpenCV
http://habrahabr.ru/post/146210/
изображение с камеры

Добавлено спустя 1 минуту 41 секунду:

Код: Выделить всё

Рассмотрим определение устройства захвата методом new_capture
/*----------------------------------------------------------------------------*/
void
CQtOpenCVImagePrivate::new_capture ()
{
  free_capture ();//освобождение устройства захвата

  bool b_ok;
  int i_index = f_capture_path.toString ().toInt (&b_ok); // определение номера камеры, если это номер, а не URL

/* информация к размышлению:
   перезахват устройства, если камера реализована как CGI для вебсервера, возвращающий по одному кадру
  if(b_ok) {
    p_capture = cvCreateCameraCapture(i_index);
    if(p_capture)
      if(!p_opencv_frame)
        p_opencv_frame = cvQueryFrame (p_capture);
  } else {
    while((p_capture =cvCaptureFromFile(f_capture_path.toString ().toStdString ().c_str ()))) {
      p_opencv_frame = cvQueryFrame (p_capture);
      new_qt_image ();
      cvWaitKey (1000);
    }
  }
*/
  // да, ну его, этот перезахват. Перезахватим по запросу методами OpenCV.
  p_capture =
      b_ok ?
        cvCreateCameraCapture(i_index) :
        cvCaptureFromFile(f_capture_path.toString ().toStdString ().c_str ());

  p_opencv_frame = p_capture ? cvQueryFrame (p_capture) : 0; // получение фрейма методом из OpenCV

  new_qt_image (); // формирование экземпляра QImage
}


Добавлено спустя 34 секунды:
OpenCV http://locv.ru/wiki/Оглавление
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3652
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 6 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#11 dyvniy » Пт, 22 ноября 2013, 15:33:50

Продвинутые сигналы и слоты

Код: Выделить всё

signalMapper = new QSignalMapper(this);
   signalMapper->setMapping(taxFileButton, QString("taxfile.txt"));
   signalMapper->setMapping(accountFileButton, QString("accountsfile.txt"));
   signalMapper->setMapping(reportFileButton, QString("reportfile.txt"));
   connect(taxFileButton, SIGNAL(clicked()),
     signalMapper, SLOT (map()));
   connect(accountFileButton, SIGNAL(clicked()),
     signalMapper, SLOT (map()));
   connect(reportFileButton, SIGNAL(clicked()),
     signalMapper, SLOT (map()));
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3652
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 6 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#12 dyvniy » Ср, 27 ноября 2013, 11:19:53

Изображение


Название раздела: Программирование (под Desktop и Android)
Описание: Разработка и отладка приложений. Упор на 3D-графику.

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения
:) ;) :hihi: :P :hah: :haha: :angel: :( :st: :_( :cool: 8-| :beee: :ham: :rrr: :grr: :* :secret: :stupid: :music: Ещё смайлики…
   

Вернуться в «Программирование (под Desktop и Android)»

Кто сейчас на форуме (по активности за 15 минут)

Сейчас этот раздел просматривают: 1 гость