LINUX.ORG.RU

Сообщения pathfinder

 

qmake vs CMake vs qbs

Пишу некоторые программы на Qt в QtCreator. Пробовал все три системы сборки. Сейчас мне кажется, что с точки зрения удобства, qbs на голову выше всего остального. qmake малофункционален, а CMake страшен как чёрт.

Но это моя точка зрения. Хотел бы узнать аргументированное мнение других.

 ,

pathfinder
()

Лыжи не едут

Есть такой кусок кода

    gr1 = new QGraphicsItemGroup();
    scene.addItem(gr1);

    for(int i=-20;i<=20;i++)
    {
        QGraphicsLineItem* line1 = new QGraphicsLineItem(i*10.0,-200.0,i*10.0,200.0,gr1);
        QGraphicsLineItem* line2 = new QGraphicsLineItem(-200.0,i*10.0,200.0,i*10.0,gr1);

        QPointF oldp1 = line1->pos();
        QPointF oldp2 = line2->pos();
        int a=0;
    }

Ставлю breakpoint в точке int a=0, оно мне показывает координаты oldp1 и oldp2 как (0.0,0.0). При этом сетка отображается нормально. Такое ощущение, будто каждый элемент существует в своей системе координат, а не в системе координат предка. Моя нипанимать. :(

 ,

pathfinder
()

Qt Model/View проблема с битыми индексами

У меня реализована своя модель, унаследованная от QAbstractItemModel. В QModelIndex я храню не только row и column, но и указатель на объект, к которому относится этот индекс. Если объект удалить, то индекс будет содержать в себе ссылку на удаленный объект и я с этим ничего поделать не могу, так как индексы принадлежат не мне.

Проблема возникает вот в такой ситуации. Есть дерево вида:

A
B
+B1
+B2
+B3
Здесь B1,B2,B3 субэлементы B. В QTreeView выделен элемент B3.

Надо удалить B. Вызываем сначала beginRemoveRows(), потом delete для объекта B, потом endRemoveRows(). Деструктор объекта B уничтожает B1, B2, B3. Потом приложение падает в месте, где QTreeView пытается узнать у модели parent(const QModelIndex &child) для индекса B3. Естественно объекты B3 и B уже мертвы а их индексы должны быть битыми.

Как с этим бороться?

pathfinder
()

QtCreator c++11 анализатор

Пишу программу под оффтопик. Среда QtCreator 2.8.1, система сборки Qbs, какая-то там. В файле .qbs прописана опция компилятора "-std=c++11". Код использует возможности с++11. Все компилируется нормально. Но сама IDE не понимает с++11. Слышал, что там внутри используется CLang для анализа кода. Я точно знаю, что QtCreator 2.8.1 умеет работать с с++11. По крайней мере при использовании QMake среда все правильно понимает.

Вопрос:

Как настроить анализатор QtCreator 2.8.1 на режим с++11?

pathfinder
()

/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found

$ ./qt-linux-opensource-5.0.0-x86_64-offline.run
./qt-linux-opensource-5.0.0-x86_64-offline.run: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./qt-linux-opensource-5.0.0-x86_64-offline.run)

Не, ну сколько можно? Когда же это кончится? *плачет*

Надо собирать из сырцов? Или есть способ обойтись без задродства?

P.S. У меня стоит Debian 6.

 ,

pathfinder
()

Чем CMake лучше qmake?

Предположим мы хотим написать приложение средних размеров на Qt c использованием IDE QtCreator. Надо определиться с системой автоматизации сборки. Что лучше выбрать CMake или qmake?

pathfinder
()

Глупый вопрос про удаление объектов

Недавно начал писать на Qt более или менее серьезное приложение. И сразу возникла проблема.

Есть у меня класс TcpLinkManager. Он содержит член QTcpSocket. В TcpLinkManager есть методы-слоты, которые реагируют на события connect/disconnect, идущие от QTcpSocket. И есть ещё один класс Log. Когда происходят события разрыва/установки соединения из класса TcpLinkManager вызываются методы Log, которые должны делать запись в лог. Экземпляры TcpLinkManager и Log сделаны ввиде глобальных переменных. И они видят друг-друга.

Когда я закрывю приложение, то наблюдается следующая картина:

  • Вызывается деструктор глобальной переменной Log::~Log(). Объект Log уничтожен.
  • Вызывается деструктор глобальной переменной TcpLinkManager::~TcpLinkManager(). Вызывается деструктор QTcpSocket. Он закрывает сокет и выбрасывает сигнал в метод-слот TcpLinkManager. Тот пытается вызвать метод объекта Log для записи сообщения. Но объект Log уже уничтожен.
  • Segmentation fault....

Раньше я не сталкивался с подобными случаями. И не задумывался о таких вещах. Привык, что деструкторы уничтожают объект и не вызывают кучу сторонних методов с неожиданными сайд-эффектами. Я решил проблему добавлением в код TcpLinkManager::~TcpLinkManager() вызова метода .blockSignals(true) для экземпляра QTcpSocket. Но такое решение мне не нравится. Хочется так писать код, чтобы не задумываться о том, в какой последовательности будут уничтожаться объекты.

Вопрос: Какой есть способ «красиво» решить проблему? Как пишут те, кто много работает с Qt?

 

pathfinder
()

Верните aho

сабж, ну хотя бы в Development

pathfinder
()

[Гуй] Насколько реально?

Я не знаю как там обстоят дела с кодовой базой, которая досталась в наследие. Но мне интересно, насколько реально отделить функционал от отображения? Было бы классно, если бы можно было менять систему интерфейса пользователя: консоль/«гуй на Qt или GTK». Насколько достижима подобная задача?

pathfinder
()

Кэш CPU и сборка мусора

Интересно, как влияет сборка мусора на эффективность использования кэша процессора?

Я так понимаю, что эффективное использование кэша завязано на то, как часто будут использоваться одни и те же участки памяти. Когда используется сборка мусора то повторное использование одного и того же куска памяти для новых целей возможно только после запуска GC. Последнее стараются отложить на как можно более поздний момент. Поэтому агрессивное выделение/освобождение объектов в определенных ситуациях должно приводить к постоянной перезагрузке кэша. Если реализация алгоритма на с++ допускает активное использование стека и при интенсивном создании/уничтожении объектов в стеке этот стек будет «топтаться на месте», то кэш может вообще не меняться.

С другой стороны данные, с которыми идет активная работа скорее всего были созданы в одно время и лежат в одном месте. Что хорошо, по сравнению с вариантом, когда используется malloc()/free(). В последнем случае сложно предсказать, где будут лежать данные после двух последовательных malloc() (При использовании GC данные почти наверняка будут лежать рядом).

Подводя итоги:

1. Поскольку полноценная и безопасная поддержка GC сильно ограничивает возможности использования стека, то реализации некоторых алгоритмов в языках с нативным GC будут всегда сливать по производительности в сравнении с реализацией на с++, так-как в последнем случае можно активно использовать стек для хранения объектов.

2. Если надо много работать с кучей (malloc/free), то GC покажет свои преимущества во всей красе, и по производительности, и по безопасности, и по удобству использования.

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

pathfinder
()

[extlinux] Защита от дурака

Есть скрипт для создания специальной загрузочной флешки. Использую extlinux. Обычно у меня /dev/sdb - флешка, а /dev/sda - жесткий диск.

Сейчас скрипт на bash-e создает фаловую систему на флешке, копирует туда файлы, делает носитель загрузочным.

Возможно скрипт придется не раз править. Может кто посоветует, как можно защитится от всяких неприятностей, типа сносов разделов винта по ошибке.

pathfinder
()

[c++] Сопрограммы в продакшене

Интересует сабж. Насколько безопасно? Какими библиотеками лучше пользоваться? Есть ли грабли?

 

pathfinder
()

[c/c++] Размышления про close()

Системный вызов close() теоретически может вернуть код ошибки EINTR. Я у себя использую заглушку try_close() которая перезапускает close() в случае EINTR и экстренно завершает приложение (с выбросом сообщения об ошибке) в случае остальных кодов ошибки.

Я тут смотрю многие вообще не проверяют возврат функции close().

Интересует:

1. Насколько это безопасно? Мне кажется, что очень небезопасно.

2. Кто? как? работает с close()? Если писать явно код обработки возвращаемого значения для каждого close(), то получится очень громоздко. Может у кого-нибудь есть красивые решения?

pathfinder
()

[В гугле забанили] Сборка своего toolchain-а

Хочу собрать свой тулчейн под старую версию glibc (x86). Пробовал crosstool-ng, но как-то не пошло. Сейчас пытаюсь собрать вручную (почти) из исходников. Может кто-то даст хорошие мануалы на эту тему.

Заранее благодарю за доброту, терпение и понимание. :)

pathfinder
()

Проблема 2038 года (32 бита)

Есть ли нормальный/стандартный способ решить проблему 2038 года на 32 битной платформе?

pathfinder
()

Ещё раз про корутины

Навеяно недавним тредом про корутины. Можно ли использовать в продакшене корутины реализованные через функции getcontext()/setcontext(). Просто мысль возникла, никогда ничего подобного раньше не делал.

pathfinder
()

[Новость] Антивирусы для андроидов

Компании «Лаборатория Касперского» и «Доктор Веб» выпустили свои версии антивирусов для набирающей популярность ОС Андроид. Обе компании полагают, что появление большого количества вредоносных программ для этой операционной системы не за горами.

Объявлено так же, что продукты будут выполнять и другие функции обеспечения безопасности.

Kaspersky Mobile Security 9:

  • Защита от спама
  • Блокировка нежелательных звонков
  • Сокрытие списка контактов
  • Блокировка утраченного телефона через СМС (Бу-га-га)
  • Шифрование файлов
  • Определение местоположения смартфона
  • Родительский контроль

Dr.Web для Android:

  • Защита от спама
  • Гибкая фильтрация звонков и СМС
  • Ликвидация вредоносного Windows-автозапуска при присоединении флешки к смартфону

Kaspersky Mobile Security 9 для Android

Dr.Web для Android

 

pathfinder
()

[Artifical_Thought] Странный пользователь

Вчера натолкнулся на тему, где меня предлагали забанить - ссылка. ТС давал пруф с картинкой. По какой-то непонятной причине скриншот был сделан неким пользователем Artifical_Thought а не самим FiXer. Зашел в профиль пользователя Artifical_Thought и тут самое странное.

У пользователя 0 комментарием и 0 сообщений, последнее посещение год назад (18.12.2009). При этом ясно видно, что на скриншоте с моим профилем дата последнего посещения 07.01.2011.

Вопрос: Что это за искривления пространства-времени?

pathfinder
()

Травля модераторов

Я может затрагиваю ещё одну священную корову ЛОРа, но мне интересно, почему сабж возможен? Я имею ввиду надписи на аватарах типа «Привет(пока), isden». Явление приняло достаточно массовый характер и при этом вроде бы никого не побанили и скор не порезали. Значит ли это, что так можно поступать?

pathfinder
()

Голые бабы в галерее

Я над этим раньше не задумывался, но сегодня увидел в галерее.

http://www.linux.org.ru/gallery/screenshots/5650536

Интересует политика ресурса в отношении сабжа. Я часто с рабочего компьютера на ЛОР захожу. В таких случаях видеть подобное не очень желательно. Я согласен, что бывает разная степень наготы и на эту тему можно дискутировать. Меня просто интересует - какие конкретно правила на этот счет на сайте?

pathfinder
()

RSS подписка на новые темы