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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 2 [3] 4 5 ... 21
31  Qt / Установка, сборка, отладка, тестирование / OpenCV+Qt : Июнь 16, 2016, 11:51
Доброго дня! Пытаюсь собрать OpenCV для Qt(5.4.2) под win10 x64. Алгоритм сборки смотрел здесь https://www.youtube.com/watch?v=csxkdGQQgNg и здесь http://recog.ru/blog/opencv/4.html и где только не смотрел.. пробовал разные версии OpenCV и CMake. Из последних opencv-3.1.0, CMake-3.6.0-rc2-win64-x64 и везде на этапе mingw32-make получаю ошибку связанную с zlib (см. аттач). Обеспокоенный В замешательстве
На этапе конфигурирования CMake есть warning :
Цитировать
CMake Warning (dev) in modules/highgui/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.
А на этапе генерации куча warning  такого плана:
Цитировать
CMake Warning (dev) in modules/features2d/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in modules/features2d/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in modules/calib3d/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in modules/calib3d/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in modules/stitching/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in modules/stitching/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in modules/videostab/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in modules/videostab/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in modules/core/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in modules/core/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in modules/flann/CMakeLists.txt:
  Policy CMP0020 is not set: Automatically link Qt executables to qtmain
  target on Windows.  Run "cmake --help-policy CMP0020" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

32  Qt / 2D и 3D графика / Re: [РЕШЕНО] Попадание точки в коридор : Май 26, 2016, 09:59
Как говорится идеальный - враг хорошего)  Улыбающийся
33  Qt / 2D и 3D графика / Re: [РЕШЕНО] Попадание точки в коридор : Май 25, 2016, 16:29
QPainterPath для описания коридора по синим точкам вместо полигона? нет, не смотрел. вроде код работает как надо, но пока проверил только в тестовом варианте и пока все гуд. второй вариант, кстати, не работает.. получается что-то типо (см. картинку) Улыбающийся и да, там надо было брать половину halfWidth.
34  Qt / 2D и 3D графика / Re: Попадание точки в коридор : Май 25, 2016, 13:50
Все разобрался!! Есть в такой реализации своя особенность (см. картинку), но мне было важнее нарисовать равноудаленный коридор от группы точек, так что зеленый можно убирать, а оставить только красный!  Улыбающийся

Igors, спасибо большое!!!
35  Qt / 2D и 3D графика / Re: Попадание точки в коридор : Май 25, 2016, 12:44
Код
C++ (Qt)
void CalcBluePt( const QPolygonF & poly, int index, int lineWidth, QPointF bluePt[2] )
{
 QVector2D dir;
 const QPointF & base = poly[index];
 if (index > 0)
   dir += QVector2D(base - poly[index - 1]).normalized():
 if (index < poly.size() - 1)
   dir += QVector2D(poly[index + 1] - base).normalized():
 dir.normalize();
 dir *= lineWidth;
 QPointF ofs(-dir.y(), dir.x());
 bluePt[0] = base + ofs;
 bluePt[1] = base - ofs;
}
Писал прямо здесь, возможны ошибки синнтаксиса

Круто! Вопросик по параметрам ф-ции const QPolygonF & poly - это выходной полигон описывающий линию заданной толщины?;  int index - это индекс чего?; QPointF bluePt[2] - это координаты синих точек? так я же их не знаю, как мне их на вход подать?

Или же эта ф-ция возвращает координаты синих точек, получая на вход координаты желтых точек и толщину линии??
36  Qt / 2D и 3D графика / [РЕШЕНО] Попадание точки в коридор : Май 25, 2016, 11:55
Доброго дня! Вопрос такого плана, можно ли как-то средствами Qt хитро определить попадает ли красная точка в зеленый коридор?
Рисование осуществляется:
Код:
painter.setPen(QPen(colorAlpha,curWidth,pStyle,Qt::FlatCap));
painter.setCompositionMode(mode);
painter.drawPolyline(points);

Координаты желтых точек известны, может возможно как-то получить координаты синих, зная толщину линии? а затем засунуть их в QPolygon в правильном порядке, а там уже алгоритм попадания точки в полигон известен. Рисуется все на QWidget, средствами QPainter! Модуль рисования большой и уже реализован, поэтому конкретного переделывания не хотелось бы, скажем на QGraphicsScene, но возможно сценой можно как-то посчитать в фоне это, либо на крайняк математически как это можно рассчитать.. Возникла мысль обрабатывать цвет пикселя, но коридор может быть не видим, а обработка все равно должна вестись..так что скорее всего нет. В общем какие будут мысли?)
37  Qt / Общие вопросы / Re: Неправильное позиционирование виджета : Май 04, 2016, 11:59
Цитировать
5.6.0 под win8.1 позиционируется правильно!

Эммм... это с QMediaPlayer + QVideoWidget?

Это с примером выше приведенным
38  Qt / Общие вопросы / Re: Неправильное позиционирование виджета : Апрель 28, 2016, 10:13
C Qt4.8.6, 5.4.2, 5.6.0 под win8.1 позиционируется правильно! Правда в 5.6.0 выводит
Warning: QT_DEVICE_PIXEL_RATIO is deprecated. Instead use:
    QT_AUTO_SCREEN_SCALE_FACTOR to enable platform plugin controlled per-screen factors.
    QT_SCREEN_SCALE_FACTORS to set per-screen factors.
    QT_SCALE_FACTOR to set the application global scale factor.
39  Qt / Пользовательский интерфейс (GUI) / Re: Закрыть окно без смены фокуса : Ноябрь 01, 2015, 19:51
а не подскажите как вы нарисовали свой title c бубочкой "закрыть"?) что переопределить надо или настроить.. а то у меня проект есть под linux с openbox и там никаким образом не хотят убираться кнопки максимизации и минимизации окна! под win флаги работают, а там 0 реакции. так может это вариант нарисовать свой title c одной кнопкой закрыть.. но возможность перемещать окна должна остаться!
40  Qt / Пользовательский интерфейс (GUI) / Перемещать QDockWidget.. : Октябрь 15, 2015, 15:25
Всем привет! Подскажите как перемещать QDockWidget по экрану без кнопки Alt в Linuх (Ubuntu Server), оконный менеджер OpenBox. флаг QDockWidget::DockWidgetMovable установлен! Под win проблем нет!
41  Qt / Qt Embedded / Re: Проверить состояние COM-порта на обрыв/отключение кабеля! : Октябрь 06, 2015, 17:13
Невозможно в принципе, вообще невозможно!

Если используется кабель в котором выведены сигналы RTS/CTS/RTS/CTS (и или юзается HardwareFlowControl или же удаленный девайс нарочно инициализирует свой пин RTS, состояние которого можно прочитать на другом конце через CTS), то тогда их состояние можно поллить (как в примере выше) - но это костыыыль и не факт что заработает.

См на QSerialPort::pinoutSignals().

Мг.. понятно! ну выше приведенный код работает для моих целей, для Win будет
Код:
#include <windows.h>
int GetLine(void* fd, int line)
{
    Q_UNUSED(line);
    DWORD status = MS_DSR_ON;
    if(GetCommModemStatus( fd, &status ) == 0)
    {
        return false;
    }
    return bool(status & MS_DSR_ON);
}
если уже костылить до конца))) Спасибо, почитаю про QSerialPort::pinoutSignals()..
42  Qt / Qt Embedded / Проверить состояние COM-порта на обрыв/отключение кабеля! : Октябрь 06, 2015, 15:38
Доброго времени суток! Подскажите пожалуйста как можно проверить состояние COM-порта на обрыв/отключение кабеля!
Хотелось бы кроссплатформенный вариант, видимо используя QSerialPort! Есть пример кода на Linux, который эту задачу решает, но нужно более универсальное решение:

Код:
#include <sys/ioctl.h>
#include <termios.h>

int GetLine(int fd, int line)
{
   unsigned long status = 0;
   ioctl(fd, TIOCMGET, &status);
   switch(line)
   {
      case 108: return bool(status & TIOCM_DTR);
      case 107: return bool(status & TIOCM_DSR);
      case 106: return bool(status & TIOCM_CTS);
      case 105: return bool(status & TIOCM_RTS);
      case 0:   return bool(status & TIOCM_CAR);
      default:  return -1;
   };
}
43  Qt / Пользовательский интерфейс (GUI) / Re: QTreeWidget сброс selection : Август 25, 2015, 15:39
Попробуй
void QAbstractItemView::clearSelection()
44  Qt / 2D и 3D графика / Re: Трансформация карт : Май 08, 2015, 13:09
Что то где-то у тебя не правильно считается. Не поленился и тестовое приложение по-быстрому сварганил, всё ок.

Спасибо БОЛЬШОЕ! Буду разбираться..
45  Qt / 2D и 3D графика / Re: Трансформация карт : Май 06, 2015, 16:02
Посмотрел немного внимательнее - всё равно не очень понятно, что там делается. Эта процедура пытается всю карту планеты загрузить в картинку? Может проще самому эту часть переписать? И вполне возможно, что действительно тайлы не правильно размещаются на экране, так как смещение не только до широте, но и по долготе.

Нет не всю.. с начала создается временный буфер для склейки выбранных тайлов с диска
Код:
int sizeN = w*h*4;
char *buf2N = new char[sizeN*8];
затем выбирается масштаб карт (соотносится масштаб карт гугла Z с масштабом в программе)
Код:
//10-20=4;30-50=3;60-100=2;110-200=1;210-400=0
int curScale = currentScale;
if(curScale > 200) index = 0;else
if(curScale > 100) index = 1;else
if(curScale >  50)  index = 2;else
if(curScale >  20)  index = 3;else
                          index = 4;

здесь видимо считается масштабный коэффициент, соотношение точки на мировой карте для данного масштаба и широты к точке на экране..
Код:
    Zoom = 8 + index;
    BM0  = pow(2,(Zoom-1+8))/2;     // центр мира в пикселях для данного уровня
    R0   = 6378137 * cos(lat_rad);  // радиус большой полуоси эллипсоида
    WW   = 2*M_PI*R0;               // длина окружности планеты на lat широте

    XYRes = WW/(pow(2,(Zoom-1))*256);

    scrRes = currentScale*1000.*2/(szWinDraw.height() - 2*PaddingWinDraw);
    scaleK = (XYRes / scrRes);

здесь идет расчет координат тайлов и их количества в временном буфере
Код:
// координаты на растровом массиве данного уровня в пикселах, от верхнего левого угла массива
    Xp = BM0*(1+lon_rad/M_PI);
    Yp = BM0*(1 - 0.5*log((1+sin(lat_rad))/(1-sin(lat_rad)))/M_PI);

    // номера блоков в тайловом массиве
    numX = (Xp/256);
    numY = (Yp/256);
    // смещение внутри тайла в пикселях
    dx = (Xp - numX*256);
    dy = (Yp - numY*256);

    tileNewSize = floor(256*scaleK);

    numTilesX = 2*round(0.5+0.5*w/tileNewSize);
    numTilesY = 2*round(0.5+0.5*h/tileNewSize);

    startX = numX - (numTilesX/2);
    startY = numY - (numTilesY/2);

    dx = dx*scaleK + abs(w - numTilesX*tileNewSize)/2;
    dy = dy*scaleK + abs(h - numTilesY*tileNewSize)/2;

Здесь по рассчитанным координатам достаем тайлы с диска и помещаем в буфер
Код:
int* dest = (int*)buf2N;

    static int numb = 0;
    for(int x = startX; x < (startX+numTilesX+1); x++)
    {
      for(int y = startY; y < (startY+numTilesY+1); y++)
      {
          fullPathFile = "";

          fullPathFile = patchToMap + QString("/z%1/%2/x%3/%4/y%5.jpg")
              .arg(Zoom )
              .arg(x/1024)
              .arg(x)
              .arg(y/1024)
              .arg(y);

          fileExist = tmpImage.load(fullPathFile);

          if(!fileExist)
          {
              QString nameFileMap = QString("/z%1/%2/x%3/%4/y%5.png")
                      .arg(Zoom)
                      .arg(x/1024)
                      .arg(x)
                      .arg(y/1024)
                      .arg(y);

              fullPathFile = patchToMap + nameFileMap;

              fileExist = tmpImage.load(fullPathFile);
          }

          int width = 2*w;

          if(fileExist)
          {
              tmpIm = tmpImage.scaled(tileNewSize,tileNewSize, Qt::KeepAspectRatio,
                                                               Qt::SmoothTransformation);
              numb++;

              for(int yy = 0; yy < tmpIm.height(); yy++)
                for(int xx = 0; xx <  tmpIm.width(); xx++)
                {
                    dest[
                        ((yy)*width+xx)
                        +((x-startX)*tileNewSize+(y-startY)*tileNewSize*width)
                        ] = (int)tmpIm.pixel(xx,yy);
                }
          }
       } // end for(;;) - y
    } // end for(;;) - x

последнее преобразование это, копирование из буфера в картинку, которая рисуется на экране
Код:
 for(int y = 0; y < h; y++)
     for(int x = 0; x < w; x++)
      if(layerMap->valid(x,y))
        layerMap->setPixel(x,y,src[((x+dx) + (y+dy)*w*2)]);

Пока писал сам немного понял Улыбающийся но все равно не понятно, где и в чем может быть косячина..
Страниц: 1 2 [3] 4 5 ... 21

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