Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
28.2.2010, 22:53 | Всплывающие окна | Не вызывай show() в main.cpp. Твой hide() выполняется в конструкторе, еще до того как ты вызовешь show() или a.exec(). |
breeve, | ||
28.2.2010, 22:44 | Всплывающие окна | breeve, | |||
28.2.2010, 21:23 | Всплывающие окна | Как-то слишком просто. Может это решение только для отношения QWidget->QWidget, а окошки операционной системы оно не затрагивает? Просто когда сам искал нашел лишь 2 решения: - делать дырку через setMask под курсором мыши размером 1x1 - рисовать на контекст рабочего стола напрямую средствами ОС Первый вариант плох тем, что нижнему окну постоянно приходят события Hover, LeaveHover и оно себя забавно ведет при таком раскладе, если пытается какой нибудь виджет подсвечивать. А второй вариант плох тем, что изображение быстро затирается при обновлении рабочего стола, поэтому нужно постоянно перерисовывать. И вроде как это приводит к морганию картинки (flickering). --- Всё, я понял, не внимательно прочитал первый пост SASA. У него 2 Qt'шных виджета. Тут ничего общего с окнами, которые пытаются делать люди на WINAPI. |
breeve, | ||
27.2.2010, 2:56 | [РЕШЕНО] Работа с функцией seek | Будем считать, что априори это так и надо. Отрицательное значение для Windows функции это перемещение в обратную сторону. Как это связано с вопросом перемещением указателя в конец файла я не понял. Разница между QIODevice::seek() и SetFilePointer в том, что первый берет абсолютное смещение в файле, а второй берет относительное смещение от текущей позиции. Конец файла для seek() это seek(size()), а для SetFilePointer это offset+(currentFileSize-offset): Пример. Размер файла 10 байт. Текущая позиция 5. currentFileSize = 10 offset = 5 Переменная которая передается в SetFilePointer = 5+(10-5) // 10 ... 0+(10-0) = 10 10+(10-10) = 10 Теперь нам надо реализовать тот же функционал перемещения указателя в любую сторону исходя из текущего положения указателя (offset) и переданного смещения (shift). Возьмем всё тот же пример, 5 текущая позиция, 10 размер файла. -5+0 = -5 перемещаемся на 5 байт назад -5+1 = -4 на 4 байта назад -5+2 = -3 -5+3 = -2 -5+4 = -1 -5+5 = 0 стоим на месте -5+6 = 1 вперед на 1 байт (хрен знает что за логика такая, то туда то сюда)
|
AD, | ||
26.2.2010, 23:02 | Кодировки, кодировки... | Наткнулся на такую библиотеку определения кодировки. Написана на Си, алгоритм содран с детектора Мозиллы, лицензия LGPL. |
Rocky, | ||
26.2.2010, 21:30 | Кодировки, кодировки... | не позволяет определить автоматически кодировку Qt умеет определять только UTF16/32 по BOM'у. Так что на него не полагайся. Твоя задача сводится к реализации своего варианта программы "Штирлиц", но даже она ошибается. Поэтому проси пользователя, чтобы жестко задавал исходную и желаемую кодировки, если автоматически определить не удалось. Думаю в интернете должны быть статьи как по частотному анализу букв определить кодировку файла. В разных языках частота встречаемости тоже разная Может быть даже готовые библиотеки есть какие-нибудь. Простой алгоритм заключает в том, чтобы последовательно предполагать кодировки файлов и пытаться конвертировать другую, затем подсчитывать встречаемость букв. Но этот алгоритм будет работать только на более менее больших файлах, где русский и английский текст не миксуются 50/50. |
Rocky, | ||
26.2.2010, 18:14 | [РЕШЕНО] Работа с функцией seek |
В прошлой версии ты ограничился 32 битным смещением и соответственно максимальным размером файла в 4Гб. Может лучше qint64 поставить?
Предположим, что -offset = -20, а shift = 19, тогда смещение будет -1. Я выше писал, что отрицательные значения передавать нельзя. |
AD, | ||
26.2.2010, 1:12 | Где в Qt Creator Resource Browser? | Я до конца не понял о чем речь. Уточни что имеется ввиду Редактор Ресурсов или некий Браузер Ресурсов? Файл ресурсов редактируется точно также как и .cpp файл по двойному щелчку. Возможности перетаскивать мышкой картинки из ресурсов на виджет я никогда не видел ни в Designer'e ни в QtCreator'e, ни в интеграторе для Eclipse. И я так думаю, что такой возможности никогда не будет, т.к. есть много разных способов заставить виджет отображать картинку и стандартный это добавить на виджет QLabel и в свойствах объекта точно также как и с windowIncon выбрать файл из ресурсов. |
l0ki, | ||
23.2.2010, 20:05 | проблема с дебагером | Если ты про это
То я думаю, что вместо жестко заданных путей здесь должны быть переменные окружения или пути должны быть относительными, если исходники библиотеки qextserialport будет распространяться с твоей программой. А QMAKE_LIBDIR вообще можно опустить:
Вообще многое зависит от того на каких ОС будет собираться программа и какой компилятор будет использоваться. |
neyro, | ||
23.2.2010, 19:52 | проблема с дебагером | Секция INSTALLS Пример из QtCreator'a
Потом make install и запускаешь уже оттуда. |
neyro, | ||
23.2.2010, 19:00 | проблема с дебагером | Скачай программу depends (Dependency Walker), открой ей свою программу и запусти профайлинг (F7) Ошибка -1073741515 - C0000135 - 135 - STATUS_DLL_NOT_FOUND Полагаю библиотека QExtSerialPort собрана динамически. Значит должна быть какая-нибудь QExtSerialPortd.dll, которую почему-то не поместили в одну и ту же папку где и ComTool.exe gdb пытается загрузить программу, но операционка ему показывает кукиш, так как программа требует .dll, а раз нет загруженной программы (process), то gdb ругается: Цитата You can't do that without a process to debug |
neyro, | ||
23.2.2010, 16:36 | Секреты и интересные возможности Qt | Кроссплатформенный метод установки приоритета для приложени. Навеяно этим постом. Вариант 1.
Вариант 2. Установка приоритета после входа в цикл событий.
Вариант 3. Более легковесный вариант установки приоритета после входа в цикл событий, если вместо класса Object будет какой-нибудь MainWindow.
Для Windows стоит разделять понятия "класс приоритета приложения" и "приоритет потока". Все приложения изначально получают класс приоритета NORMAL_PRIORITY_CLASS и приоритет потока THREAD_PRIORITY_NORMAL. Предположим, что мы вызываем метод QThread::setPriority(QThread::TimeCriticalPriority), чтобы выделить самый высокий приоритет. К нашему удивлению в том же TaskManager'e приоритет будет стоять "Средний". Но в Windows количество возможных приоритетов аж 31 штука. Самый высокий достигается комбинацией установки класса REALTIME_PRIORITY_CLASS и приоритета THREAD_PRIORITY_TIME_CRITICAL. В Qt нет возможности установки класса приоритета, поэтому решением может быть вызов WINAPI ::SetPriorityClass(::GetCurrentProcess(), HIGH_PRIORITY_CLASS);, или установка класса через TaskManager, или установка класса приоритета в момент запуска приложения:
Установка приоритета приложения для linux может не работать в некоторых ситуациях о чем сказано в документации к метод QThread::setPriority(). |
Litkevich Yuriy, | ||
23.2.2010, 0:47 | проблема с дебагером | В QtCreator'e указал путь к gdb? Возможно старая версия gdb. Если нет времени разбираться с отладчиком в QtCreator'e используй gdb в консоли. http://sourceware.org/gdb/current/onlinedocs/gdb.html
|
neyro, | ||
23.2.2010, 0:19 | QListView | Привет All столкнулся с проблемой, необходимо список отображать как в файловых менеджерах т.е. что бы прокрутка была не вниз а вбок... кто что может подсказать Такого поведения я не видел ни в одном файловом менеджере каким удавалось пользоваться: - Norton Commander - Dos Navigator - Far Manager - Midnight Commander - Volkov Commander - Проводник - Konqueror - Nautilus - Dolphin - Total Commander - WinCommander т.ч. ты чего-то напридумывал... |
cat386, | ||
22.2.2010, 1:12 | Опять. Проблема с компиляцией Qt4.6.2 | странная шутка вышла, удалил сорцы и снова распаковал - начал конфигурировать через cmd(ранее MSYS) и все пошло.чудо. ==== Забыл спросить, для распаралеливания билда через mingw32-make какую опцию надо использовать? Тролли поломали сборку в MSYS еще несколько версий назад, после этого я не пробовал собирать. mingw32-make невозможно распараллелить, только make от MSYS. |
Andrewshkovskii, | ||
16.2.2010, 10:27 | Qt eLearning | В одном из видео увидел название книги "Introduction to Design Patterns in C++ with Qt4". Оказывается она бесплатная и иногда обновляется, дополняется. Её домашняя страничка http://oop.mcs.suffolk.edu В первую очередь для меня она представляет такие интересные темы как использование паттернов с Qt и UML диаграммы. |
AD, arial, Litkevich Yuriy, Vass, | ||
26.1.2010, 14:13 | выравнивиние изображения в QTextEdit | setHtml(), а в коде уже используй css. Если нужно менять стиль, то предыдущий блок полностью затираешь и вставляешь новый - измененный. |
pussbb, | ||
17.1.2010, 11:05 | QWheelEvent - прокрутка в обе стороны | warlock, | |||
14.1.2010, 23:57 | компиляция плагина и приложиния при помощи одного pro файла | Скомпилировать можно. Однако зависимости (depends) работать не будут, поэтому плагин можно поставить в начало очереди:
В данном случае на subdirs можно не обращать внимания, все 3 .pro файла находятся в одной директории. К сожалению это не отвечает на вопрос о компиляции нескольких проектов одним .pro файлом. |
frg10, igor_bogomolov, | ||
27.12.2009, 19:49 | QtConcurrent нужен совет по использованию | Есть код брутфорса, который делает 4294967295 (int32) операций. По диспетчеру задач вижу, что используется только одно ядро процессора. Поэтому решил посмотреть на возможности класса QtConcurrent. В принципе задача следующая, распределить нагрузку на все ядра. 4294967295 / QThread::idealThreadCount(). Если брать конкретно ситуацию с двумя ядрами, то одно ядро должно перебирать (4294967295 / 2 = 2147483647,5) диапозон 0-2147483647, второе 2147483647-4294967295. Если один из потоков находит нужную последовательность, то я хочу иметь возможность вернуть результат и прервать все остальные потоки (сколько бы ядер не было). Также я планирую выводить QProgressDialog и если пользователь жмет "Cancel", то завершать все вычисления. Тут я планирую использовать QFutureWatcher::cancel(), однако тут тоже не понятно. Если внутри функции будет бесконечный или очень долгий цикл, сработает ли cancel()? Каша в голове из-за обилия методов передачи указателя на мою функции или метод класса. Для начала мне нужно передать некий список с задачами, причем в задаче должен быть не один параметр. Значит придется использовать QList<QPair <int, int> > для передачи диапозонов в метод вычисления. Методы типа QtConcurrent::run(), QtConcurrent::*Reduced(), QtConcurrent::*filtered() исключаются. Первый из-за невозможности прерывания, второй из-за того, что запускается только один поток, третий из-за удаления элементов из списка при возвращении true функцией (этот функционал мне не нужен). Значит остаются QtConcurrent::map и QtConcurrent::mapped(). Из-за скудного описания я не понимаю как они работают. Эти методы блокирующие или нет? Далее насчет прогресса. Я так понял метод типа QFutureWatcher::progressValue () может мне возвратить только 2 значения: 50% и 100%, т.к. ядра 2 и потоков тоже 2. Меня это не устраивает, мне нужен реальный ход прогресса, который бы вычислялся на основе текущих значений переменной i во всех потоках. Т.е. если один поток на стадии цикла 5 из диапозона 0-10, а второй поток на стадии выполнения 2 из диапозона 11-20, то 2+5=8 - общий ход выполнения. Таким образом мне нужен механизм для влияния на QProgressDialog. Отсюда всплывают сигналы и слоты. Значит мои потоки должны уметь испускать сигналы. Стало быть список для QtConcurrent::map должен быть какой-то такой QList<QObject *>, а раз ядра 2, то и объектов в списке будет 2. Придется завести сигнал типа step(), который подключить к QProgressDialog, таким образом шквал этих сигналов от разных потоков заставит полосочку бежать вперед. Затем нужно будет завести сигнал типа finish(), чтобы мои объекты могли останавливать ход просчета на середине, если один из потоков нашел искомую комбинацию. И эту комбинацию (результат) еще надо будет как-то вернуть обратно в основной поток. В общем всё довольно сложно, может будут какие-то идеи? --- Похоже я начал вникать потихоньку. В QtCreator'e везде используется QtConcurrent::run(), причем внутри QObject'ов, в метод передается указатель this и ссылка на метод этого класса. И мне похоже надо будет создать каркас класса унаследовав QObject и создать количество экземпляров типа Task равное количеству процессоров, после чего в итерации запустить на каждом метод типа QtConcurrent::run(). --- Разработчики QtCreator'а злыдни. Используют не документированный класс QFutureInterface<> для установки прогресса и результата потока. А простые пользователи библиотеки значит должны голову ломать... |
azure, | ||
17.12.2009, 15:59 | Отображение rtf документов в QTextEdit | В Qt RTF это не документы с расширением .rtf. Т.ч. нельзя. |
XXL, | ||
14.12.2009, 23:24 | Выпущен Qt Declarative для Qt 4.6.0 | Метод установки для MinGW (в README о нем ничего): Распаковываем архив с исходниками QtDeclarative в любое место. Запускаем консоль с подготовленным окружением и затем заходим в папку с распакованными исходниками, находим файл declarative.pro и редактируем его в текстовом редакторе, добавляем в конец файла следующую строчку: Если этого не сделать, то не будут сгенерены .prl файлы и будет невозможным собрать утилиту qmlviewer или вообще любую другую программу, которая будет использовать QtDeclarative модуль.после чего заходим в подпапку src/declarative :
Формируем Makefile'ы:
Собираем: Вместо all можно собирать declarative 2 раза, по умолчанию он собирается в debug сборке, если указать mingw32-make release, то еще и в релизе.Устанавливаем QtDeclarative в исходники Qt.
Директивой install ставится только debug версия поэтому, чтобы установить еще и release версии .dll'ок надо скопировать следующие файлы вручную: qt-4.6.0-declarative\src\declarative\.obj\QtDeclarative4.dll -> qt-everywhere-opensource-src-4.6.0\bin\ qt-4.6.0-declarative\src\declarative\.obj\libQtDeclarative4.a -> qt-everywhere-opensource-src-4.6.0\lib\ qt-4.6.0-declarative\src\declarative\.obj\QtDeclarative.prl -> qt-everywhere-opensource-src-4.6.0\lib\ qt-4.6.0-declarative\src\declarative\.obj\QtDeclaratived.prl -> qt-everywhere-opensource-src-4.6.0\lib\ Затем копируем хедеры QtDeclarative в папку с исходниками Qt:
Собираем qmlviewer:
Далее возвращаемся на 2 директории назад, ищем папку bin и копируем утилиту: qt-4.6.0-declarative\bin\qmlviewer.exe -> qt-everywhere-opensource-src-4.6.0\bin\ Затем можно запустить утилиту, зайти, скажем, в папку qt-4.6.0-declarative/demos/declarative/calculator и выбрать calculator.qml. Лично я при выходе из утилиты qmlviewer получил краш. Затем попробуем собрать демку minehunt, в ней используется и C++ тоже:
Запускается, работает и даже не упала. К сожалению мне так и не удалось заставить работать QtDeclarative в связке с QtCreator'ом. А именно запускать на выполнение .qml проекты, всегда получаю:
Я не знаю какой процесс он пытается запустить и что ему для этого нужно. Вижу, что в исходниках QtDeclarative многое подготовлено для внедрения в Qt, вроде бы есть генератор документации, но это всего лишь .pri файл, который нигде не используется, вроде бы есть qml дебаггер как плагин к QtCreator'у. К сожалению, после мучений со сборкой у меня отпало всякое желание разбираться с QML до тех пор, пока его официально не внедрят в следующую версию Qt, пока он не начнет собираться без проблем наряду с другими модулями Qt. |
Litkevich Yuriy, | ||
12.12.2009, 23:08 | [РЕШЕНО] JPG Qt | Уже не первый раз обращаю внимание, что программа в которой есть рисунок не png, а например jpeg, на других компах не отображается, нужно обязательно ставить Qt.... Подскажите в чём дело ... Плагин таскать надо с программой qjpeg4.dll и поместить его в отдельную папочку рядом с .exe файлом: plugins\imageformats |
mycoding, | ||
12.12.2009, 23:04 | QTextEdit | Есть ли смысл написать в support ? Судя по тому, что я сегодня читал эта проблема была еще известна в 2005 году и даже в Qt3. Плюс в багтрекере уже есть подобные репорты. Но лучше написать еще раз, напомнить им о проблеме. Кстати это касается также и QTableWidget/QListWidget/QTreeWidget (*View классов тоже). И та же проблема с QPixmap, QImage (очень большую картинку хрен загрузишь, карту например). Т.е. в Qt мало чего сделали для того, чтобы интерфейс мог работать с большими объемами данных. С обычными контейнерами (QVector, QList) та же история, свои аллокаторы пишут к stl контейнерам.
Это вроде как вообще к борману мало относится, тут же чистый WinAPI. |
&-rey, | ||
12.12.2009, 9:36 | QWebView, проблемы идентификации | Если это часть какой-то защиты сервера, то просто замени JavaScript приходящий от сервака на свой код и отправляй другую строку. |
ufna, | ||
Текстовая версия | Сейчас: 25.4.2024, 14:01 |