Russian Qt Forum
Июля 06, 2025, 00:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 35 36 [37] 38 39
541  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 битной версии, или пользоваться командной строкой.
542  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();
543  Qt / Общие вопросы / Re: Надежное чтение : Февраля 29, 2016, 21:00
И что, по каждому тегу считать CRC? Не выглядит реально, слишком обременяет и чтение и запись.
Если требуется гарантия, то только так. И ни так уж это обременительно, как кажется. А если пользоваться, например, TCP/IP, то это гарантирует сам протокол.

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

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

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

А так правильный способ -
- использовать Android API.
546  Qt / Вопросы новичков / Re: Qthread : Февраля 16, 2016, 12:39
Такой подход может быть и правильным, все зависит от контекста самой задачи.
Сигнал/слот механизм не обязательный к применению, а лишь один из многих способов организации программы.
Если все работает как задумывалось, то программный код достаточный для решения Вашей задачи.
547  Qt / Qt-инструментарий / Re: автоматическое добавление инклудов в QtCreator : Февраля 01, 2016, 18:06
Если класс из Qt, то после ввода имени класса можно нажать Alt+Enter.

Кое-где работает. Еще бы свои включения искала).
Вообще давно ищу инструмент, который бы мог проанализировать все #include в проекте на предмет лишних/недостающих/циклических включений.
Может знает кто?
548  Qt / Вопросы новичков / Re: библиотеки dll : Января 26, 2016, 11:18
Если они собраны одним компилятором (в одной среде Visual Studio), то почему бы и нет.
549  Qt / Базы данных / Re: Qt 5.4.2 + Oracle 10g : Января 26, 2016, 08:05
Подключения к БД oracle можно выполнить двумя способами.

По SID

Код
C++ (Qt)
QSqlDatabase database = QSqlDatabase::addDatabase( "QOCI", "SchemeName" );
 
database.setDatabaseName( sid );
database.setHostName( host );
database.setPort( port );
database.setUserName( user );
database.setPassword( password );
 

По Service name (текст в методе setDatabaseName не должен содержать пробелов)

Код
C++ (Qt)
QSqlDatabase database = QSqlDatabase::addDatabase( "QOCI", connection_name );
 
database.setDatabaseName(
   QString::fromUtf8( "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%1)(PORT=%2))(CONNECT_DATA=(SERVICE_NAME=%3)))" )
       .arg( host )
       .arg( port )
       .arg( name );
database.setHostName( QString() );
database.setPort( int()  );
database.setUserName( user );
database.setPassword( password );
 

И вроде как, connection_name не должно быть пустым.
550  Программирование / Общий / Re: Сценарий действия сил : Января 23, 2016, 21:26
После компиляции он будет захардкорен.
А скрипт можно будет менять без перекомпиляции программы.

После компиляции программы? Нет.
Предлагается ведь не программу реализовать с помощью конечных автоматов, а пользователю дать возможность формировать схемы поведения в виде графа состояний и переходов.
Когда пользователь сформирует схему или скрипт, команда Run запустит интерпретатор, который в runtime сформирует конечный автомат или любую другую модель поведения. Никакого хардкода.
551  Программирование / Общий / Re: Сценарий действия сил : Января 23, 2016, 20:53
По сути stateMachine это захардкоренный скрипт.

Не согласен с таким утверждением.

Скрипт - это всего лишь сценарий работы, который необходимо интерпретировать. StateMachine - это одна из возможных моделей поведения, реализующая сценарий.

В качестве интерпретатора может выступать любая модель - последовательное исполнение команд, конечные автоматы, событийная модель, динамический сигнал-слот, клиент-сервер взаимодействие, активные объекты, модель актеров и т.п. Может даже использоваться также произвольное их сочетание. Какую конкретно модель выбрать зависит от условий решаемой задачи и/или предпочтений разработчика.

Здесь конечный автомат не захардкоден, так как предполагается, что его схема динамически редактируется пользователем.
Схема может быть представлена в виде скрипта, скрипт в виде схемы. Можно реализовать и то и другое, они взаимозаменяемы. Но для того и другого необходим интерпретатор - среда, в которой они должны функционировать.
552  Qt / Вопросы новичков / Re: константная ссылка в foreach : Января 22, 2016, 12:04
Если вы используете такой вариант

Код
C++ (Qt)
void ( const QList< int > & values )
{
   ...
   foreach ( const int & value, values )
   {
       const_cast< int & >( value ) = 1;
   }
   ...
}
 

то values не вызывает проверку того, что он shared. Данные будут изменены в обобщенном списке.

Для выполнения detach() необходимо вызвать любой не константный метод values.

И ... "implicit shared" сильно на производительности сказывается, так как не выполняются лишние копирования данных списка.
553  Qt / Вопросы новичков / Re: константная ссылка в foreach : Января 22, 2016, 08:37
Реализация foreach в Qt несколько криворукая и имеет описанные ограничения, часто уступает в производительности простому for через итераторы или индексы.
Вот в boost реализация оказалась отличной и без описанных ограничений. Но не тащить же еще и boost  Смеющийся

Такое кастование - это зло, которое нужно срочно искоренить из проекта!
К слову из-за того, что реализация QList implicit shared, таким кодом вы корректируете все взаимосвязанные с данным списком данные.

Если есть необходимость изменения данных в массиве QList, то необходимо использовать либо индексы, либо итераторы, либо C11, либо еще что-то, но никогда кастование!
554  Программирование / Общий / Re: Сценарий действия сил : Января 21, 2016, 11:23
_Bers имеет ввиду, что можно реализовать скриптовый язык или формат, а потом сформировать под него интерфейс для пользователя. Создание скрипта будет происходить автоматически путем нажатия пользователем на кнопки и вызова соответствующих диалогов ввода параметров. В итоге будет сформирован сценарий.

Для сценария необходим парсить, который нужно будет писать. Можно, конечно, взять готовый формат, например svg со всеми его достоинствами и недостатками.
Наглядность сценария для пользователя в виде текста практически нулевая, поэтому нужно графическое представление (которое, скорее всего, все равно сведется к графу).

Здесь нужно оценить целесообразность затраченных усилий с учетом дальнейшего развития и сопровождения.
555  Программирование / С/C++ / Re: reinterpret_cast класса в массив : Января 19, 2016, 17:14
Да, можно.

Структура Vertex, например, плотно пакуется, поэтому можно использовать

Код
C++ (Qt)
struct Vertex
{
  float x;
  float y;
  float z;
}
 
Q_STATIC_ASSERT( sizeof( Vertex ) == 3 * sizeof( floet ) );
 
QVector< Vertex > vertices;
QOpenGLBuffer buffer;
 
...
 
buffer.write( offset, vertices.constData(), 3 * vertices.count() );
 

Все же нужно гарантировать размер, поэтому используем Q_STATIC_ASSERT
Страниц: 1 ... 35 36 [37] 38 39

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