10651
|
Qt / Общие вопросы / Re: Вопрос о сравнении вхождений QStringList'ов
|
: Февраль 16, 2010, 10:29
|
tokens.sort(); // обязательно сортируем А кто Вам разрешил менять порядок слов в списке? Извольте повоэиться с указателями, посмотрим как вырастет объемчик. кстати, забыли упомянуть о "независимости" от сторонних библиотек, соответствии стандарту программирования, и 100% переносимости кода.
Да, об этом мне лучше промолчать, потому что каждый раз когда я перетаскиваю сделанное c Mac на Вындоуз MSVC - я с ужасом думаю какую еще подлянку мне подсунет мелкософт и сколько дней (или недель) уйдет на то чтобы весь STL работал в Debug и Release естественно! как писать идеальный код на С++ не зная STL и стандарта С++.
Никто и не говорил что не нужно знать стандарт. Вот только мне кажется что лучше не тот программист, который больше знает, а который умеет искать и находить решения.
|
|
|
10652
|
Qt / Общие вопросы / Re: Вопрос о сравнении вхождений QStringList'ов
|
: Февраль 15, 2010, 16:51
|
А есть ли какие-то отличия в работе этих трех вариантов кода? Если да, то какие и где?)
Лучше спросить о достоинствах каждого варианта, тогда 1) Краткость/лаконичность 2) Демонстрация богатых возможностей библиотеки (и своей эрудиции) 3) Скорость
|
|
|
10653
|
Qt / Общие вопросы / Re: Как можно приостановить процесс ?
|
: Февраль 15, 2010, 07:21
|
Завершать не надо, надо приостановить, чтобы потом можно было продолжить с прерванного места
Процесс имеет хотя бы 1 нитку (thread), как ее остановить? Или даже: как процесс может остановить одну из своих же ниток? Да никак, можно только послать событие, выставить флаг и.т.п. полагая что код, выполняющийся в нитке, это "поймет" и перейдет напр. в ожидание на семафоре. Но если нитка этого не делает - заставить ее нечем. То же и с процессом.
|
|
|
10654
|
Qt / Установка, сборка, отладка, тестирование / Re: Не получается побороть debug в Eclipse
|
: Февраль 15, 2010, 07:05
|
типа никто не работает под дебагом в эклипсе?
Мне пришлось, для перевода 2 проектов на Линукс - а судя ао Вашим скриншотам там Вындоузю так что единственное что могу посоветовать - проверьте версию runtime java. Я огреб по полной (и с дебаггером тоже) пока не догадался подсунуть ему "хорошую жабу". Проблема описана в середине большого readme (типа known problems).
|
|
|
10655
|
Qt / Общие вопросы / Re: Реализация QList
|
: Февраль 15, 2010, 06:45
|
Небольшое добавление к сказанному BRE
Вставка указателя в массив (с помощью memmove, как делает QList), вообще говоря, не есть "very fast insertion". Но это НАМНОГО быстрее вставки в QVector который memmove использовать не может, а должен вызывать конструктор копирования для всех последующих элементов начиная со вставляемого. Эта деталь часто бывает важной.
|
|
|
10656
|
Qt / Общие вопросы / Re: Вопрос о сравнении вхождений QStringList'ов
|
: Февраль 15, 2010, 06:07
|
На контейнерах можно так void RemoveStopsFromLst( QStringList & lst, const QStringList & stopLst ) { // QSet для быстрого поиска QSet <QString> stop = stopLst.toSet();
// выходной лист чтобы не связываться с мутными удалениями из контейнера QStringList dst;
// отбираем for (int i = 0; i < lst.size(); ++i) if (!stop.contains(lst[ i ]) dst.push_back(lst[ i ]);
// переписываем lst = dst; }
|
|
|
10658
|
Qt / Общие вопросы / Re: Главный поток умирает по непонятной причине.
|
: Февраль 15, 2010, 04:50
|
реализация QEventLoop считаю вообще здесь ни к чему.
Да вот как раз "к чему" Слот/сигнал между нитками выполняется только через eventLoop. И QDirectConnection тоже. Примерно таким образом: - посылающий в др. нитку никак не может ее "остановить", поэтому он посылает событие в очередь этой нитки. Если QDirectConnection установлен, то посылающий ждет на семафоре пока событие будет обработано. Когда это случится - зависит от нитки-приемника, если она игнорирует свой eventLoop - то никогда. С точки зрения посылающего все правильно, QDirectConnection есть синхронный способ: послал - получил ответ - продолжил выполнение. Так что все eventLoop должны быть запущены
|
|
|
10659
|
Программирование / С/C++ / Re: static переменные в inline методах
|
: Февраль 15, 2010, 04:34
|
inline static int idxMyProperty() { static int i = s_MetaTable.propByName("MyProperty"); return i; }
Может не очень удачный пример - static здесь никак не роялит. Если уж проверять, то: inline static int idxMyProperty() { static int i = -1; // начальное (недопустимое) значение if (i < 0) i = s_MetaTable.propByName("MyProperty"); return i; }
По идее должны иметь один i на все вызовы (и внешние тоже), inline есть личное дело компилятора, ф-циональность та же. Да и вообще неизвестно будет ли он делать это inline'ом
|
|
|
10660
|
Qt / Model-View (MV) / Re: Помогите организовать мигание иконки внутри делегата
|
: Февраль 09, 2010, 20:45
|
Пацаны, мне кажется "слишком много теоретизируем" Более практично склепать вариант (их уже предложено не один) а потом "по жизни" смотреть где и что жмет, что плохо. Если этот класс постоянно/навязчиво требует внимания - надо перепланировать (ничего смертельного здесь нет). А если делает все что надо - так нечего время терять, др. работы полно
|
|
|
10661
|
Qt / Model-View (MV) / Re: Помогите организовать мигание иконки внутри делегата
|
: Февраль 09, 2010, 17:43
|
Потому что представление каждую секунду принудительно перерисовывается. Этот способ я уже описывал.
В этом варианте мигающие элементы придется хранить и во view(очень плохо). Или по сигналу таймера вызывать repaint().
Как же Вы собираетесь организовать мигание без принудительной перерисовки с интервалом мигания ? И зачем хранить "и во view(очень плохо)"? Чем так уж плохо хранить в модели? Ладно, почему-то не хотите, так есть масса разумных вариантов, напр. - мне здесь нравится множественное наследование class MyDataModel : public QAbstractItemModel, public Blinker {
И если надо через dynamic_cast узнаем, может ли таблица мигать. - также сделать Blinker отдельным классом и модель имеет указатель на него (членство вместо наследования) - ладно, если уж хочется "общности/универсальности" - делаем вызов какого-то virtual'a в методе модели data() и.т.д. и.т.п. А вообще "проблема мигания" на мой взгляд не заслуживает обсуждения, сигнал таймера можно получить где угодно. Реально-то обсуждается "как покрасить ячейку" - и здесь ходов раз-два и обчелся. Перекрыть paint (полностью) конечно можно, но это "brute force". Так что ото приспосабливайте модель - и дело с концом.
|
|
|
10662
|
Qt / Model-View (MV) / Re: Помогите организовать мигание иконки внутри делегата
|
: Февраль 09, 2010, 01:11
|
C++ (Qt) void CBtn_Delegate::paint( QPainter * painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const { QWidget * w = dynamic_cast<QWidget *>( painter->device() ); if ( w ) { QStylePainter p( w ); QStyleOptionButton opt; opt.icon = QIcon( m_sIconPath );
... Все это легко делается ... [/quote]Не вызывает сомнений что Вы владеете Qt, и для Вас это действительно легко. Но чего это надо перекрывать paint (т.е. брать на себя рисование) только для того чтобы изменить background? Чем плохо просто дополнить модель? У модели все на руках, все данные она знает, ну и пусть занимается также и цветом фона - зачем это совать в делегат который так себе "прослойка интеллигенция"?
|
|
|
10663
|
Программирование / С/C++ / Re: Multiply character constant
|
: Февраль 08, 2010, 16:58
|
В первом варианте неудобно писать много кавычек/запятых. Со вторым к сожалению я не смогу написать так switch (ID) { case TAG("TAG1"): ... break; }
Но все равно, спасибо за поддержку
|
|
|
10664
|
Qt / Model-View (MV) / Re: Помогите организовать мигание иконки внутри делегата
|
: Февраль 08, 2010, 15:35
|
Что значит выбранная ячейка? Откуда вью знает, какие ячейки должны мигать? Что значит передать ячейке? Ячейка - это QModelIndex.
Data model всегда есть. Нарастите этот класс чтобы он умел давать разные цвета ячейкам, напр. class MyDataModel : public QAbstractItemModel { .... virtual void data( ..); // добавить выдачу для Qt::BackgroundRole ...
void NextBlink( void ) { mBlinkState = (mBlinkState + 1) % 2; }
QVector <QModelIndex> mBlinkCell; // массив мигающих ячеек int mBlinkState: // напр. 0 = синий, 1 = красный и.т.п. };
По таймеру таблица говорит модели NextBlink и вызывает перерисовку нужных ячеек. Правда, судя по исходникам, background (возвращаемый data) будет игнорироваться для выделенных ячеек если showDecorationSelected = true в стиле. Но оно public, так что можно напр. перекрыть paint для делегата. Короче, раскрасить ячейку можно
|
|
|
10665
|
Программирование / С/C++ / Multiply character constant
|
: Февраль 07, 2010, 22:57
|
Добрый день Столкнулся с небольшой но противной проблемкой. Имею массу таких мест unsigned long theID = 'TAG1';
Все нормально, буквы переводятся в байты, все работает. Но вот компиляторы сыпят warning'и. Мол, нехорошо так делать и все такое. Оно конечно не смертельно, но неприятно, можно и существенный warning просмотреть в куче. Могу отключить через pragma. Но приходится шпилить на 3 компиляторах, одному отключаю - другие не понимают и наоборот. Делать эту конструкцию в hex (типа 0x45464748) - ну так я не пойму где какой ID. Как бы мне это порешать? Спасибо
|
|
|
|
|