LINUX.ORG.RU

существует ли стабильный ABI для Qt?

 ,


2

4

Хотелось бы иметь какую-то штуку для обращения из скриптовых языков, чтобы не тащить при этом компилятор.

Когда-то был qt-c. Потом был cpp-кусок от qtjambi. Вроде тоже помер. Сейчас смотрю, что в PyQt свой мегавелосипед (SIP — интерфейс из питона к C++), PerlQt — закончился в 2003 году, RubyQt — требует развернуть mingw.

Qt теперь снова только для С++ (и Python)?

★★★★★
Ответ на: комментарий от monk

Для использования библиотеки нужны биндинги, а сделать их для Qt - дело сложное,

На самом деле не очень сложное (не сложнее, чем написать привязку к GObjectIntrospection)

Ну, несложное так несложное. Напиши свои, будь мужиком.

Основная проблема — отсутствие стандартного C API к этому метаклассу

Думаю, тебе будет несложно написать и библиотеку C++ FFI. Стандартную, кроссплатформенную.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Напиши свои, будь мужиком.

Придумаю, как не тащить C++ компилятор в составе биндинга — напишу.

Думаю, тебе будет несложно написать и библиотеку C++ FFI. Стандартную, кроссплатформенную.

Гы... Making it the hard way... Хотя можно поковырять. Если MSVC в своих dll поддерживает стандарт на name mangling, то это даже реализуемо.

monk ★★★★★
() автор топика
Ответ на: комментарий от monk

А для C++ при каждой компиляции имена создаются как компилятору захочется.

починил

MyTrooName ★★★★★
()
Ответ на: комментарий от EXL

Разве приложения, написанные в Borland не могли дергать нужные функции из библиотек MS VS? И обратно?

не могли. и даже разные версии msvs (точнее, программы скомпиленные ими) не могли, и не могут, дергать функции/классы из C++ библиотек, слинкованных с разными версиями MSVCRT. но вот насчет ABI не уверен. возможно, его уже между версиями MSVC устаканили.

для C в общем случае проблем нет, и не было, за исключением редких случаев, когда библиотека отдает указатель на память, которую вызывающий код должен освобождать через free, а libc другой.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от monk

Придумаю, как не тащить C++ компилятор в составе биндинга — напишу.

Вот для этого и нужна кросс-платформенная библиотека C++ FFI.

Если MSVC в своих dll поддерживает стандарт на name mangling, то это даже реализуемо.

Реализуемо, конечно. Но не теми, кто считает манглинг самой большой проблемой.

tailgunner ★★★★★
()
Ответ на: комментарий от waker

надо было слушать противоположную сторону.

а что говорила противоположная сторона? GTK никакой на OS X и Win, а больше, кроме *nix ничего и не умеет, да и даже, если говорить про Linux, тут он не может выглядеть нативно в самой популярной DE (KDE), не может выглядеть нативно без патчей в дефолтной DE для самого популярного дистрибутива (Ubuntu), имеет гораздо меньше возможностей чем Qt, а если ты переживаешь про bindings к разным ЯП, то пользователям PyQt, QtD и пр. все-равно что это потребовало больших усилий чем для GTK, так какие преимущества есть у GTK?

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от wota

а что говорила противоположная сторона?

противоположное мнение :)

так какие преимущества есть у GTK?

кто сказал «GTK»?

а, да, и правда было. ну вобщем, видимо противоположная сторона говорила, что Qt не _во всем_ лучше, чем GTK :)

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Но не теми, кто считает манглинг самой большой проблемой.

http://www.haskell.org/haskellwiki/CPlusPlus_from_Haskell

Проблемы всего две

1. mangling

foreign import ccall "_ZN11QPushButtonC1ERK7QStringP7QWidgetPKc" qpushbutton :: (Ptr QPushButton) -> (Ptr QString) -> (Ptr ()) -> Int -> IO ()

2. Размер объекта

qpushButtonSize = 140

Размер можно обойти, если не использовать new. Например

Meta = QPushButton::staticMetaObject
Object = Meta.newInstance()

monk ★★★★★
() автор топика
Ответ на: комментарий от waker

кто сказал «GTK»?

monk> мне пытались доказать, что Qt во всём лучше, чем GTK.
waker> надо было слушать противоположную сторону.

wota ★★
()
Ответ на: комментарий от waker

видимо противоположная сторона говорила, что Qt не _во всем_ лучше, чем GTK :)

ок, а кто говорил, что во всем? ;)

wota ★★
()
Ответ на: комментарий от wota

теперь полный развернутый ответ:

GTK никакой на OS X и Win

это смотря как его готовить. посмотри, например, на xamarin studio.

если говорить про Linux, тут он не может выглядеть нативно в самой популярной DE (KDE)

притянуто за уши. в линуксе нет нативного гуя, т.к. зоопарк.

имеет гораздо меньше возможностей чем Qt

это бесспорно

а если ты переживаешь про bindings к разным ЯП

ну мне нужен только байндинг к языку C, и в него Qt как раз не умеет.

так какие преимущества есть у GTK?

все те же — стабильность. можно собрать прогу с GTK2.0, и она будет работать с рантаймом 2.24. а потом можно поправить 20 строчек, и пересобрать под GTK3. в Qt о таком можно только мечтать.

waker ★★★★★
()
Ответ на: комментарий от anonymous

Ты же вроде и от qt и от gtk для своего плеера был не в восторге. Что рекомендуешь?

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

waker ★★★★★
()
Ответ на: комментарий от waker

это смотря как его готовить. посмотри, например, на xamarin studio.

http://cdn.arstechnica.net/wp-content/uploads/2013/02/xamarin-studio-editor.png

нативней некуда

в линуксе нет нативного гуя, т.к. зоопарк.

но есть самое популярное DE и дистрибутив

ну мне нужен только байндинг к языку C

гораздо удобней написать морду на С++ и дергать сишные функции, если только нет религиозных предпочтений

все те же — стабильность. можно собрать прогу с GTK2.0, и она будет работать с рантаймом 2.24

собираю против Qt 5.2.1, работает с Qt 5.0.2

а потом можно поправить 20 строчек, и пересобрать под GTK3. в Qt о таком можно только мечтать.

после Qt3 (для которого кстати есть Qt3Support) в Qt4/Qt5 в большинстве случаев даже не придется править те самые 20 строчек

wota ★★
()
Ответ на: комментарий от wota

GTK никакой на OS X и Win

Ну почему никакой? Такой же как и на Linux. http://www.gtk.org/images/screenshots/screenshot-gnumeric-windows.png

И это более ожидаемо, чем когда TreeView в том же окне показывает одну колонку вместо трйх http://qt-project.org/doc/qt-5/qtreeview.html (сравни Макинтош и Fusion).

имеет гораздо меньше возможностей чем Qt

Как по имени в строке создать объект класса в Qt? Как в одну колонку treeview сделать строку + картинку (две колонки модели)?

пользователям PyQt, QtD и пр. все-равно что это потребовало больших усилий чем для GTK

Для Qt5 остался только PyQt. У всех остальных GTK3 есть (через GObjectIntrospection), а Qt5 — нет.

monk ★★★★★
() автор топика
Ответ на: комментарий от waker

тс: «мне пытались доказать, что Qt во всём лучше, чем GTK.»

и дал ссылку на мой пост, где я этого не писал

wota ★★
()
Ответ на: комментарий от wota

гораздо удобней написать морду на С++ и дергать сишные функции

Особенно, если вся остальная программа написана на C#/Java/Haskell/etc... Издеваешься?

Или серьёзно считаешь, что C++ — единственный язык, на котром следует писать все программы?

monk ★★★★★
() автор топика
Ответ на: комментарий от monk

http://www.haskell.org/haskellwiki/CPlusPlus_from_Haskell

«The information on this page is pretty spotty and probably wrong in places»

Написано это 7 лет назад. Ценный источник информации.

Проблемы всего две
1. mangling
2. Размер объекта

А вызов виртуальной функции и обработка исключений - это легко, да.

tailgunner ★★★★★
()
Ответ на: комментарий от wota

нативней некуда

я отвечал на «GTK никакой на OS X и Win», про нативность речи не шло. в венде все приложения выглядят как хотят.

но есть самое популярное DE и дистрибутив

unity и ubuntu. которые напополам применяют qt (unity) и gtk (все остальное).

гораздо удобней написать морду на С++ и дергать сишные функции, если только нет религиозных предпочтений

предпочтения сугубо практические. и мне нихрена не удобнее писать что либо на C++.

собираю против Qt 5.2.1, работает с Qt 5.0.2

попробуй собрать на 5.0, и запустить на 5.1

после Qt3 (для которого кстати есть Qt3Support) в Qt4/Qt5 в большинстве случаев даже не придется править те самые 20 строчек

то-то куча проектов на Qt умерла, или так и осталась на Qt3, т.к. авторы ниасилили пересобрать.

waker ★★★★★
()
Ответ на: комментарий от wota

и дал ссылку на мой пост, где я этого не писал

где ссылка на твой пост?

waker ★★★★★
()
Ответ на: комментарий от monk

Такой же как и на Linux.

шрифты без сглаживания (в заголовке окна оно есть), «чужие» комбобоксы и заголовки таблицы

Как по имени в строке создать объект класса в Qt?

http://qt-project.org/doc/qt-5/qmetatype.html

Как в одну колонку treeview сделать строку + картинку (две колонки модели)?

http://qt-project.org/doc/qt-5/QItemDelegate.html

Для Qt5 остался только PyQt

Qt5 вышло почти на два года позже чем GTK3, и еще не успело стать дефолтным

wota ★★
()
Ответ на: комментарий от monk

Особенно, если вся остальная программа написана на C#/Java/Haskell/etc... Издеваешься?

а накуя тебе байндинг к С в таком случае? waker пишет на С - ему он нужен, а тебе зачем?

Или серьёзно считаешь, что C++ — единственный язык, на котром следует писать все программы?

наоборот - считаю, что надо использовать разные ЯП

wota ★★
()
Ответ на: комментарий от waker

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

Хочу написать музыкальный плеер, под венду и линукс. Умею жабу, ц и кресты. Гуй не умею, только немного свинга. Стою перед выбором, что учить, кьют или гтк. Ну или вообще их не учить, а делать на чём-то другом.

anonymous
()
Ответ на: комментарий от waker

«GTK никакой на OS X и Win», про нативность речи не шло. в венде все приложения выглядят как хотят

я б поспорил про венду, но ладно - на маке то стиль один, и там, даже потратив уйму времени под закос, нативности нет:

http://docs.xamarin.com/guides/android/getting_started/installation/mac/Image...

Unity и ubuntu. которые напополам применяют qt (unity) и gtk (все остальное).

KDE и Ubuntu, и да - в Qt приняли патчи, а в GTK написали свой, ни с чем несовместимый велосипед

попробуй собрать на 5.0, и запустить на 5.1

попробовал (только 5.2) - нет проблем

то-то куча проектов на Qt умерла

на GTK тоже, если проект действительно был нужен, а не загибался, его портировали

wota ★★
()
Ответ на: комментарий от anonymous

под венду и линукс

с qt будет меньше геморроя.

waker ★★★★★
()
Ответ на: комментарий от wota

на маке то стиль один

нет, на маке тоже приложения, в большинстве, выглядят как хотят. то светлые, то темные, то разноцветные, то старая aqua, то новая, то carbon, то закос под что-то из них.

нативности нет:

ответ тот же самый. выглядит вполне пристойно.

KDE и Ubuntu

пруф?

в Qt приняли патчи, а в GTK написали свой, ни с чем несовместимый велосипед

о каком велосипеде речь?

попробовал (только 5.2) - нет проблем

видимо, ты просто не использовал те API, которые сломали в 5.1 (на лоре обсуждали это когда-то, щас уже врядли найду линк).

на GTK тоже, если проект действительно был нужен, а не загибался, его портировали

примеры?

waker ★★★★★
()
Ответ на: комментарий от waker

на маке тоже приложения, в большинстве, выглядят как хотят

вот как раз на маке сидят самые гуи-фашисты

ответ тот же самый. выглядит вполне пристойно.

окай.жипег

пруф?

http://www.linux-magazine.com/Online/Blogs/Off-the-Beat-Bruce-Byfield-s-Blog/...

на ЛОР аналогично - в последних голосованиях Ubuntu и KDE самые популярные

о каком велосипеде речь?

https://developer.gnome.org/gtk3/stable/GtkApplication.html#gtk-application-s...

кстати ЕМНИП в первых версиях оно было костыльным, сейчас сделали правильно

примеры?

rox, stardict, xara-gtk, tuxcmd и еще сотни пакетов «мусора» из debian universe (можно посмотреть через apt-cache showpkg libgtk2.0-0)

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от wota

вот как раз на маке сидят самые гуи-фашисты

т.е. мак ты видел только на картинках с apple.com

http://www.linux-magazine.com/Online/Blogs/Off-the-Beat-Bruce-Byfield-s-Blog/...

а остальные 64% на чем сидят?

https://developer.gnome.org/gtk3/stable/GtkApplication.html#gtk-application-s...

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

rox, stardict, xara-gtk, tuxcmd и еще сотни пакетов «мусора» из debian universe

ну rox умер потому что он нафиг никому не здался. остальные программы я никогда не видел вообще. это примеры чего, сложности портирования на gtk3? 2005й год (последняя новость на сайте rox) — это было задолго до gtk3.

а на qt загнулось реально немало интересных проектов. например, basket. да вообще про несколько проектов были новости в течение последнего года, что в одном разработчик просто послал всех, т.к. ему надоело переписывать. в другом просто ниасилил. и т.п. разве не так? но, по правде сказать, причина в основном в kdelibs была, а не в самом qt. но на чистом qt под линух полезных программ почти и нету.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от wota

оф. дока

ну значит в доке скрин многолетней давности. запусти свежую версию глянь.

waker ★★★★★
()
Ответ на: комментарий от wota

программа написана на C#/Java/Haskell/etc

а накуя тебе байндинг к С в таком случае?

Затем, что любой язык может вызвать функцию из C, а для интерфейса с C++ приходится очень сильно извращаться.

monk ★★★★★
() автор топика
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от waker

т.е. мак ты видел только на картинках с apple.com

если тебе так удобно считать - считай

а остальные 64% на чем сидят?

на всем остальном ес-но

что-то не стыкуется. сам сказал что в убунте какой-то несовместимый велосипед сделали

в GTK, а не убунте, там appmenu раньше появился

ну rox умер потому что он нафиг никому не здался. остальные программы я никогда не видел вообще
а на qt загнулось реально немало интересных проектов. например, basket.

никогда не видел basket, например, это можно считать таким же аргументом, как у тебя?

на чистом qt под линух полезных программ почти и нету

virtualbox-gui, skype, vlc, lyx, unixodbc (гуй на Qt), psi, smplayer, qutim, qcad etc., а так - да, пользуюсь KDE-софтом в основном, причем не из под плазмы

wota ★★
()
Ответ на: комментарий от monk

Затем, что любой язык может вызвать функцию из C, а для интерфейса с C++ приходится очень сильно извращаться.

ну ты ж не будешь из Python, например, дергать «функцию из C» для Qt, это будет геморрой, в любом случае нужна более высокоуровневая обертка

wota ★★
()
Ответ на: комментарий от EXL

Разве приложения, написанные в Borland не могли дергать нужные функции из библиотек MS VS? И обратно?

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

google://Соглашение_о_вызове

Достаточно заострить внимание на stcall и cdecl, если мы говорим об оффтопике.

Pinkbyte ★★★★★
()
Ответ на: комментарий от wota

на всем остальном ес-но

и по какой системе счисления у тебя получилось, что кде самая популярная оболочка?

никогда не видел basket, например, это можно считать таким же аргументом, как у тебя?

нельзя. потому что, в отличие от твоих, примеров, basket была реально популярная и полезная программа. просто ты ее не застал, видимо.

virtualbox-gui, skype, vlc, lyx, unixodbc (гуй на Qt), psi, smplayer, qutim, qcad etc., а так - да, пользуюсь KDE-софтом в основном, причем не из под плазмы

из них реально полезные только 1е 3 + немножко psi. причем psi до сих пор по сути на qt3 через какой-то враппер для qt4.

waker ★★★★★
()
Ответ на: комментарий от waker

это бесспорно

Хочу заметить, что GTK - это графический тулкит, а Qt - фрэймворк. Так что сравнение немного некорректно.

Pinkbyte ★★★★★
()
Ответ на: комментарий от waker

и по какой системе счисления у тебя получилось, что кде самая популярная оболочка?

а ты считаешь, что остальные оболочки - это одна единственная?

нельзя. потому что, в отличие от твоих, примеров, basket была реально популярная и полезная программа. просто ты ее не застал, видимо.

а lxde была полезная?

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от waker

то-то куча проектов на Qt умерла, или так и осталась на Qt3, т.к. авторы ниасилили пересобрать.

Справедливости ради - дохлые проекты на Gtk1/Gtk2 тоже существуют. Не ну а чо - если мы ударились в историю, нехай и волосатые времена вспомним :-)

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от tailgunner

А почему в прошедшем времени?

lxde на GTK умерла, на Qt еще не родилась

wota ★★
()
Ответ на: комментарий от wota

после Qt3 (для которого кстати есть Qt3Support) в Qt4/Qt5 в большинстве случаев даже не придется править те самые 20 строчек

Тут вы не правы - вам придется как минимум переделать все инклуды для гуя. (+ выпиливать TextCodec, если вы его использовали) Как показывает мой опыт - придется чуток править автоматически сгенерированые (если речь о QtCreator) файлы виджетов, ибо там всюду используется TextCodec.

RiseOfDeath ★★★★
()
Ответ на: комментарий от RiseOfDeath

Тут вы не правы - вам придется как минимум переделать все инклуды для гуя.

это если явно писался <QtGui/...>, а не <QPushButton> например

+ выпиливать TextCodec, если вы его использовали

использовал QTextCodec с Qt4 и использую с Qt5, ничего не правил, что именно поменялось?

wota ★★
()

За критику QT на этом(лор) ресурсе банят по ИП.

Я тоже недавно интересовался существуют ли рабочие версии QT...после пятистраничной дисскуссии получил бан по ИП от местной илитки.

anonymous
()
Ответ на: комментарий от wota

Точно не помню - надо пример посмотреть, а его под рукой нет. Но лично столкнулся с тем. что пришлось все формы в своем «ХелоуВорде» перепиливать (там работы на 10 минут. Мелочь, а не приятно).

это если явно писался <QtGui/...>, а не <QPushButton> например

Так в пятом теперь как раз и надо <QWidgets/QPushButton>, или я что-то путаю?

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 1)
Ответ на: комментарий от wota

К стати, на счет кодека - он вроде бы больше и не нужен. И виджеты придется правиться. Вот пруф . Конкретно раздел «QCoreApplication::UnicodeUTF8 is deprecated»

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.