LINUX.ORG.RU

Чем чреват и плох подобный код на практике?

 ,


0

1
extern "C"
{
    QString boo()
    {
        return "9";
    }
}

Да-да, я в курсе, что оно вообще не должно работать, но оно линкуется с эльфом и работает. Вопрос в том, каковы пределы, за которыми реально выстрелы в ногу ещё не начнут происходить? Те подводные камни, которые приходят в голову в первую очередь, не пугают, но может кто ещё интересного что подскажет?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

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

Кт не может то, что делают разработчики на нём уже тысячелетия, потому что это необходимо очень много где и уже довольно давно? Это они так название своего троллтеха оправдывают что ли? Другой причины я просто не вижу.

Я же тебе уже описал - передача фокуса не имеет отношения к куте. Можно сделать какую-то отдельную либу/утилиту на С, которая будет решать проблемы переключения фокуса чужих окон, но в куте ей делать нечего. Есть готовое решение для винда+X11 - https://searchcode.com/codesearch/view/62206251/ , искать VBoxGlobal::activateWindow . Как видишь, этот весь код отношения к куте не имеет, на всю функцию есть единственный вызов функций кути - QX11Info::display().

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

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

но в куте ей делать нечего.

Лок-файл есть? Есть. Гуй? Гуй. Типа кросплатформа? Типа кросплатформа. А с чего бы этой штуке там делать нечего?

это всего-лишь GUI фреймворк

Вот в GUI-фреймворке эта штука просто обязательно быть должна. Или пускай тогда и лок-файл выпиливают. А то некрасиво выходит — взаимодействие-шрёдингера, и есть и нету.

я не понимаю твоих претензий

Неосиляторы из троллтеха и их защитники меня не радуют, уж прости. А должны?

И это только вершина айсберга. Просто Кт только для статики годиться. Разметки нормальной нет. Тостов нет. Поповер, поробуй сделай — геморой один. Доки слабые, всё только на практике. Тот же Кт цсс — опять всё на практике. Про стили в одном месте, про половину из которых там не прочтёшь. Про то, что после смены свойства нужно унполишь/полишь — в другом. И всё только для того, чтобы энд-юзер купил поддержку, а не искал почему всё не так часами. Лист оф виджетс — вообще отдельная тема. С любой мелочи возни до кучи. Шаг в сторону — геморроя ворох. Не говрю уже про радиобаттон, который при переключении вкладки, когда обе вкладки в одной баттонгрупп, запоздало отключается. Т.е. даже как рисовалка она так себе.

Собственно его ниочёмность и есть причина порождения всяких электронов. Ах ну да, зато есть мок, который этот весь геморой потом так хорошо пакует в небольшой бинарь, если купил лицензию. Если не купил, то ещё 100500 dll тащить, что будут жрать памяти как тот электрон.

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

Лок-файл есть? Есть. Гуй? Гуй. Типа кросплатформа? Типа кросплатформа. А с чего бы этой штуке там делать нечего?

Да, действительно, помимо чистого гуя они добавили некоторый набор кроссплатформенных функций, которые расположены недалеко от гуя. Какие-то добавили, какие-то не добавили. Лок файл выглядит достаточно сомнительно, на самом деле, поскольку в никсах он использует advisory-lock, то есть, другие программы тоже должны были вызывать flock, иначе файл окажется никак не заблокированным.

Вот в GUI-фреймворке эта штука просто обязательно быть должна. Или пускай тогда и лок-файл выпиливают. А то некрасиво выходит — взаимодействие-шрёдингера, и есть и нету.

Как ты собрался кроссплатформенно сделать переключение фокуса на айфоне и андроиде? Как это сделать с контейнерами аля WinRT? У них на WinRT QLockFile неполноценно работает, между прочим, так что про локи вопрос вполне актуален. С активацией чужого окна платформоспецифичных заморочек еще больше, более того - в нем нет ничего не специфичного для платформы, потому они даже не пытались эту функцию реализовать.

Просто Кт только для статики годиться. Разметки нормальной нет.

Графический дизайнер делается для даунов. Пацаны на районе создают окошки текстом. Это я пишу как человек, который много лет назад сам разрабатывал glade и anjuta.

Тостов нет.

Непереносимо.

Поповер, поробуй сделай — геморой один

Актуальная проблема: https://bugreports.qt.io/browse/QTBUG-61607

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

Ты хочешь сказать, что ты еще и не покупал поддержку? А чему ты возмущаешься тогда? Эмбаркадеро, вон, сорцы стандартных библиотек только за бабло дает - а у тебя сорцы сразу бесплатные. Непонятно - смотри сорцы.

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

Ну это точно уже гвоздь в крышку гроба.

Собственно его ниочёмность и есть причина порождения всяких электронов.

У электрона противоположная проблема - принципиальная неспособность взаимодействовать с деталями конкретной платформы. Отдать фокус окну неэлектрона ты не можешь.

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

Не понимаю, при том тут мок. Статическое линкование допустимо по лицензии только если ты готов предоставить сорцы своего поделия. Пиши опенсорс, и будешь счастлив.

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

как на твоей кроссплатформе бринг-ту-топнуть окно уже запущенного инстанца, при запуске второй копии

Я так понимаю, в Лазарусе есть способ сделать это кроссплатформенно? Можно пример кода?

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

Ну давай расскажи мне как на твоей кроссплатформе бринг-ту-топнуть окно уже запущенного инстанца, при запуске второй копии.

Можно более подробно: что-то сделать???

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

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

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

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

Ты до сих пор не догнал, что никакой фокус передавать не надо а просто разрешить только один инстанц того же самого, Карл, приложения с опциональным показом окна уже запущенного инстанца. Это не надо переносить на Андроид — там и так так. И вообще, по-товоему что, вся кт совместима между мобильной и десктопной средой? Ну давай покажи ка окно без кнопки минимайз в андроиде, лол. Это у тебя от кт такой «необычный» взгляд на вещи?

Статическое линкование допустимо по лицензии только если ты готов предоставить сорцы своего поделия.

Лицензия не запрещает статическую линковку для приложений с закрытым кодом. Просто троллотехи об этом тактично умалчивают (врут) отчего у конечных пользователей имеется устойчивое заблуждение на этот счёт.

Пиши опенсорс, и будешь счастлив.

Говорю же — сиплюсаторы точно все из нарнии.

Ну это точно уже гвоздь в крышку гроба.

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

А чему ты возмущаешься тогда?

А я не возмущаюсь. Я называю говно говном. В этом нет ни капли возмущения. Просто реальность.

И не нужно врать, что тосьы не переносимы. Показать текст в пределах окна н-времени. Это та же всплывающая подсказка только без привязки.

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

подите, обновите, фирме-клиенту весь парк компов, раз у вас жопа настолько горит, что вы x86 ПК деревянными счётами называете

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

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

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

Я так понимаю, в Лазарусе есть способ сделать это кроссплатформенно? Можно пример кода?

Через компонент. Google: Lazarus UniqueInstance.

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

Ты до сих пор не догнал, что никакой фокус передавать не надо а просто разрешить только один инстанц того же самого.

Давай без маневров, пожалуйста. Исходная фраза была: «Ну давай расскажи мне как на твоей кроссплатформе бринг-ту-топнуть окно уже запущенного инстанца, при запуске второй копии. Давай. Жду.». Просто запретить второму экземпляру запускаться можно через создание именованного объекта ОС-и, будь то файл, мутекс, или что еще - QSharedMemory, например. Но переключение фокуса на другое приложение - это совсем другая, весьма сложная задача. Не все платформы вообще позволяют лазить к другим приложениям.

И вообще, по-товоему что, вся кт совместима между мобильной и десктопной средой? Ну давай покажи ка окно без кнопки минимайз в андроиде, лол. Это у тебя от кт такой «необычный» взгляд на вещи?

Фундаментальные модули и треть адонов поддерживаются на всех платформах. Естественно, целый ряд модулей специфичны для одной или нескольких платформ.
https://doc.qt.io/qt-5/qtmodules.html

Лицензия не запрещает статическую линковку для приложений с закрытым кодом. Просто троллотехи об этом тактично умалчивают (врут) отчего у конечных пользователей имеется устойчивое заблуждение на этот счёт.

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

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

Это популярная у разрабов ситуация, которая объясняется как «проблема слишком незначительна, а трудоемкость ее устранения слишком велика, чтобы париться о ней». Я сам люблю именно такие баги устранять, но прекрасно представляю, сколько придется угрохать времени на изучение исходников и поиск минимального пути решения. Я работал с AlphaControls, в котором при определенных условиях перерисовка вообще не производилась, и разрабы от версии к версии ничего с этим не делали - вот это реально руки из попы.

И не нужно врать, что тосьы не переносимы. Показать текст в пределах окна н-времени. Это та же всплывающая подсказка только без привязки.

Сделать свои собственные тосты можно, но зачем? Получится хуже родных. Для тоста обязательно аппаратное ускорение, иначе будет серьезная нагрузка на процессор, которая сводит на нет неблокирующую суть тоста - это автоматически значит серьезную платформозависимость. В куте JNI есть, можно через него тосты на андроиде показывать.

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

Я так понимаю, в Лазарусе есть способ сделать это кроссплатформенно? Можно пример кода?

Через компонент. Google: Lazarus UniqueInstance.

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

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

Ну так никто не мешает отловить сообщение и обработать. В кт есть такое? Троллтехи на своём форуме писали, типа, используйте системные средства.

anonymous
()
Ответ на: комментарий от LINUX-ORG-RU

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

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

Ну так никто не мешает отловить сообщение и обработать. В кт есть такое? Троллтехи на своём форуме писали, типа, используйте системные средства.

Толку ловить сообщение, если ни в X11, ни в винде не нужно его посылать, потому что перевод фокуса делается вторым запущенным экземпляром незаметно для первого? В UniqueInstance вносится бессмысленная сложность в виде IPC, но элементарный именованный QSharedMemory, хранящий дескриптор окна, позволяет обнаружить первый запущенный экземпляр одним системным вызовом, и этим же вызовом сразу прочитать дескриптор окна, которое нужно активировать. Весь функционал очень прост, но очень зависим от окружения, потому нет смысла его включать в кутю в законченном виде.

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

Весь функционал очень прост, потому нет смысла его включать в кутю в законченном виде.

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

но очень зависим от окружения

Так просто или нет, ты уже определись.

В UniqueInstance вносится бессмысленная сложность

Мне без разницы, есть проблема и есть решение. Всё. Остальное пусть сиплюсаторы и защщитники кт-говна там обдумывают в своих низкоуровневых мозгах, почему они не могут.

но элементарный именованный QSharedMemory, хранящий дескриптор окна, позволяет обнаружить первый запущенный экземпляр одним системным вызовом

Т.е. сторонними средствами, а не средствами Кт я правильно понял? Опять не кросплатформа. И говно.

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

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

из тех, что я использую постоянно на десктопе, ни одно не запрещает копии себя

так что, отучаемся говорить за всех

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

А на чем пишете кроссплатформенный GUI вы?

Электрон, Лазарус, и Кутэ тоже. Если бы я это решал, то я бы и платил сам себе. А значит мне не нужно было бы работать, потому что у меня уже было бы достаточно денег и я бы вообще не лез в гуи ПО да ещё и кросплатформенный.

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

так что, отучаемся говорить за всех

Да ты просто врушка.

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

И, кстати, что ты там за фигню нёс про парк компов. Если у фирмы парк компов, то и ПО там тоже парковое и кроссплатформа там нафиг никому не упала — лишние траты и лишний геморрой. Ты я так понимаю совсем не в теме. Кроссплатформа делается только для т.н. широкой аудитории. И в основном это поделки уровня пердящей кошки.

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

кроссплатформа там нафиг никому не упала

кроссплатформа не особо упала, но упал Linux, а вариантов кроме Qt под онтоп не так много

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

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

И что? Все разрабы приложений, которыми ты пользуешься, ноют о том, что не получилось на две платформы сделать запуск одного экземпляра? Ты можешь сложить 2+2 кроссплатформенно, но этой функции нечего делать в куте, потому что здесь не от чего абстрагироваться.

но очень зависим от окружения

Так просто или нет, ты уже определись.

Просто и очень зависимо от окружения. Я уже писал об этом.

Мне без разницы, есть проблема и есть решение. Всё. Остальное пусть сиплюсаторы и защщитники кт-говна там обдумывают в своих низкоуровневых мозгах, почему они не могут.

В UniqueInstance решения не больше, чем в куте. То есть, его там почти нет.

но элементарный именованный QSharedMemory, хранящий дескриптор окна, позволяет обнаружить первый запущенный экземпляр одним системным вызовом

Т.е. сторонними средствами, а не средствами Кт я правильно понял? Опять не кросплатформа. И говно.

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

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

Так ты говоришь, что кт (фекальная масса) настолько кросплатформенный, что надо 100500 платформ изучить, чтобы заработало? И при этом обсираешь и Лазарус и Электрон, в которых это из коробки? А попытки рассказать тебе, что ты нелогичный фекаловоспеватель с искажённым и односторонним взглядом на вещи переводишь во вскукореки про носиляторство? И при этом ещё нагло врёшь, что элементарщина, по твоим же собственным словам, настолько сложна, что даже не нужен IPC и всего один сисколл, но троллтехи в своём говнокт этого не смогли осилить? А их последователи хавают и воспевают это говно и ещё защищают как своё тёплое? Что-то ты бугристо стелишь...

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

:D Не, ну в качестве экспериментов это даже интересно и весело, а вот на практике да встретить такое будет грустно. Оно на таком примере всё понято, массив байт он и везде массив хоть Qstring его называй хоть как тут спасает обычный typedef, а вот может ли кто гарантировать что в одном месте одно, а в другом это уже перегруженная хрень где это уже не массив байт, а указатель на структуру (то-есть типа класс плюсовый) которая содержит указатель на перегружаемую функцию которая возвращает уже указатель на массив байт.

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

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от anonymous

Так ты говоришь, что кт (фекальная масса) настолько кросплатформенный, что надо 100500 платформ изучить, чтобы заработало?

Мне кажется, что ты путаешь кроссплатформенность и всемогущесть.
«Кросс-платформенность или межплатформенность — способность программного обеспечения работать с двумя и более аппаратными платформами и (или) операционными системами»

И при этом обсираешь и Лазарус и Электрон, в которых это из коробки?

Ничерта там нет из коробки.

даже не нужен IPC и всего один сисколл, но троллтехи в своём говнокт этого не смогли осилить?

Да, и для сложения двух целых чисел не нужно делать иерархию классов в Qt, прикинь.

byko3y ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.