Russian Qt Forum

Qt => Общие вопросы => Тема начата: Eldar от Октябрь 26, 2008, 22:57



Название: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 26, 2008, 22:57
Раньше я программировал на С++ и Qt все устраивало, да захотелось новых ощущений - решил попробовать D - понравилось настолько что теперь возвращаться на плюсы абсолютно не хочется. Это тема отдельного разговора.
С D я использовал долгое время gtk - все устраивало вроде, по возможностям это очень близкие тулкиты, но если начинать копать в глубь - то гтк намного отстает от Qt. Родилась идея сделать биндинг. Последнюю неделю занимаюсь этим вплотную и столкнулся с большой проблемой - виртуальные функции. С обычными методами Qt классов все в порядке - создаем extern C прослойку для каждого метода:
Код:
extern (C) int QWidget_minimumWidth(QWidget* widget)
{
    return widget->minimumWidth();
}
А далее цепляем этот набор Си функций в коде D и воссоздаем новый объект обертку с реализующий такой же набор методов.
С виртуальными функциями сложнее:
Код:
class QWidget_Proxy: public QWidget
{
   Q_OBJECT
   public:
      QWidget_Proxy(QWidget* parent = 0);

      void ancestor_mousePressEvent(QMouseEvent* qme);
      virtual void mousePressEvent(QMouseEvent* qme);
}

void QWidget_Proxy::ancestor_mousePressEvent(QMouseEvent* qme)
{
   mousePressEvent(qme);
}

void QWidget_Proxy::mousePressEvent(QMouseEvent* qme)
{
   Dispatch_QWidget_MousePressEvent(this, qme);
}
Dispatch_QWidget_MousePressEvent - это extern C функция объявленная в Ди которая вызывает по умолчанию ancestor_mousePressEvent - то есть реализацию по умолчанию для виджета. Если мы унаследуемся в Ди коде - то все будет в порядке - будет вызвана новая реализация.
Проблема начинается тогда когда мы таким же методом создадим к примеру QPushButton_Proxy - он будет наследоваться от QPushButton, а этот в свою очередь от QWidget. Но реализацию виртуальных методов мы же сделали для QWidget_proxy - то есть для унаследованных классов схема с proxy - не  будет работать. Где-то слышал, что в биндингах перехватывают виртуальные функции - но это ведь связано с модификацией vtable[] - что большое зло. У кого-нибудь есть какие-нибудь соображения на этот счет?


Название: Re: Qt binding к языку программирования D.
Отправлено: Detonator от Октябрь 27, 2008, 09:50
Может не страдать а писать просто на C++?
Мне вот тоже хочется писать под Qt на C# вместо C++, но ничего, терплю :)


Название: Re: Qt binding к языку программирования D.
Отправлено: Admin от Октябрь 27, 2008, 10:13
Создали бы топик - зто за язык D.

PS: А лучше начать с языка A. Что за мода называть язык 1 буквой - я раньше еле находил статьи по C. Сорри, отвлекся.


Название: Re: Qt binding к языку программирования D.
Отправлено: Rcus от Октябрь 27, 2008, 10:39
http://www.digitalmars.com/d/index.html
Вам не кажется что писать биндинги к такой библиотеке как Qt непосильная задача для одного человека? Не вдаваясь в детали в Qt очень много специфичных решений (но если так хочется думаю вам можно посмотреть на Qt Jambi, PyQt(+SIP) и т.д.)


Название: Re: Qt binding к языку программирования D.
Отправлено: ритт от Октябрь 27, 2008, 10:55
[offtop]
"я написала этот вирус на связке паскаля, объектного си, жавы, ассемблера и некоторых малоизвестных языков..." ©какой-то_старый_тупой_фильм

Код:
specs* s = new specs;
// no need for '->'
s.count = args.length;
надо это xintreya показать :)
[/offtop]

я не понял почему схема с прокси не будет работать (точнее, в чём сама суть проблемы).
и хотелось бы услышать чем д превосходит с/с++, что плюсы уже обзывают "устаревшим" языком?


Название: Re: Qt binding к языку программирования D.
Отправлено: Пантер от Октябрь 27, 2008, 12:35
Вроде как D - сверхвысокий язык программирования. :)


Название: Re: Qt binding к языку программирования D.
Отправлено: constvipn от Октябрь 27, 2008, 12:36
Мне вот тоже хочется писать под Qt на C# вместо C++, но ничего, терплю :)

Что мешает? По крайней мере под Linux: http://qyoto.org/


Название: Re: Qt binding к языку программирования D.
Отправлено: Пантер от Октябрь 27, 2008, 12:41
У D, насколько я понял, есть в C компиль. Хотя утверждать не буду. Легче в вики посмотреть.


Название: Re: Qt binding к языку программирования D.
Отправлено: Detonator от Октябрь 27, 2008, 17:08
Что мешает? По крайней мере под Linux: http://qyoto.org/

Линукс мешает :)


Название: Re: Qt binding к языку программирования D.
Отправлено: SASA от Октябрь 27, 2008, 17:34
Что такое D, и с чем его едят ??? Может кто кинет ссылочку на обзорную статью.


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 27, 2008, 17:39
Что такое D, и с чем его едят ??? Может кто кинет ссылочку на обзорную статью.

НАшел немного инфы на википедии: D (язык программирования) (http://ru.wikipedia.org/wiki/D_(язык_программирования))


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 27, 2008, 17:43
Предлагаю перенести обсуждение языка D и С++ в другую тему: http://www.prog.org.ru/topic_7933_0.html


Название: Re: Qt binding к языку программирования D.
Отправлено: xintrea от Октябрь 28, 2008, 00:29
Вам не кажется что писать биндинги к такой библиотеке как Qt непосильная задача для одного человека? Не вдаваясь в детали в Qt очень много специфичных решений (но если так хочется думаю вам можно посмотреть на Qt Jambi, PyQt(+SIP) и т.д.)

Если писать биндинги только к тем вещам, которые используются из Qt в конкретном проекте, то вполне посильная для одного человека.

По поводу виртуальных функций вроде слышал, что в D нет виртуальных функций впринципе. То есть, грубо говоря, все функции в D считаются виртуальными. И если для функции в производном классе есть переопределяемая функция (с таким же именем), то функция обязательно будет переопределена. А если нет переопределяемой функции, то просто будет использоваться реализация основного класса. Хотя, это вроде к обсуждаемой теме не относится.

Что-то подсказывает что здесь по вашему вопросу вряд ли помогут. Хотя бы до тех пор, пока вы не поясните Константину, почему схема с прокси не будет работать и в чём сама суть проблемы. :)


Название: Re: Qt binding к языку программирования D.
Отправлено: ритт от Октябрь 28, 2008, 15:51
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.announce&article_id=13832
мне сложно представить как можно писать на Д и получать удовольствие, если между обновлениями _столько_ изменений (в т.ч. и в сторону синтаксиса/логики)!
и ещё мне интересно: Д стандартизован? где-нибудь можно почитать стандарты языка Д?


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 28, 2008, 16:00
и ещё мне интересно: Д стандартизован? где-нибудь можно почитать стандарты языка Д?

Я также заинтересовался этим вопросом. Искал - не нашел.


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 28, 2008, 17:53
[offtop]
"я написала этот вирус на связке паскаля, объектного си, жавы, ассемблера и некоторых малоизвестных языков..." ©какой-то_старый_тупой_фильм

Код:
specs* s = new specs;
// no need for '->'
s.count = args.length;
надо это xintreya показать :)
[/offtop]

я не понял почему схема с прокси не будет работать (точнее, в чём сама суть проблемы).
и хотелось бы услышать чем д превосходит с/с++, что плюсы уже обзывают "устаревшим" языком?
По поводу прокси - я уже получил ответ на свой вопрос у разработчиков Smoke либы, на которой основаны qyoto, perlqt и qtruby. В данной схеме не работает то, что виртуальный функции обработанные для QWidget_proxy не будут работать для QButton_proxy так как он наследуется от QButton, а QButton в свою очередь от QWidget, но не от QWidget_proxy.
По поводу С++ - я прекрасно понимаю что поскольку вы используете С++ - трудно понимать очевидные вещи - то что язык устарел к примеру. Могу подробнее написать - более менее окончательно язык стабилизировался к 1991 году - 17 лет. Немало. Далее, если смотреть когда язык появился - в 1983 году - уже 25 лет. Но что наиболее важно - большая часть концепций С++ перекочевала из Си, которому уже почти 40 лет - то мне абсолютно непонятно почему вы так удивляетесь что я называю С++ устаревшим.
Насчет преимуществ D подробнее напишу во вновь созданном топике.

>>и ещё мне интересно: Д стандартизован? где-нибудь можно почитать стандарты языка Д?
Cтандарт - это далеко не показатель качества. Python имеет стандарт? Руби? язык D определяется спецификациями, и референсной реализацией - dmd.


>>мне сложно представить как можно писать на Д и получать удовольствие, если между обновлениями _столько_ изменений (в т.ч. и в сторону синтаксиса/логики)!
Стоит вначале разобраться в предмете разговора а потом уже писать... Есть 2 ветки языка - D1 И D2. D1 - стабильный, который используется в реальных проектах со стабильной спецификацией. D2 - это бета-версия второй версии языка с множеством нововведений, пока еще носит экспериментальный характер и мало используется.


Название: Re: Qt binding к языку программирования D.
Отправлено: ритт от Октябрь 28, 2008, 18:10
могу навскидку привести десятки примеров, доказывающих, что новое далеко не всегда лучше старого :)
но мне лениво...

ограничусь таким фактом: gcc развивается уже не первый десяток лет группой профессиональных разработчиков и, тем не менее, каждая новая мажорная версия лучше предыдущей и поддерживает всё больше технических наворотов, методов оптимизации и т.п.; дмд развивается всего несколько лет небольшой группой энтузиастов...

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

если бы плюсы были действительно морально устаревшими, они бы давно уже пылились на полке истории, как какой-нибудь убогий делфи...


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 28, 2008, 18:43
Хотел бы заметить что gcc отнюдь не показатель. Это ужасн для разработчиков. Есть такой проект - llvm.org - он активно развивается при поддержке apple - можете подробнее посмотреть - но он намного прогрессивнее gcc.
Новое всегда лучше старого. Потому что
1)нет ничего идеального в этом мире, и новое исправляет ошибки
2) то что было актуально 10 лет назад может быть бессмысленным сегодня
Конечно этот принцип не применим к сравнению Led Zeppelin и King Crimson c Бритни Спирс и 50 цент, но в данном случае это так.

Насчет убогости дельфи - я бы попросил не делать скоропалительных суждений..
Плюсы в фаворе лишь в связи со сложившейся обстановки, существующей инфраструктуры, но никак не объективных преимуществ языка. Представьте на секунду - нет ни одной библиотеки и программисты не знают ни одного языка программирования - и выбрать между С++ и D.
Далее насчет компиляторов - автор языка Уолтер Брайт - автор первого компилятора С++ - который появился 20 лет назад. Вам не кажется что он понимает в С++ несколько больше вас с нами. У него есть уже отлаженный годами бэк-енд, компиляторы С++ и D различаются фронтендами. Но даже не за этим компилятором будещее.
Есть компилятор D для gcc - но он плохо развивается и заниматься им никто не хочет. Почему - разработчики это объясняют сложностью и непомерной запутанностью gcc. Вместо этого основная ставка сейчас делается на фронтенд для llvm. За этим будущее. Здесь вам и оптимизации о которых вы говорите, и технические навороты и прочее. И поддерживается крупным вендором.
Вы можете и через 100 лет продолжать писать на с++ - но времена меняются. Я начинал свой проект на С++ и Qt, но после знакомства с D принял решение переписать то что сделано на нем - и скажу что писать на D - это огромное удовольствие, несмотря на некоторые проблемы с инфраструктурой.


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 28, 2008, 18:53
по теме биндинга - принципиально неразрешимых вопросов не осталось - написание биндинга идет медленно но верно, планирую первую более менее рабочую версию на сдедующей неделе. Qt громадная библиотека не спорю. Но я и не собираюсь оборачивать все, так как многое в ней - опять же - костыли к С++. Я это делаю из корыстных побуждений, потому что это в первую очередь надо мне самому. Поэтому вначале будет только то что нужно мне. Если кто-то посчитает интересным присоединитсья и ускорить - то я буду только за.


Название: Re: Qt binding к языку программирования D.
Отправлено: ритт от Октябрь 28, 2008, 19:02
Насчет убогости дельфи - я бы попросил не делать скоропалительных суждений..
это не "скоропостижное" суждение - я говорил о непотребности делфи, когда оно ещё было популярно...

Qt громадная библиотека не спорю. Но я и не собираюсь оборачивать все, так как многое в ней - опять же - костыли к С++
пару примеров, пожалуйста.


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 28, 2008, 19:03
Может быть вы говорить верно, но я невижу столь существенного преимещуства D перед С++, чтобы кидаться на него. С\С++ не устарел, он находиться в зрелом возрасте :). Милионны программистов выбрали его, милиарды строк кода написано на С\С++, существует миллионы библиотек и приложений. Несмотрю на солидный возрас - он востребован. Те вещи которые невостребованы - они умирают, взять тотже Делфи (что язык ни к четру, что среда убогая, для домохозяек). D очень молодой и сырой язык, инструместальные средства сырые. Дай Бог конечно ему прожить хоть четверть от возраста С\С++ )))


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 28, 2008, 19:06
>>пару примеров, пожалуйста.
сигналы-слоты? QString? QVector? QStl? foreach?
Преимущества С++ на сегодня сводятся только к миллиардам строк написанных на нем. А язык устарел, и не заметить это невозможно.


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 28, 2008, 19:08
А у Дельфи есть вполне очевидные преимущества перед С++(как и у С++ перед дельфи), и это никак не связано с тем что Дельфи удобен для домохозяек.


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 28, 2008, 19:27
А у Дельфи есть вполне очевидные преимущества перед С++

searching...

Result: Not found


Название: Re: Qt binding к языку программирования D.
Отправлено: ритт от Октябрь 28, 2008, 19:54
> сигналы-слоты? QString? QVector? QStl? foreach?
это уже фанатизмом отдаёт...зачем же смешивать в кучу различные технологи, по разным причинам не попавшие в "ядро" языка?
Си - сравнительно низкоуровневый язык. упрекать его за отсутствие встроенной поддержки кодировок строк и т.п. - это несерьёзно - с/с++ не для того писались!
если такими темпами будем двигаться, скоро кто-нибудь упрекнёт плюсы за невозможность использования JS/VBS-вставок и т.п. :)


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 28, 2008, 20:09
Ди тоже системный язык. Но это не мешает ему иметь вменяемые строки. Так же как и все остальное.
А сигналы/слоты это тоже фанатизм? По разным причинам не попавшее в ядро языка. Здесь уже попахивает фанатизмом с вашей стороны и нежелание видеть очевидного. Повторюсь, я разубеждать не буду никого здесь и повторять уже сказанное.


Название: Re: Qt binding к языку программирования D.
Отправлено: ритт от Октябрь 28, 2008, 20:32
> Повторюсь, я <...> не буду <...> повторять уже сказанное
:)

мне (лично) не мешает отсутствие "вменяемых" строк в плюсах - имеются стандартные расширения, облегчающие работу с массивами символов...
в делфи имелась поддержка нескольких типов строк - и х?ле, чем это помогло делфи?

мне надоела эта ветка. кроме убеждений в том, что С устарел, а Д - это круто, я больше ничего здесь не вижу.
проблема с биндами разрешилась без нашего участия - вот и прекрасно.

ветку сносить не буду, но просьба впредь писать здесь исключительно по теме биндов Д и Кутэ!


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 28, 2008, 23:58
> Повторюсь, я <...> не буду <...> повторять уже сказанное
:)

мне (лично) не мешает отсутствие "вменяемых" строк в плюсах - имеются стандартные расширения, облегчающие работу с массивами символов...
в делфи имелась поддержка нескольких типов строк - и х?ле, чем это помогло делфи?

мне надоела эта ветка. кроме убеждений в том, что С устарел, а Д - это круто, я больше ничего здесь не вижу.
проблема с биндами разрешилась без нашего участия - вот и прекрасно.

ветку сносить не буду, но просьба впредь писать здесь исключительно по теме биндов Д и Кутэ!
Ну надо сказать, я ОЧЕНЬ боюсь того что Вы снесете ветку...  ;D  Я считаю, что следует отсылать патчи в подлинно свободный тулкит -  GTK+ и совершенствовать его. Что касается D, очень сложно разубеждать людей, которые уже натерли мазоли на преодолении недостатков С++. Мир движется дальше. Если кому-то хочется геморроя с С++ - добро пожаловать. Я - ни-ни. И лично для меня намного интереснее написать биндинг чем писать на этом языке.


Название: Re: Qt binding к языку программирования D.
Отправлено: ритт от Октябрь 29, 2008, 00:33
/* я почти и не сомневался, что последует коммент примерно такого содержания */

> Повторюсь, я разубеждать не буду никого здесь <...>
>> Что касается D, очень сложно разубеждать людей, которые <...>
не могу понять в чём подвох...

>  Я - ни-ни
а что, кто-то заставляет или уговаривает? "нет, Эльдар, не пиши на д - вернись к плюсам...пожалуйста, отправь троллям пару патчиков - сами ведь не справятся"
пишите вы хоть на брейнфаке - только нехер убеждать всех вокруг в их тупости и навязывать свои интересы и свои взгляды.

приглашаю пообщаться на этом же форуме лет через десять, когда Д покорит мир...а может быть это будет Е или Ф?..


Название: Re: Qt binding к языку программирования D.
Отправлено: Пантер от Октябрь 29, 2008, 07:34
"Ребята, давайте жить дружно" (Кот Леопольд)
Зачем переходить на личности и оскорблять другого? Пусть человек даказывает, что Ди лучше, от этих слов С++ хуже не станет. Если ему так хочется, пусть переубеждает.
С++ будет жить еще очень много лет, не одна программа или операционка будет на нем написана. Но это не значит, что не может быть других языков, может даже и лучше его. Почему автор "наезжает" на С++? Просто в сравнении легче объяснять.
Я заинтересовался Ди, и, возможно, в ближайшее время поизучаю его. Хотя бы для себя.
Константин, может покоцаешь посты с руганью? Они ни к чему и топик засоряют. А вот сам топик лучше оставить, все таки альтернативы всегда нужны.


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 29, 2008, 08:32
panter_dsd
Спасибо за адекватный пост. Я не собирался доказывать ничего и никому, просто мне не понравилась волна скепсиса и непонимание очевидных недостатков С++. Я сам не программист, и мне не по душе изучать перипетии С++ и отлов багов с указателями. Мне приятнее кодить свои мысли - и Ди в этом отношении превосходен.

Появился вопрос по поводу биндинга. В Qt есть свое управление памятью? Как я понимаю, если объект имеет родителя, то родитель прибивает его когда надо?
Кстати говоря в случае с D, по сравнению с биндами к скриптовым языкам достаточно небольшое пенальти по производительности. Многие вещи делаются напрямую. в qtruby и qyoto каждый вызов связан с поиском в большом хэше и прочими процедурами, здесь же цена - пара лишних вызовов, что не может не радовать.


Название: Re: Qt binding к языку программирования D.
Отправлено: Пантер от Октябрь 29, 2008, 12:28
Управление памятью есть, родитель при уничтожении убивает всех своих потомков.


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 29, 2008, 12:45
Я не собирался доказывать ничего и никому, просто мне не понравилась волна скепсиса и непонимание очевидных недостатков С++.

Ну так вы ведь неназвали недостатки С++. В этой теме, в другой теме вы кричите "недостатки С++, недостатки С++". А в чем недостатки-то? Я попросил вас назвать недостатки - ответа нет! Так что это только голые слова.... Ничего личного


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 29, 2008, 13:55
Цитировать
Ну так вы ведь неназвали недостатки С++. В этой теме, в другой теме вы кричите "недостатки С++, недостатки С++". А в чем недостатки-то? Я попросил вас назвать недостатки - ответа нет! Так что это только голые слова.... Ничего личного
По аккуратнее в выражениях, уважаемый. Никто здесь не кричит.  То что я считаю недостатками С++ я написал в соответствующем треде http://www.prog.org.ru/topic_7933_0.html  на который здесь была ссылка.
И я  могу говорить о недостатках С++ и премуществах D, потому что я пользовался и тем и другим. Вы - нет.


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 29, 2008, 14:03
То что я считаю недостатками С++ я написал в соответствующем треде http://www.prog.org.ru/topic_7933_0.html  на который здесь была ссылка.

Приведите ссылку на Ваш пост где указаны недостатки  C++, а не голые фразы


Название: Re: Qt binding к языку программирования D.
Отправлено: spirit от Октябрь 29, 2008, 14:05
offtop
че вы на человека накинулись? зашел спросить про кьюти... с такими наездами скоро суда вообще заходить никто не будет.  ;D


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 29, 2008, 14:12
offtop
че вы на человека накинулись? зашел спросить про кьюти... с такими наездами скоро суда вообще заходить никто не будет.  ;D

Никто не накинулся... Тема весьма интересна для всех. Но просто нужно оперировать фактами и объективно сравнивать два языка. Сранение не должно базироваться на личных ощушениях. А так у нас получаеться игра в одни ворота "С++ плохой, одни костыли, и непонятно для всех почему он плохой и в чем проявляються его костыли; D классный язык". Да, мы увидели список нововведений в D, обсудили это нововведения. Но так и не увидели список костылей и подпорок в С++, неуслышали в чем он именно плох. То что он "лично мне не нравиться" это не есть довод, имхо.


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 29, 2008, 14:20
По аккуратнее в выражениях, уважаемый. Никто здесь не кричит. 

Извените, ни в коем случае не хотел вас обидеть


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 29, 2008, 17:19
Цитировать
Приведите ссылку на Ваш пост где указаны недостатки  C++, а не голые фразы
http://www.prog.org.ru/index.php?topic=7933.msg41537#msg41537
Также на первой странице той ветки хорошие посты(много лучше моего :) )

Кстати говоря - многим здесь не нравится амбициозное название языка - D. Автор языка назвал его Mars, но комьюнити убедило его переименовать в D  :P


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 29, 2008, 17:50
Цитировать
Приведите ссылку на Ваш пост где указаны недостатки  C++, а не голые фразы
http://www.prog.org.ru/index.php?topic=7933.msg41537#msg41537

Сорри, но я невижу из вашего поста описания недостатков С++ :). Нашел следующее ваши высказывания:

Цитировать
С++ - это язык, где аккуратно расставлены грабли.
Цитировать
Далее С++ тянет из С, языка 40 летней давности ужасные решения как #include, макросы, классы по умолчанию - типы по значению.
Цитировать
Синтаксис С++ ужасен.

Как вы сами понимаете, это не есть ответ на мой вопрос. Ладно, возвращаемся к теме биндинга :)


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Октябрь 31, 2008, 14:14
По теме биндинга, упоминали что можно вызывать слоты и сигналы по имени. Это через QMetaObject делается?


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Октябрь 31, 2008, 14:24
По теме биндинга, упоминали что можно вызывать слоты и сигналы по имени. Это через QMetaObject делается?

Да, QMetaObject::invokeMethod


Название: Re: Qt binding к языку программирования D.
Отправлено: spirit от Октябрь 31, 2008, 14:24
По теме биндинга, упоминали что можно вызывать слоты и сигналы по имени. Это через QMetaObject делается?

про этот метод почитайте
Цитировать
QMetaObject::invokeMethod
Invokes the member (a signal or a slot name) on the object obj. Returns true if the member could be invoked. Returns false if there is no such member or the parameters did not match.
там же есть пример использования


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Ноябрь 13, 2008, 17:18
Приступил к оборачиванию строк. У меня есть строка QString str, я ее перегоняю в const char* с помощью str.toUtf8().data(). 2 вопроса - будет ли она null-terminated и второй - это аллоцированная строка, которую я могу безопасно использовать дальше, или нет?


Название: Re: Qt binding к языку программирования D.
Отправлено: Rcus от Ноябрь 13, 2008, 17:55
toUtf8() возвращает QByteArray, его метод data() возвращает указатель на внутреннее представление
Цитировать
Returns a pointer to the data stored in the byte array. The pointer can be used to access and modify the bytes that compose the array. The data is '\0'-terminated.
Цитировать
The pointer remains valid as long as the byte array isn't reallocated or destroyed. For read-only access, constData() is faster because it never causes a deep copy to occur.

Проще говоря: да, нет.

Не уверен насчет представления строк в D, но возможно проще будет конвертировать через метод int QString::toWCharArray ( wchar_t * array ) const


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Декабрь 23, 2008, 15:16
Разработка идет размеренным ходом, близок к тому чтобы закончить обертку QObject QCoreApplication и некоторых классов из qt.core. Есть вопрос который хочу задать знатокам Qt - в API Qt есть ли классы кроме потомков QObject для конфигурирования которых используются виртуальные функции. Или это только прерогатива QObject? Какая политика по этому поводу в Qt?


Название: Re: Qt binding к языку программирования D.
Отправлено: Rcus от Декабрь 23, 2008, 13:01
Поясните что значит конфигурирование виртуальными функциями, всмысле изменение поведения потомками путем переопределения виртуальных функций интерфейса класса?
Если так то как минимум классы Graphics View Framework делают это. http://doc.trolltech.com/extras/qt43-class-chart.pdf в помощь


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Февраль 02, 2009, 04:20
Итак появились первые результаты. Работает около 170 классов из пакетов core, gui и opengl(естественно работает то, что протестировано, то есть не так много). Подкреплено некоторым количеством примеров портированных из С++. К сожалению важная часть, сигналы/слоты еще не реализованы, так как у человека который их должен сделать сейчас мало времени. Работает только на linux, так как я им пользуюсь и опять же времени адаптировать систему сборки и т. д. нету пока. Кому интересно - проект здесь: http://code.google.com/p/qtd/


Название: Re: Qt binding к языку программирования D.
Отправлено: ритт от Февраль 02, 2009, 17:32
а разве Qt - это widget toolkit?


Название: Re: Qt binding к языку программирования D.
Отправлено: lit-uriy от Февраль 02, 2009, 18:09
2 Константин, выходит, что widget toolkit, раз уж GUI на первом месте.


Название: Re: Qt binding к языку программирования D.
Отправлено: ритт от Февраль 02, 2009, 18:40
хмм...несколько неверная трактовка на мой взгляд.
я бы сказал, gtk - widget toolkit, т.к. не может использоваться без гуя. а Qt легко и непринуждённо может использоваться и для CLI/CGI, и для демонов...


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Февраль 02, 2009, 18:41
У D есть богатая стандартная библиотека которая на полную использует продвинутые возможности языка. Qt - это фреймворк для С++, для D - это только GUI тулкит. Из Qt меня в первую очередь интересует GUI. SQL, некоторые части QtCore, и так далее для меня на втором месте. Конечно было бы неплохо и все остальное сделать, но я в основном этим один занимаюсь и у меня ограниченные ресурсы для такой громадной вещи как Qt. Виджеты то еще далеко не все закончены.
А сигналы слоты я сам сегодня начну пилить, планирую к концу недели закончить.


Название: Re: Qt binding к языку программирования D.
Отправлено: Tonal от Февраль 03, 2009, 08:31
PyQt делает и поддерживает тоже 1 человек. :)
Причём он поддерживает Qt полностью.
Где-то попадалось интерьвю с ним - он сделал sip - пакет для упрощения привязок C++ Api к python-у. А потом некоторую тулзу, которая автоматом генерит привязки по всему Qt.
Так что ему только остаётся разруливать какие-нибудь редкие сложные места. :)


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Февраль 03, 2009, 10:28
1. Он профессиональный программист, а я нет, и квалификация у меня ниже.
2. Это его источник доходов(не знал что он один, из этого могу предположить что человек он далеко не бедный ;) ) Для меня же - нет.

Биндинги у меня тоже конечно же автоматом генерируются, иначе это было бы мертвое дело  :) там много ручной работы тем не менее. Да и еще некоторые вещи пока не умеют генерироваться(преобразование из Qt контейнеров в D массивы и обратно, к примеру) Было бы свободное время, неделька или две, я бы возможно закончил.


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Февраль 11, 2009, 18:32
Прошу помощи у людей, которые использовали cmake и Qt на Windows с MinGW. Я пытаюсь собрать dll содержащую С++ часть биндинга, то есть по сути это должно мало отличаться от сборки программы использующей Qt.
вот файл CMakeLists.txt:
Код:
PROJECT(qtd CXX C)
cmake_minimum_required(VERSION 2.6)
FIND_PACKAGE(Qt4 REQUIRED)

include_directories(${QT_INCLUDES} include)

INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cpp/qt_core/local.cmake)
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cpp/qt_gui/local.cmake)
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cpp/qt_opengl/local.cmake)
ADD_LIBRARY(qtd_cpp SHARED ${QT_QTD_SRCS} ${QT_CORE_SRCS} ${QT_GUI_SRCS})
TARGET_LINK_LIBRARIES( qtd_cpp ${QT_LIBRARIES} )
Объектники комилируются успешно а вот на стадии линковки вылезают ошибки типа
undefined reference to '_imp___ZN7QWidget14setAcceptDropsEb'
Судя по всему не связывается dll самого Qt. Что здесь не так?


Название: Re: Qt binding к языку программирования D.
Отправлено: lit-uriy от Февраль 11, 2009, 18:37
такое бывает когда dll'ка собрана одним компилятором/РежимомКомпиляции, а программа другим


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Февраль 11, 2009, 18:38
но я использую для компиляции mingw и Qt которые шли вместе с QtCreator.


Название: Re: Qt binding к языку программирования D.
Отправлено: pastor от Февраль 11, 2009, 18:39
В WIKI имеется статью по поводу CMake + Qt - CMake как система сборки для Qt приложений (http://prog.org.ru/wiki/index.php?title=CMake_%D0%BA%D0%B0%D0%BA_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8_%D0%B4%D0%BB%D1%8F_Qt_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9). Возможно в ней вы найдете ответ. Если нет - обратитесь к автору статьи - Dendy


Название: Re: Qt binding к языку программирования D.
Отправлено: Eldar от Февраль 11, 2009, 18:47
спасибо за ответ, там тоже самое. Попробовал собрать исполняемый файл, получилось. Дело значит в том что я компилирую dll, которая использует Qt.