Russian Qt Forum

Программирование => С/C++ => Тема начата: Vitto74 от Август 26, 2010, 09:22



Название: [Решено]Проблема в чужом коде
Отправлено: Vitto74 от Август 26, 2010, 09:22
Доброго времени суток.
Я решил создать маленькое ответвление от проекта EiskaltDC++. В нем будут только небольшие изменения интерфейса.
Но параллельно хочется разобраться как в нем все устроено.
При переносе проекта в QtCreator я добавил несколько директив препроцессора для облегчения кроссразработки (UPnP нет в Linux, а DBus нет в винде) да и некоторые необходимые записи в pro-файле отсутствовали (модуль QtNetwork не объявлен).
Но кроме прочих проблем вылезла ошибка и самом ядре DC++. Ядро я менять не хочу т.к. планирую брать его без изменений из проекта EiskaltDC++ (они его совсем немного подпиливают).
Ошибка такая
Код:
dcpp/Streams.h:140: error: there are no arguments to ‘_’ that depend on a template parameter, so a declaration of ‘_’ must be available
dcpp/Streams.h:140: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
Вот сама процедура
Код:
virtual size_t write(const void* buf, size_t len) throw(Exception) {
if(maxBytes < len) {
throw FileException(_("More bytes written than requested")); // Та самая строчка 140
}
maxBytes -= len;
return s->write(buf, len);
}
С чистым С/С++ особо сталкиваться не приходилось т.к. перешел с Delphi сразу на Qt4 (знаю только основы C++).
Помогите решить проблему или подскажите где я могу найти её решение.


Название: Re: Проблема в чужом коде
Отправлено: merke от Август 26, 2010, 09:25
убери знак _


Название: Re: Проблема в чужом коде
Отправлено: merke от Август 26, 2010, 09:31
если не поможет вообще закоменти эту строчку)))


Название: Re: Проблема в чужом коде
Отправлено: Admin от Август 26, 2010, 09:41
что то мне это gettext напомнило
именно они любят

_("string") писать  - почитай в эту сторону


Название: Re: Проблема в чужом коде
Отправлено: Sancho_s_rancho от Август 26, 2010, 09:42
Это значит #define _(x) gettext (x)
В Qt ближе всего соответсвует tr()


Название: Re: Проблема в чужом коде
Отправлено: BRE от Август 26, 2010, 10:44
(UPnP нет в Linux, а DBus нет в винде)
Как понять UPnP нет в linux?
Да и DBus есть в венде. Соберай-запускай-пользуйся.  :)


Название: Re: Проблема в чужом коде
Отправлено: Vitto74 от Август 26, 2010, 10:58
Удалил знак '_' и при компиляции ругается на функции str и F_
Их там много (22) и все они (которые я видел) используются при отправке строк в логи.

Может их заменить при помощи препроцессора?

PS погуглил на счет UPnP и DBus - извиняюсь, сам дурак.


Название: Re: Проблема в чужом коде
Отправлено: Sancho_s_rancho от Август 26, 2010, 11:43
Удалил знак '_' и при компиляции ругается на функции str и F_
Их там много (22) и все они (которые я видел) используются при отправке строк в логи.

Может их заменить при помощи препроцессора?

PS погуглил на счет UPnP и DBus - извиняюсь, сам дурак.
Можно и gettext подключить.
http://www.opennet.ru/docs/RUS/gtk-reference/gtk-question-index.html (http://www.opennet.ru/docs/RUS/gtk-reference/gtk-question-index.html)


Название: Re: Проблема в чужом коде
Отправлено: pavelvat от Август 26, 2010, 22:53
Доброго времени суток.
Я решил создать маленькое ответвление от проекта EiskaltDC++. В нем будут только небольшие изменения интерфейса.
Но параллельно хочется разобраться как в нем все устроено.
При переносе проекта в QtCreator я добавил несколько директив препроцессора для облегчения кроссразработки (UPnP нет в Linux, а DBus нет в винде) да и некоторые необходимые записи в pro-файле отсутствовали (модуль QtNetwork не объявлен).

Какие именно небольшие изменения интерфейса планируются? Если это что-то вроде добавления кнопок в стиле "блокнот", "сейчас играет", то для этого создатели предусмотрели возможность писать расширения на QtScript, подробнее на официальном сайте на вкладе "wiki".
Сборка выполняется cmake, а не qmake. На официальном форуме Qt говорилось, что систему сборки qmake выпилят и перейдут на cmake, так что не стоит тратить время на её изучение, приступай сразу к cmake.
Ты исходники из транка брал или старые из версии 2.0.3, просто в транке уже давно добавили флаги для cmake отключающие QtDBus который в Windows отсутствует, и возможность отключить UPnP, все эти флаги описаны в файле INSTALL.
Буквально на днях в транке EiskaltDC++ заменили библиотеку libupnp которая не собиралась в mingw в Windows на библиотеку miniupnp, так что теперь UPnP поддерживается на всех платформах.
По поводу сборки, в папке win32 лежит файл с инструкциями по сборке под Windows в mingw и соответствующие bat-файлы.


Название: Re: Проблема в чужом коде
Отправлено: Vitto74 от Август 26, 2010, 23:17
На pro я уже забил и копаюсь в cmake.
Сбору использую старую (2.0.3).
Изменения - одна галочка на панели поиска, два окошка и один модуль + слегка переделанное окно с результатами поиска.


Название: Re: Проблема в чужом коде
Отправлено: pavelvat от Август 26, 2010, 23:27
сборка под windows появилась после 2.0.3
получить исходники можно так:
установить если не установлен Slik-Subversion затем выполнить в командной строке:
svn checkout http://eiskaltdc.googlecode.com/svn/branches/trunk/ eiskaltdc-read-only

Зачем делать форк проекта, ты можешь просто присылать свои патчи. Если возникнут какие-то вопросы можно связаться с разработчиками в jabber конференции eiskaltdc@conference.gentoo.ru


Название: Re: Проблема в чужом коде
Отправлено: Vitto74 от Август 27, 2010, 18:04
На сколько я понял то, что в trunk еще не стабильно. Собственно по этому пилю 2.0.3. Одна из целей максимальное упрощения переноса изменений в новые версии.


Название: Re: Проблема в чужом коде
Отправлено: pavelvat от Август 27, 2010, 23:55
Чтобы клиент собирался под Windows пришлось сделать несколько изменений в коде, а чтобы то что собралось правильно работало в Windows были сделаны ещё изменения. А ты используешь старые исходники от версии 2.0.3, в которых все эти изменения отсутствуют, соответственно клиент просто не соберётся под Windows.


Название: Re: Проблема в чужом коде
Отправлено: Vitto74 от Август 29, 2010, 12:31
Ясно. Тогда придется еще подождать, пока допилят версию, собирающуюся под все ОС


Название: Re: Проблема в чужом коде
Отправлено: pavelvat от Август 29, 2010, 17:28
А зачем ждать то? - как получить исходники из разрабатываемой версии я объяснил выше. Вообще, в клиент вносятся изменения, по прошествии определённого интервала времени выпускается релиз, понятие стабильный или нестабильный - весьма условно. Следующий релиз будет ориентировочно в начале октября. И повторюсь, какой смысл делать форк когда можно просто прислать патчи в оригинальный проект? - если авторы сочтут твои изменения нужными и полезными их включат в оригинал.


Название: Re: Проблема в чужом коде
Отправлено: Vitto74 от Август 30, 2010, 05:36
Я не собираюсь делать полноценный форк. Разработчики эти патчи не примут и правильно сделают. Мне эти возможности нужны только для маленького хаба на 150 юзеров.
Если вкратце - хочу соединить удобство поиска по торрентам (раздачи с описанием) с p2p на которую сложно наехать правоохранительным органам (хаб хранит только адреса юзеров - модерация невозможна).
Пока что мои патчи будут гвоздями прибиты к qt, но позже собираюсь этот недостаток исправить - времени в обрез.

Сейчас буду пилить то, что станет 2.1.0.


Название: Re: Проблема в чужом коде
Отправлено: Vitto74 от Август 30, 2010, 06:25
Хотя некоторые патчи всетаки пришлю - пара мест в интерфейсе я бы сделал чуть по другому.
Например, при использовании боковой панели вместо табов, при двойном щелчке по поиску должен открываться новый поиск, а сейчас этот элемент ни на что не реагирует.
И еще вопрос - патчи ни для одного проекта я никогда не присылал. Где можно почитать о том как их делать правильно?


Название: Re: Проблема в чужом коде
Отправлено: pavelvat от Август 30, 2010, 09:24
Боковая панель служит для навигации по открытым табам, чтобы открыть таб с поиском надо использовать кнопку на панели инструментов или пункт меню.
По-поводу патчей ищи по ключевым словам diff и patch.


Название: Re: Проблема в чужом коде
Отправлено: Vitto74 от Август 30, 2010, 09:57
Но дважды кликнуть по пункту "Поиск" было бы более интуитивно.