10712
|
Qt / Общие вопросы / Re: Побитовое чтение файла
|
: Январь 06, 2010, 16:24
|
Я в общем-то не программер по профессии, но то, что операторы << и >> бывают для работы с битами, и бывают независимо для работы с I/O, я знаю давно И что байт - минимальная единица инфы - тоже. Просто сам смысл класса QBitArray состоит в том, что про это можно забыть Ну если Вы уже так много знаете - так это еще лучше Если (как я понял) Вы хотите представить число/значение более короткой комбинацией бит - то от QBitArray Вам не помощи никакой потому что он умеет работать только с 1 битом (как boolean).
|
|
|
10713
|
Qt / Общие вопросы / Re: Как средствами Qt узнать инфу о свободной памяти?
|
: Январь 06, 2010, 16:10
|
К сожалению тут ты можешь быть ответственен только за собственные вызовы new, а вот чего может навыделять Qt или ОС. Тут уже от падения может и не спасти.
Ах как хочется выдать "Учи матчасть !" Но не буду - непродуктивно. Операции new/delete могут быть перекрыты, если не ошибаюсь, с 1993 года. Легко проверить например так void * operator new( unsigned long size ) { return malloc(size); }
int main( int argc, char * argv[] ) { ... }
Поставьте breakpoint на malloc и Вы увидите в отладчике что управление приходит "из недр Qt"
|
|
|
10714
|
Qt / Общие вопросы / Re: Как средствами Qt узнать инфу о свободной памяти?
|
: Январь 06, 2010, 15:26
|
Перед работой с массивом нужно определить размер свободной оперативки.
Не вдаваясь в детали: на сегодняшний день такая задача/подход лишен смысла даже в 32-bits (не говоря уже о 64). Я делаю так: - отслеживаю сам сколько памяти распределено мною (свой менеджер кучи) - в преференсах позволяю пользователю задать количество используемой памяти. По умолчанию - 80% физической памяти - если предел превышен - swap на диск, если нет такой возможности - fatal error и выход Все это обходится весьма недешево. Поэтому если нет абсолютной необходимости - разумно ограничиться простой проверкой не вернет ли new NULL (обычно с испусканием exception). Сделать "быстренько" (используя готовый инструмент) здесь не получится.
|
|
|
10715
|
Qt / Общие вопросы / Re: Создать н-ое количество групп компонентов на форме
|
: Январь 04, 2010, 13:25
|
Надо создать Х groupBox-ов с графиками и надписями. Практически они будут одинаковыми кроме информации которую они будут содержать. Как правильно делать: функцию или структуру?
Если я правильно понимаю, то для таких вещей надо использовать структуры. Вот только хотелось бы узнать прав ли я.
Прав, структуру/класс. Управлять из ф-ции намного труднее, будет плодиться много if'ов и.т.п
|
|
|
10716
|
Qt / Общие вопросы / Re: Побитовое чтение файла
|
: Январь 02, 2010, 22:07
|
Блин, в теме уже почти десяток ответов, а прояснилось - ноль Да бывает у девушки муж помирает - а у вдовы живет Я принципиально не понимаю, о каком цикле речь. Если я хочу читать побитно, это не значит, что я буду читать биты в цикле, т.к. файл в любом случвае читается байтами. Здравый смысл и описание форматов для QDataStream подсказывает, что операция >> применяется к QBitArray единожды. При этом сначала считывается размер объекта QBitArray, а затем он сам, в соответствии с этим размером. Но либо мой здравый смысл не такой уж здравый, либо одно из двух...
Минимальная единица информации - байт, меньше нет. Др. дело что внутри байта Вы можете крутить битами как хотите, паковать и.т.п. Отталкивайтесь от этого, должно полегчать. Операции << и >> никакого отношения к битам не имеют, это просто перекрытые операторы I/O
|
|
|
10717
|
Qt / Общие вопросы / Re: Многоуровневая структуризация
|
: Январь 02, 2010, 21:59
|
еще, произвольный доступ по индексу для QList, std::list, имеет линейную сложность. в то время как у вектора она константна.
QList имеет очень мало общего std::list QList это просто массив указателей, поэтому доступ к элементу столь же быстр как и для QVector + одно разыменование. А в общем Qt молодцы - хороший контейнер сделали QList, там бы еще небольшие буги-вуги почистить - будем надеяться в 4.7
|
|
|
10718
|
Qt / Общие вопросы / Re: Кто работал с QBitArray? - поделитесь соображениями
|
: Январь 02, 2010, 21:01
|
Нет, в последнем вопросе я имел ввиду работу с байтами, без паковки. Тут просто предложили вариант Memory Mapped File, я с ним не знаком, но по названию догадываюсь, что это отображение файла в память, при этом наверняка изменения данных в памяти потом запишутся в файл. Я и поинтересовался - если мне не нужно сохранять эти изменения в файл, то какое преимущество дает Memory Mapping перед простой загрузкой данных в любой контейнер?
Memory Mapped File - это своя песня и к битовой паковке прямого отношения не имеет. А вот когда надо наладить обмен данными между 2-мя процессами - без Memory Mapped не обойтись. А насчет паковки я решил сделать оба варианта Будет проверяться кол-во свободной памяти. Если хватает - загрузим байтами, если маловато - то битами. Компромис разрешен Программист должен быть ленивым и никогда не делать 2 варианта
|
|
|
10719
|
Qt / Общие вопросы / Re: Многоуровневая структуризация
|
: Январь 02, 2010, 20:53
|
Igors, уточните, пожалуйста, где написано то, что QVector лучше испольовать для простейших структур, а QList - для "выше травы"?
Я это нигде не читал, просто наблюдаю как контейнеры работают. Например операции вставки/удаления. В контейнере 10 элементов. Вставляем на 5-е место. QVector вызовет 5 конструкторов копирования (для всего хвоста) так же как и std::vector. A QList спокойно переставит указатели на объекты - и готово. Пусть QList чуть больше тратит на элемент (+ sizeof(void *)) - это компенсируется удобством работы. В доке правильно написано что надо использовать QList если ничего особенного не имеется ввиду
|
|
|
10720
|
Qt / Общие вопросы / Re: Многоуровневая структуризация
|
: Январь 02, 2010, 19:58
|
по ходу написания своего проекта столкнулся с потребностью сохранять данные в структурированном виде. Количество элементов не известно заранее, и мало того, должно изменяться. Потому использовать буду какой-нибудь QVector<T> - подобный класс.
"Массив иассивов" никак не связан с множественным наследованием. QVector лучше использовать для простейших структур. Если же планируете держать в массиве что-то "выше травы" (хотя бы имеющее конструктор/деструктор) лучше использовать QList (пусть он потребляет чуть больше памяти)
|
|
|
10721
|
Qt / Общие вопросы / Re: Кто работал с QBitArray? - поделитесь соображениями
|
: Январь 02, 2010, 19:51
|
Я правильно понимаю, что если мне не нужно изменять содержимое файла, то memory mapping не даст преимущества перед простой загрузкой данных целиком из файла, например, в QList?
Ну это уж Вы сами смотрите по обстановке. "Паковка" дает хорошую экономию по памяти и незначительное увеличение вычислений. Другое дело с ней заботы - стандартный контейнер не попользовать, адрес от этого "3-битового чудика" не получить, надо работать по индексу и.т.п. Все это не смертельно и пережить можно, но, как правило, имеет смысл только если "есть что паковать".
|
|
|
10722
|
Qt / Пользовательский интерфейс (GUI) / Re: signal slot, widget->show()
|
: Декабрь 29, 2009, 22:14
|
...(const QString & message) <= reference to QString, not QString А это принципиально? Просто я собирался использовать QueuedConnection. Насколько я понял из руководства, слот будет обрабатываться последним в очереди, а в это время reference может быть уже не действительным. Можно повторить то же через postEvent (прикрепив данные к event), но думается с тем же результатом. Если у Вас есть show - значит есть и hide и надо смотреть его, возможно не сбивается show/hide
|
|
|
10723
|
Qt / Общие вопросы / Re: QProcess, убить сторонний процесс зная его краткое имя
|
: Декабрь 29, 2009, 21:11
|
В Линуксе так делать можно - закрывать сессию программы, при этом программа не имеет права возразить и что-то спросить у пользователя. Все сохранения текущих данных - на усмотрение программы. В Qt почитать про это можно в статье "Session Management". Вот только как отправить такое событие другой программе - не подскажу.
На Mac платформе: KillProcess() (с большой буквы, нативная ф-ция)- "цивилизованный" путь, процессу посылается событие quit. Если не понимает - через SIGKILL сигнал. Так делает Qt (terminateProcess/killProcess). Хотя не пойму откуда такое желание мочить всех направо и налево?
|
|
|
10725
|
Qt / Пользовательский интерфейс (GUI) / Re: signal slot, widget->show()
|
: Декабрь 29, 2009, 15:57
|
Сигнал эмитится из разных методов внутри paintEvent(), но иногда происходит следующее, PlainTextEdit промелькивает, т.е. появляется и исчезает. В какую сторону смотреть? Кто-нибудь сталкивался с подобным?
Не сталкивался, но по смыслу сигналы из paintEvent (если уж без них никак нельзя обойтись) должны помещаться в очередь (т.е. connect должен создаваться с QueuedConnection)
|
|
|
|
|