Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: Gorthauer от Январь 08, 2012, 01:34



Название: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 01:34
Ссылка на статью на Хабре (http://habrahabr.ru/blogs/qt_software/135443/)

Либой вполне можно уже пользоваться. Но хотелось бы от местного сообщества некоторой помощи: во первых просто хочу, чтобы народ её протестировал, во вторых нужна помощь с доками и их переводом на инглишь. В третьих есть ещё dockmanager. Есть желающие запилить?


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Авварон от Январь 08, 2012, 01:44
Не собирается нихрена


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 02:48
install читали? Субмодуль инитили? И это, лог где? Я не телепат!


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Авварон от Январь 08, 2012, 10:07
Gorthauer
Конечно не читал. Конечно не инитил. Я вообще зипник качал.

А вам советую не блистать знаниями симейка и гита, а сделать нормальный прошник, благо на кутях пишите.
Представляю пос-ть действий для левого юзера - поставьте цмейк, поставьте гит, выполните 200 консольных команд и получите собранную либу из 300 строк кода. Бугагашенька.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Авварон от Январь 08, 2012, 10:11
Кстатати поправьте меня, но в проекте нет файла инстолл, а ридми пустой.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Авварон от Январь 08, 2012, 10:14
В докменеджере утекает плагинлоадер


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 18:32
zip текущей ревизии вообще бесполезно качать, ибо гит не умеет субмодули в зипы добавлять, как релиз будет, так сделаю нормальный тарбол, а пока мне нужны как раз те ребята, которые ни гита ни цмака не боятся. Прошник делать пока не буду ибо цмак банально удобнее.

В докменеджере утекает плагинлоадер
Это с чего это вдруг? Он удаляется вместе с менеджером ибо заключен вовнутрь QScopedPointer'а.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 18:33
Кстатати поправьте меня, но в проекте нет файла инстолл, а ридми пустой.
Там вики есть на гитхабе. Там есть ридми, правда русское и инсталл, который сейчас сдублировал в корне проекта. Вот с переводом хорошим ридмишки и хотелось бы помощи или совета хотя бы.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: BRE от Январь 08, 2012, 19:06
Исходники не смотрел, но в статье глаз зацепился за:
Код
C++ (Qt)
const char *utf8String = badge.toUtf8().constData();
 
Думаю этот же код и в библиотеке.

Так делать нельзя. В следующей строке указатель будет ссылаться на разрушенный буфер.
Несколько раз обсуждали на форуме.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: andrew.k от Январь 08, 2012, 20:22
Исходники не смотрел, но в статье глаз зацепился за:
Код
C++ (Qt)
const char *utf8String = badge.toUtf8().constData();
 
Думаю этот же код и в библиотеке.

Так делать нельзя. В следующей строке указатель будет ссылаться на разрушенный буфер.
Несколько раз обсуждали на форуме.

Почему нельзя то?

The pointer remains valid as long as the byte array isn't reallocated or destroyed.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 20:26
Исходники не смотрел, но в статье глаз зацепился за:
Код
C++ (Qt)
const char *utf8String = badge.toUtf8().constData();
 
Думаю этот же код и в библиотеке.

Так делать нельзя. В следующей строке указатель будет ссылаться на разрушенный буфер.
Несколько раз обсуждали на форуме.


Взято из сырцов Креатора и самое главное, что после посылки сообщения доку, все эти строки по выходу из области видимости очищаются. А если строчку из контекста вырывать, то конечно. В реализации для винды так вообще можно дохрена таких "утечек" найти.

ЗЫ
на досуге попробуйте подумать, что делает эта строчка
Код:
[cocoaString release];


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: andrew.k от Январь 08, 2012, 20:32
Исходники не смотрел, но в статье глаз зацепился за:
Код
C++ (Qt)
const char *utf8String = badge.toUtf8().constData();
 
Думаю этот же код и в библиотеке.

Так делать нельзя. В следующей строке указатель будет ссылаться на разрушенный буфер.
Несколько раз обсуждали на форуме.


Взято из сырцов Креатора и самое главное, что после посылки сообщения доку, все эти строки по выходу из области видимости очищаются. А если строчку из контекста вырывать, то конечно. В реализации для винды так вообще можно дохрена таких "утечек" найти.

ЗЫ
на досуге попробуйте подумать, что делает эта строчка
Код:
[cocoaString release];

Видимо поэтому он время от времени падает)

Дошло в чем дело. toUtf8() возвращает временный объект QByteArray ссылка на который никуда не сохраняется, а используется лишь вызов constData. Сразу после вызова объект будет разрушен. И указатель станет не валидным.

Значит и правда нельзя.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 20:39
Хех, а про QByteArray я уже проглядел, невнимательным был... Интересно, почему оно тогда в креаторе ни разу не падало?


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: BRE от Январь 08, 2012, 20:42
Интересно, почему оно тогда в креаторе ни разу не падало?
Везло.
Освобожденный участок памяти никому в этот момент не отдавался, поэтому данные никто не затирал.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 20:50
Fixed.
Отправить что ли троллям патч. А то и там и там банальная невнимательность и везение %) Нда... иногда таки бывают грабли даже если берёшь код казалось бы из хорошего и проверенного источника и априори ему доверяешь не вчитываясь)


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: andrew.k от Январь 08, 2012, 20:56
Код
C++ (Qt)
NSString *cocoaString = [[NSString alloc] initWithUTF8String:utf8String];
   [[NSApp dockTile] setBadgeLabel:cocoaString];
   [cocoaString release];
А что это вообще за код такой в квадратных скобках?

По-моему я такой видел только в билдеровских хедерах когда-то давно.
Это вообще что и с чем?


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 20:59
Это objective C, синтаксис посылки сообщения, это нечто в духе emit.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: BRE от Январь 08, 2012, 21:03
Fixed.
Отправить что ли троллям патч. А то и там и там банальная невнимательность и везение %) Нда... иногда таки бывают грабли даже если берёшь код казалось бы из хорошего и проверенного источника и априори ему доверяешь не вчитываясь)
Подожди с патчем.
А как это у них выглядит?

Если так:
Код
C++ (Qt)
func( str.toUtf8().constData() );
 
то это вполне валидный код.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: andrew.k от Январь 08, 2012, 21:08
Это objective C, синтаксис посылки сообщения, это нечто в духе emit.

Это можно прямо в коде С++ использовать? И для чего это?
Можешь ссылкой какой-нибудь кинуть, почитаю. Пока читаю вики.
Я думал objective-C это какой-то отдельный язык.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 21:15
Fixed.
Отправить что ли троллям патч. А то и там и там банальная невнимательность и везение %) Нда... иногда таки бывают грабли даже если берёшь код казалось бы из хорошего и проверенного источника и априори ему доверяешь не вчитываясь)
Подожди с патчем.
А как это у них выглядит?

Если так:
Код
C++ (Qt)
func( str.toUtf8().constData() );
 
то это вполне валидный код.


Там именно так как у меня было выглядит, строчка в строчку, а у меня теперь наоборот как раз func( str.toUtf8().constData() );

Цитировать
Это можно прямо в коде С++ использовать? И для чего это?
Можешь ссылкой какой-нибудь кинуть, почитаю. Пока читаю вики.
Я думал objective-C это какой-то отдельный язык.
Тут всё хитрее, есть диалект objective C++, который призван склеивать С++ и objective C части. Расширение у таких творений mm и юзать их вне Макоси весьма затруднительно, я не уверен, что на GNUStep'е оно взлетит.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: kambala от Январь 08, 2012, 21:26
Это objective C, синтаксис посылки сообщения, это нечто в духе emit.
вообще-то это просто вызов метода, хоть и называется "отсылкой сообщения". а [obj release] - это что-то типа плюсового delete obj.

"нечто в духе emit" - это [[NSNotificationCenter defaultCenter] postNotificationName:@"myNotificationName"]


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 21:52
emit это тоже вызов метода :)


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: kambala от Январь 08, 2012, 21:56
postNotificationName:, как и emit, тоже вызывает метод, но ведь не напрямую


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 08, 2012, 22:06
а emit обычно напрямую :) Если не стоит queued connection.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: kambala от Январь 08, 2012, 22:32
нет, под "напрямую" я подразумеваю, что ты же не пишешь Obj.method() при эмите :)

а так да - центр уведомлений тоже "заставляет" всех подписавшихся объектов вызвать свой метод мгновенно


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 09, 2012, 02:04
Тем не менее, никто не запрещает так делать, сигналы - это же по сути обычные protected методы, для френдов они прекрасно вызываются.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Авварон от Январь 10, 2012, 11:41
Делать было нечего, собрал. Как ожидалось, инструкция по сборке неверная - вы забыли cd build -_-
Тестил на мак ос лион.
Без инстолла док тоже не пашет (что, впрочем ожидаемо, но хотелось бы уведомление)
Не пашет алерт (он же прыгать должен?). Шрифт бэджа какой-то угловатый; хотя цифры ок. Прогресс ок, меню тоже вроде работает.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Авварон от Январь 10, 2012, 13:49
А, меню тоже не пашет - при открытии того меню, что в окне, меню из дока удаляется.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Январь 11, 2012, 23:42
Хм... ща подправлю тогда описание. Но насчет меню и бейджа, то в первом случае юзается qtшный метод и баг соответственно кутишный, а во втором случае я как раз тот метод применяю, который тут обсуждался и просто посылаю доку сообщение с текстом в бейдже.
А насчет алерта не понятно, вроде и должен пахать, но почему-то не пашет.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Февраль 11, 2012, 15:51
Тестим первую бету! И кто может, голосуйте на qt-apps!
http://qt-apps.org/content/show.php/QtDockTile?content=148668


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: b-s-a от Февраль 12, 2012, 21:02
Почему сразу исходники не оформил в виде: http://wiki.qt-project.org/Creating_a_new_module_or_tool_for_Qt
Было бы проще попасть в qt-project.org

setMenu() обязательно делать слотом?
И сигналы на мой взгляд лишние. Если кому-то надо, он может сам приконнектиться к сигналам выставляющим меню и пр.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Февраль 14, 2012, 01:03
Сигналы нужны для нормальной работы свойств в qml. Для этих же целей и слоты делал. Но в принципе думаю, что это и правда лишнее. Насчет оформления: идея неплохая, но надо бы наверное для начала получше потестить саму либу, да и не уверен, что она прямо на целый модуль тянет.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: b-s-a от Февраль 14, 2012, 09:58
Модуль не модуль, а если оформить правильно, то потом может и в сам QtGui войти.


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Февраль 17, 2012, 13:14
Скорее уж в Qt Widgets.
ЗЫ
Начал потихоньку причесывать модуль и переводить его на qmake. Вот только в случае если оформлю как модуль qtшный, то не ясно как его собирать без synqt, у кого есть опыт?


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Авварон от Февраль 17, 2012, 13:40
Оно не войдет в Qt, тк не следует принципу code less. Там должно быть 3 класса безо всяких плагинов. Максимум - плагин должен быть для виндоу системы (те надо расширить его интерфейс).


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Gorthauer от Март 02, 2012, 16:09
Почему это? Там 2 класса всего публичных! Для эндюзера так и вовсе только QtDockTile нужен, плагины только для поддержки платформ нужны. Все сделано по аналогии с либами из QtMobility


Название: Re: QtDockTile - кроссплатформенный док
Отправлено: Авварон от Март 02, 2012, 16:52
Цитировать
QtMobility
Нашел с чего пример брать. Это самый кривой модуль Qt.

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

В том виде, в каком меню есть, оно не нужно - не должн быть перекоса по функционалу между платформами. Есть хинт для винды - можно иерархические меню разворачивать сепараторами, как группы. Однако код под винду дико кривой, велика вероятность, что завернут.

Аналогично бэдж - почему я передаю кустринг, к-ый тупо не работает в юнити? Тогда делать числом.

Дело не в количестве паблик классов, а в общем количестве чущностей - кутешники смотрят не на апи, а на реализацию. Плагины для платформ нахрен не нужны - на 1 платформу щаз 1 плагин, а валидность его можно и в рантайме проверить (есть юнити или нет).

В общем, для Qt код не готов.