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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 34 35 [36] 37 38 39
526  Qt / 2D и 3D графика / Re: Двумерные координаты на трехмерной плоскости : Апрель 11, 2016, 15:46
Здесь недостаточно условий.
Точка и нормаль определяют плоскость. Наверное эта точка является началом координат системы x',y' (или нет?). Куда направлены сами оси x' и y' ? Нужно как минимум центр, два вектора и условия для системы координат (правосторонняя/левосторонняя, прямоугольная декартова).
527  Программирование / С/C++ / Re: Паттерн наблюдатель : Апрель 11, 2016, 13:12
Если не изменяет память, изначально вопрос состоял как-то так

... А как бы вы это сделали без Qt только на C++? Только идея интересует. boost:signals, собственный велосипед или еще что-то ...

Почему тогда обсуждаем Qt signal-slot, его возможности и преимущества?
528  Программирование / С/C++ / Re: Паттерн наблюдатель : Апрель 11, 2016, 11:57
Не могу понять предмет спора. Чей подход лучше? По мне, так нет никакой разницы, каждый опирается на свои требования к коду и конкретизацию задачи.
Передали this - получили гибкость, скорость, вязкость кода и проблемы при асинхронной работе (необходимость синхронизации).
Реализовали через signal-slot - получили модульность, больше кода, небольшую приторможенность (в GUI совсем незаметную), возможное копирование данных, неудобство взаимосвязи между объектами разных иерархических уровней.
Взяли за основу, например, конечные автоматы - получили другие достоинства и недостатки.
Можно реализовать и через периодический опрос загрузчика по таймеру со своим геморроем.

Любой из вариантов верный, если решает задачу в рамках заданных требований.

Если требование - решить задачу за 5 минут при том со всеми фенечками, то загрузчик вообще будет частью диалога и вся реализация будет в одном файле. Если нужна асинхронная загрузка от GUI, то, например, использование this уже будет не удобно и будет ваяться concurrent, signal-slot, model-controller-view их суперпозиция или еще что-то. Нет единственно верного подхода, и в любой работе всегда действует правило треугольника время - качество - ресурсы, всего должно быть достаточно, а идеальный случай недостижим.
529  Qt / Вопросы новичков / Re: Ошибки компиляции : Апрель 08, 2016, 08:37
Здесь важно, чем собраны libthriftnb и libthrift. Скорее всего с помощью MSVC.
При использовании MinGW32 эти библиотеки необходимо собрать самостоятельно, как это сделать в Linux описано здесь http://thrift.apache.org/docs/BuildingFromSource, про Windows к сожалению не знаю.
530  Программирование / С/C++ / Re: Паттерн наблюдатель : Апрель 08, 2016, 08:25
А что тут "еще лучше"? Улыбающийся ...
Вместо упора на "священную корову" слот/сигнала лучше тщательнее продумать интерфейс (что должен получать индикатор), там не так уж мало данных

Как раз сигнал слот не священен Подмигивающий Это просто более гибкий механизм взаимодействия, чем паттерн наблюдателя, так как не требует прямых или косвенных взаимосвязей между типами объектов, участвующих во взаимодействии.
Если говорить о реализации сигнал-слот взаимодействия в Qt, то наследование от QObject - ооочень неудачное решение), но это всего лишь одна из возможных.
531  Программирование / С/C++ / Re: Паттерн наблюдатель : Апрель 07, 2016, 11:41
Вариантов решения масса, все зависит от дополнительных требований.

1. Синхронная или асинхронная работа компонентов (например, загрузчика и графического интерфейса).
2. Событийная или распределенная модель обмена данными.
3. Модульность

Эти требования определяют выбор паттерна, который целесообразно использовать.

Синхронность/асинхронность определяется однопоточностью или многопоточностью программы.
Событийность предполагает передачу событий в виде данных или их копии (события/сообщения/данные сигналов) актуальной на момент события. Распределенная модель может подразумевать доступ к распределенным данным, актуальным на момент обращения к ним, а не на момент события.
Модульность - следствие личного опыта и требований к легкости дальнейшей модификации и сопровождения ПО.

Самый простой и быстрый вариант (с нуля) - синхронная событийная модель, которая в зависимости от необходимой модульности (возможной "вязкости" кода) может быть сведена:
- к явным вызовам API одного компонента из другого (подавляющее число реализаций, плохо сопровождаемый код),
- к модели наблюдателя (подписка на события, уже лучше),
- к модели сигнал-слот boost, Qt (взаимосвязь независимых модулей, еще лучше),
- к чему-те еще

Все варианты правильные, выбор зависит от разработчика (его опыта) и решаемой задачи.

Если задача комплексная (например, загрузка файлов мешает отображению GUI и/или наоборот), то необходимо уже смотреть в сторону асинхронной модели поведения

- асинхронный сигнал слот
- модель актеров
- активные объекты
- что-то еще

выбор за Вами ...
532  Qt / Вопросы новичков / Re: Ошибки компиляции : Апрель 06, 2016, 17:08
Так линковки с библиотеками apache http://thrift.apache.org/lib/cpp

Цитировать
Thrift is divided into two libraries.
libthrift - The core Thrift library contains all the core Thrift code. It requires boost shared pointers, pthreads, and librt.
libthriftnb - This library contains the Thrift nonblocking server, which uses libevent. To link this library you will also need to link libevent.
533  Qt / Установка, сборка, отладка, тестирование / Re: Разное поведение программы при отладке и запуске в обычном режиме : Март 26, 2016, 20:59
Или забыл про-инициализить значение.
Это наиболее вероятный вариант. В отладке часто не проинициализированные значения инициализированы нулями для нужд самого отладчика, в релизе нет - в переменных то, что в памяти осталось.
534  Qt / Общие вопросы / Re: Добавление своего класса в библиотеку Qt : Март 25, 2016, 09:01
Здесь необходимо либо править непосредственно исходники Qt, либо все писать самому, либо вытаскивать код из Qt, объявив его в другом пространстве имен, чтобы не было конфликтов при линковке.
535  Qt / OpenGL / Re: Манипуляция с точками : Март 11, 2016, 07:53
Всем доброго времени суток!
Подскажите пожалуйста, как можно реализовать следующую задачу при помощи opengl.
Пользователем рисуется ломаная линия (данный этап не интересует), а после у него есть возможность перемещать узлы (точки перелома) линии (другими словами, производить манипуляцию с точками, уже существующего примитива). 


Если вы не хотите писать свой графический движок с обработкой интерактивных событий с помощью OpenGL (это задача и связана с конкретной моделью данных отображаемой сцены), то лучше воспользоваться готовым решением, например, QGraphicsScene.
536  Qt / Установка, сборка, отладка, тестирование / Re: Приспичило собрать приложение под Win7 64 бита... : Март 03, 2016, 08:19
Для этого надо Qt 4.7.0 в 64 бита под этой виндой собрать. MinGW32 не умеет, выяснил это из разных форумов. Вроде есть MinGW-w64, но не ясно, соберётся ли им эта версия Qt, и вообще можно ли получить желаемое. Много чего обсуждают, у кого-то какие-то проблемы появляются, и ни разу не нашёл сообщения, что всё получилось. С Qt 4.х вообще не встречал, все сборки в 64 бита делают c Qt 5.x.
В общем, вопрос - кто делал подобное с Qt 4.7?

Я собирал проект Qt 4.7.4 с помощью mingw-w64 https://sourceforge.net/projects/mingw-w64/ версия x86_64-5.3.0-posix-seh-rt_v4-rev0
Есть небольшие особенности).

Мои ремарки по сборке 64 бит. Пришлось отключить tiff и поправить исходники.

Код:
configure.exe -opengl desktop -fast -nomake demos -nomake examples -no-libtiff -mp

Изменения в исходных кодах

./src/corelib/tools/qsimd.cpp

поменять в строке 288

Код
C++ (Qt)
#if defined(Q_CC_GNU)
   quint64 tmp;
   asm ("xchg %%rbx, %1\n"
        "cpuid\n"
        "xchg %%rbx, %1\n"
       : "=c" (feature_result), "=&r" (tmp)
       : "a" (1)
       : "%edx"
       );
#elif defined (Q_OS_WIN64)
   {
      int info[4];
      __cpuid(info, 1);
      feature_result = info[2];
   }
#endif
 

вместо

Код
C++ (Qt)
#if defined (Q_OS_WIN64)
   {
      int info[4];
      __cpuid(info, 1);
      feature_result = info[2];
   }
#elif defined(Q_CC_GNU)
   quint64 tmp;
   asm ("xchg %%rbx, %1\n"
        "cpuid\n"
        "xchg %%rbx, %1\n"
       : "=c" (feature_result), "=&r" (tmp)
       : "a" (1)
       : "%edx"
       );
#endif
 

Весь проект собирается.

Надо отметить, что QtCreator 32 bit не дружит с qmake 64 bit, его также необходимо пересобрать в 64 битной версии, или пользоваться командной строкой.
537  Qt / Пользовательский интерфейс (GUI) / Re: Отслеживание передвижений на сцене. : Март 02, 2016, 08:08
Можно сделать, например, так

Код
C++ (Qt)
void MyView::mouseMoveEvent(QMouseEvent* event) {
   QGraphicsView::mouseMoveEvent(event);
   // уже обработано
   if ( event->isAccepted() )
       return;
 
   if( event->buttons() & Qt::LeftButton )
   {
       addOffset( event->pos() - previousPoint );
       updateTransform( scale(), offset() );
   }
   previousPoint = event->pos();
}
 

А в обработчике событий item помечать событие event->accept();
538  Qt / Общие вопросы / Re: Надежное чтение : Февраль 29, 2016, 21:00
И что, по каждому тегу считать CRC? Не выглядит реально, слишком обременяет и чтение и запись.
Если требуется гарантия, то только так. И ни так уж это обременительно, как кажется. А если пользоваться, например, TCP/IP, то это гарантирует сам протокол.

А что он (протокол) сделать может? Ну проверить заголовок и (иногда) сбивается ли длина? Что еще?
Обычно этого в подавляющем большинстве случаев достаточно. Либо используют что-то типа xml.
539  Qt / Общие вопросы / Re: Надежное чтение : Февраль 29, 2016, 13:24
Если рассматривать сам метод бинарной десериализации, то никаких защит в нем не должно быть - этим должен заниматься протокол обмена.

Проверять необходимо пакет данных, который может представлять собой файл, пакет TCP|UDP и др. Анализирует содержимое пакета соответствующий парсер.
Для этого пакет должен иметь внутри встроенный механизм определения корректности/целостности данных. К ним относятся различные виды контрольных сумм, магические числа (для определения, например, формата данных) и любая другая информация.

Таким образом, читаем файл целиком, как один пакет, например, QByteArray. Анализируем содержимое. Если что-то нас не устраивает -> сообщение об ошибке. Если все ок -> десериализуем данные.
Если файл большой и не влезает в QByteArray, то желательно организовать его в виде набора пакетов. В общем случае файла произвольного формата задача не решается, должна быть возможность чтения в виде небольших блоков/порций, которые можно анализировать.
540  Qt / Qt Embedded / Re: Запуск нескольких команд с помощью QProcess : Февраль 22, 2016, 20:34
Можно любую программу запустить на исполнение, поместив ее в файл скрипта или в виде текста содержимого скрипта, но... как уже писали программно нельзя ввести пароль.
Можно использовать доступ через sudo или ssh, однако в любом случае заранее необходимо будет зарегистрировать доступ к su.

А так правильный способ -
- использовать Android API.
Страниц: 1 ... 34 35 [36] 37 38 39

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