Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/37: Рейтинг темы: голосов - 37, средняя оценка - 4.89
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9

Делаю GUI на Haskell

01.04.2017, 00:07. Показов 8266. Ответов 77
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам

Предпосылки
Нормального, кроссплатформенного, графического интерфейса в настоящий момент для Haskell нет. Имеющиеся обёртки к сишным либам (GTK+, WxWidgets) оставляют желать лучшего, мягко говоря. С каждой новой версией и сишной библиотеки, и обёртки вылезают баги их совместимости. Особенно это заметно под Windows, т.к. под этой ОС авторы обёрток не привыкли их проверять. Проблемы кросс-языковой совместимости, в принципе, это проблемы человеческого фактора. Но они реально достают.
Выбор
И так, я стал выбирать как можно более низкоуровневую кроссплатформенную библиотеку с тем, что бы она наименее мешалась, а практический весь GUI реализовать на Haskell. Такой подход, как я предполагаю, максимально снизит «обёрточные» проблемы, или, если угодно, они будут сосредоточены в одном Haskell пакете (или нескольких взаимосвязанных) где фиксить их будет куда проще. Кроме того, разработка новых компонент GUI-я, так же будет происходить в рамках одного языка, что, очевидно, удобнее.
Из рассматриваемых кандидатов я отклонил OpenGL как очень избыточную для целей обычного (2D) интерфейса. К тому же она медленна под Windows.
От использования браузера через JavaScript я отказался на основании некоторых, накладываемых на такой интерфейс ограничений.
Выбор я остановил на библиотеке SDL2. И, хотя это мультимедийная библиотека, якобы заточенная под геймдев, мне в ней понравился простой API для работы с окнами, мышью и клавиатурой. Под винду она использует DirectX (хотя может и OpenGL), под другие ОС только OpenGL. Допускается создание любого числа окон операционной системы, получение сообщений от устройств ввода через очередь сообщений. Возможность создавать свои сообщения (нужны для обновления интерфейса из потоков), возможность работать с весьма ограниченным набором примитивов и текстурами. Рендеринг текста и загрузка изображений из многих графических форматов реализована сопутствующими сишными библиотеками SDL_ttf и SDL2_image. В принципе, возможно подключить более «навороченную» библиотеку cairo в качестве дополнения, Haskell обёртки к которой есть, при чём даже специально к SDL, но я пока cairo в сам проектируемый GUI не заложил. Для GUI хватает и графических примитивов SDL2.


Упрощённо иерархия выглядит так.


Нудное описание
Базовый слой GUI поддерживает дерево Widget-ов общего назначения. Алгоритмы последовательности их отрисовки, доставку событий (в виде вызовов функций Widget-а) от мыши и клавиатуры, учёт наложений, скроллирования, взаимодействия между окнами приложения и прочие «общие» моменты. Базовый Widget представляет собой фиксированную запись с полями – свойствами Widget-а и набором полей – функций, создаваемых, предположительно, только при (даже перед) созданием самого виджета. Набор функций напоминает набор обработчиков событий в распространённых, ООП-ешных GUI. Конкретные виджеты (виджеты компоновок – layout-ы, надписи, кнопки и пр. представляют собой (на уровне данных) объединение в одном типе типа базового виджета и типа уникального для конкретного виджета. Т.е. данные описывающие более высокоуровневые виджеты имеют в качестве одного из полей запись виджета более низкоуровневого. Базовый виджет всегда хранится по ссылке (IORef). Так же, через
IORef он доступен в дереве виджетов базового слоя.
В известном чате мне советовали использовать FRP, но если посмотреть исходники FRP пакетов, то внутри там IORef-ы и есть. Пока воздержусь от использования в GUI. Может потом поумнею? (хм... куда уж там).
Про исходники (нет, я не копира...)
Исходники, к сожалению, я пока не готов выложить по следующим причинам:

- Ещё мало чего можно показать. Не хотелось бы что бы скачали, посмотрели и сказали «фи, опять какая то недоделка». Да, пока весьма недоделка, даже на базовом уровне по которой надо ходить опасно.

Вторая причина – нет комментариев. Да, надо бы их сразу писать, я знаю. Но я себе установил для начального этапа некоторые сроки, а дело двигается медленно, и времени нет, и редизайнил уже много раз.
Так что, как только хоть что то будет – так сразу.
Ну и зачем?
Зачем я это делаю? Ну, во первых «Мужик что бык: втемяшится В башку какая блажь — Колом ее оттудова
Не выбьешь» (с) Н. А. Некрасов. Потом, это, потенциально бесконечная работа. Если (а что крайне врят ли) кто не подключится, она меня переживёт. Чем то этот момент меня привлекает. (Видимо, тоже весеннее обострение. Кодить начал, аккурат 1 марта, хотя задумывался об этом давно).

Что бы было хоть ну на что то посмотреть приведу код (без import-ов) которым создаётся верхняя картинка.
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
mkExampleWidgetHelloWorld :: WidgetInit SimpleWidget
mkExampleWidgetHelloWorld = mkSimpleWidget (WidgetMarginXY 20 10) $ defNoChildrenFns{
        onCreate = (\widget -> notifyParentOnSizeChangedAndMarkForRedraw widget $ V2 0 80)
        ,onDraw=drawFn}
    where drawFn widget canvas = do
                canvasRect <- getCanvasRect widget
                setColor canvas $ V4 0 0 255 0
                fillRect canvas canvasRect
                setColor canvas $ V4 255 0 0 0
                drawRect canvas $ shrinkRect' 5 canvasRect
                fnt <- getFont canvas ""
                drawStrAligned canvas fnt AlignCenter DrawStrFine (V4 255 255 255 0) canvasRect 
                                             "Привет, мир!"
 
mkExampleWidgetPicture :: WidgetInit SimpleWidget
mkExampleWidgetPicture = mkSimpleWidget (WidgetMarginXY 20 10) $ defNoChildrenFns{
        onCreate = (\widget -> notifyParentOnSizeChangedAndMarkForRedraw widget $ V2 0 160)
        ,onDraw=(\widget canvas -> do
                    canvasRect <- getCanvasRect widget
                    drawStretchedTextureR canvas "snapshot_00.41.57.jpg" Nothing canvasRect
                )}
 
mkExampleTextGrid :: WidgetInit SimpleWidget
mkExampleTextGrid = mkSimpleWidget (WidgetMarginXY 20 10) $ defNoChildrenFns{
        onCreate = (\widget -> notifyParentOnSizeChangedAndMarkForRedraw widget $ V2 0 (-1))
        ,onDraw=drawFn}
  where drawFn widget canvas = do
            canvasRect@(   SDL.Rectangle (P (V2 l t)) (V2 w h)) <- getCanvasRect widget
            setColor canvas $ grayColor 200
            fillRect canvas canvasRect
            fnt <- getFont canvas ""
            let dx = 30
                dy = 20
                txtColor = (V4 0 100 0 0)
                txtFill r y =
                    let txtRow c x = when (x < w) $ do
                                drawStr canvas fnt txtColor (P (V2 x y)) [c,r]
                                txtRow (succ c) (x+dx)
                    in when (y < h) $ do
                        txtRow '0' l
                        txtFill (succ r) (y+dy)
            txtFill '0' t
 
main :: IO ()
main = runGUI defSkin [GuiFontDef "" "PTM55F.ttf" 14] $ \gui _ -> do
    win <- newWindow gui "GUI : vertical layout test" $ 
                       SDL.defaultWindow { SDL.windowInitialSize = V2 300 400 }
    vLayout <- (win $+) =<< mkVLayout WidgetMarginNone zero (grayColor 230)
    mapM_ (vLayout $+) [mkExampleWidgetHelloWorld, mkExampleWidgetPicture, mkExampleTextGrid]

И наконец.
Радужные перспективы.
Сделать более менее нормальный GUI со своей изюминкой, полностью типобезопасный, а потом, на нём сотворить, наконец, нормальное IDE для Haskell.
7
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.04.2017, 00:07
Ответы с готовыми решениями:

Списки в Haskell? Что я делаю не так?
Здравствуйте, я пишу маленькую программу в Haskell, которая получает String и заменяет все цифры в нем на единички, а остальные знаки на...

Место ФП и Haskell в компьютерной индустрии (Для чего он нужен, этот Haskell?)
&quot;У нас&quot; ? А где преподавание этой экзотики на высоте? Добавлено через 2 минуты А где такие &quot;пришедшие&quot; используют...

Как запустить qt gui программу, как демон, без gui, скрыв gui?
Как запустить qt gui программу, как демон, без gui, скрыв gui? В gui браузер выполняет определенные действия, и нужно запустить этот...

77
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
07.06.2017, 14:10  [ТС]
Студворк — интернет-сервис помощи студентам
Обновил пакет на гитхабе. Кроме исправления ошибок и нового виджета textEdit для редактирования текстовой строки, наконец добавил параметры шрифтов, не только жирный, курсив и прочие стили но и хинтинг, кернинг. Хинтинг желательно выключать для редактируемого поля, иначе, по мере изменения выделенной части, текст чуть смещается. Ну, или, пришлось бы растеризовывать каждый символ по отдельности, что тормоза.
Для pipe(s) (см. ранее) сделано удаление pipe и замена функции-обработчика для них. Мигание символа каретки в текстовом поле сделано, как раз с помощью pipe и трэда, запускаемого когда виджет редактирования становится активным.

Не по теме:

Надо бы комментарии в исходники добавить - как положено, специальные, что бы из них документация в html виде генерировалась, на английском. На это надо решиться, там писать много. И доходчивый мануал, или цикл статей, сочинять как всем этим пользоваться. Последние события показывают что объяснять толком я разучился, даже на русском. :(

2
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
07.06.2017, 17:08
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
нового виджета textEdit
у меня вопрос (не в качестве критики) как я понял родные библиотечные UI контролы не используются. на это есть какая то причина?
0
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
07.06.2017, 17:26  [ТС]
Цитата Сообщение от pycture Посмотреть сообщение
родные библиотечные UI контролы
В SDL их нет. Только немного графических примитивов.
1
07.06.2017, 17:30

Не по теме:

Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
В SDL их нет. Только немного графических примитивов.
понятно. незнаком с этой штукой.

0
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
30.06.2017, 20:43  [ТС]
Вообще то я планировал отчитываться "о проделанной работе" по первым числам, но, ладно, отчитаюсь несколькими часами ранее.

Понаделал ещё всякого-разного


но это всё меркнет под почти осиленной, почти непреодолимой для меня работой - комментированием исходников. При чём почти исключительно на русском языке! И тут, кстати, парадокс. Комментарии написаны как бы в формате Haddock, но Haddock то, как я понимаю, для ASCII только. Ну, то есть можно, конечно, но не одобряется. Кстати, транслировать комменты из исходников в html или куда ещё не пробовал пока. Писать надо. Комментарии.

На пока прокомментировано значительно больше половины, весь базовый уровень и не только. Если есть дельные замечания по комментариям, то велкам! Ссылка на гитхаб в одном из постов выше.
2
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
01.08.2017, 00:09  [ТС]
Вот и снова первое число. Отчитываюсь.

Несмотря на то что на дворе лето и работой меня ещё загрузили, кое-что сделал.

Все исходники прокомментированы на уровне описания экспортируемых типов и функций. Добавлен виджет просмотра произвольных элементов списком.


Обычно такой виджет называют listView, но, чтобы подчеркнуть, что это не только (и не сколько) для списков, виджет назвал rollView. Может использоваться для произвольного контейнера с элементами. Как частные случаи, сделаны типы и функции для использования с rollView контейнера с элементами, имеющими текстовое представление, и, как совсем частный, но самый распространённый случай, для Vector Text.
Обновлены зависимости от пакетов-обёрток sdl2, sdl2-ttf, sdl2-image. Не со stackage (там долго ещё будут чесаться), а с github.com.
Авторы пакетов (а для sdl2-image даже и не исходный автор), в общем, нашлись добрые люди, пофиксили ошибку установки этих пакетов под Windows, у меня, наконец то, дошли руки свежие версии этих пакетов прикрутить, так что их теперь не нужно устанавливать отдельно. Достаточно взять https://github.com/KolodeznyDiver/GUI-SDL2 и собрать с примером … а потом с другим … . В README.md написано, как это делать на корявом английском, а в examples\Main.hs даже на чуть менее корявом русском.
Я приводил в отдельной теме описание установок сишных библиотек к SDL2, для использования c Haskell.
Там читаем до «И сишные библиотеки уже установлены. Устанавливаем Haskell – обёртки», потому что теперь стало проще, скачиваете GUI-SDL2 и собираете, в процессе сборки обёртки сами скачаются стеком.
p.s. В ближайших планах сделать dropDownRoll (dropDownList), тогда хватает виджетов для построения простенького диалога выбора файлов для загрузки или сохранения. Потом checkBox и radioButton, изготовление которых я всё откладываю, панель с закладками … эх, когда же я начну писать «GUI-SDL2 для чайников»?
3
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
01.08.2017, 10:38
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Обычно такой виджет называют listView, но, чтобы подчеркнуть, что это не только (и не сколько) для списков, виджет назвал rollView.
имхо лучше называть стандартно: listView, gridView, treeList и так далее
2
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
01.08.2017, 15:39  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
имхо лучше называть стандартно: listView, gridView, treeList и так далее
может быть ...
0
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
01.09.2017, 00:15  [ТС]
Отчёт 1 сентября.


Сделал диалоговое окно выбора файла(ов) для загрузки или сохранения. Попутно пришлось сделать ещё несколько применяемых там виджетов : dropDownList, header (заголовок над списком с колонками), pathBox (поле с путём к директории с возможностью перехода во внешние директории). Он сделан из вспомогательного (который можно использовать отдельно) horizLinks, а тот из horizItems который весьма универсален, из него легко получился виджет с горизонтальными закладками horizTab, которые, кстати можно менять местами перетаскивая.


А из него уже сделал панель с закладками tabbedPanel.
Сделал так же окно с полем для ввода текста textInput – понадобилось когда требуется создать новую директорию из диалога выбора файла для сохранения. Окна textInput, messageBox и say – это теперь частные случаи более универсального окна uniBox которое, в общем случае, содержит картинку из ресурсов, многострочный текст, поле ввода, подсказку перед полем ввода и внизу стилизованный ряд кнопок типа «Да», «Нет», «Отменить», «Повторить».
В планах (ну, наконец то) сделать чекбокс и радиобатон. А потом, наверно, даже до доделки всплывающих подсказок, планирую написать что то вроде учебника, возможно использую для этого тутошнюю возможность вести блог пользователя, хотя пока не пробовал как оно. К учебнику потребуется оформить примеры. И одну большую демку в которой будут сразу все возможности. Сейчас, когда сделал панель с закладками, это проще.
3
64 / 49 / 1
Регистрация: 25.06.2015
Сообщений: 80
01.09.2017, 14:53
О, круто! А есть пакет на hackage DB? И будет работать под маком и линуксом также?
0
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
01.09.2017, 15:12  [ТС]
Цитата Сообщение от dsorokin Посмотреть сообщение
А есть пакет на hackage DB?
Нет. У меня там комментарии на русском (т.к. в своём английском не уверен, мягко говоря). Только https://github.com/KolodeznyDiver/GUI-SDL2
Цитата Сообщение от dsorokin Посмотреть сообщение
И будет работать под маком и линуксом также?
Задумано как портабельное и делаю поверх портабельной http://www.libsdl.org/ , но всё ни как не доберусь проверить на убунте. А так я в win 7 работаю.
3
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
29.09.2017, 23:32
Цитата Сообщение от dsorokin Посмотреть сообщение
И будет работать под маком и линуксом также?
Под маком не знаю, но под линуксом, конкретно минт собралось и и по крайней мере первый пример работает... следующие не знаю, нужно проверять, а я уже спать хочу.

P.S. Я когда-то хотел использовать вашу либу для диплома, не будете против, если вечерами буду запускать свои кривые руки в её код? Глядишь и чего полезного в ней допилю, а то от C++, с которым приходится по работе иметь дело, сил моих нет
2
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
30.09.2017, 12:29  [ТС]
Цитата Сообщение от Araneo Посмотреть сообщение
не будете против, если вечерами буду запускать свои кривые руки в её код?
Нет конечно. Гитхаб для этого и предназначен. Можете форкнуть к себе или как угодно.

Будем считать это за месячный отчёт.

Не по теме:

У мну, на основной работе, авральная система. Сейчас аврал. По этому почти ничего нового за этот месяц по GUI нет, и, скорее всего, за октябрь тоже ничего не будет. :(
Основная работа, конечно, в приоритете, хотя после Haskell си весьма скучен и бледен.



За сентябрь, только в начале месяца, успел подпилить GUI что бы он собирался и работал на Ubunta. Ещё картинки нарисовал которые должны бы использоваться по умолчанию для отображения checkBox и radioButton но код для них ещё не написан.
1
Антикодер
Эксперт функциональных языков программирования
1889 / 871 / 48
Регистрация: 15.09.2012
Сообщений: 3,092
30.09.2017, 12:44
Так наверно найдутся люди, кто захочет позапускать на linux-е, включая меня.
1
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
30.09.2017, 12:48  [ТС]
XRuZzz, велкам! На моей убунте все 17 примеров-тестов прошли. По крайней мере в начале сентября.
0
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
30.09.2017, 18:33
О! Тогда замечательно Посмотрим, что получится.

Добавлено через 5 часов 42 минуты
Роюсь в коде, ощущения положительные, но не хватает монад Чтобы вместо
Haskell
1
2
3
4
5
6
    void $ hL0 $+ border def
        { borderSize = V2 150 100
        , borderType = BorderRound
        , borderThickness = 20
        , borderCaption = "border 1"
        }
можно было писать...
Haskell
1
2
3
4
5
    void $ hL0 $+ border $ do
        size $ V2 150 100
        style BorderRound
        thickness 20
        caption "border 1"
Вот этим наверное и займусь
2
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
30.09.2017, 18:41  [ТС]
Цитата Сообщение от Araneo Посмотреть сообщение
но не хватает монад
м.б. А другие скажут что не хватает линз. (И FRP).
Цитата Сообщение от Araneo Посмотреть сообщение
Вот этим наверное и займусь
Давайте, давайте. Посмотрим.
3
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
01.10.2017, 10:46
У меня тут хорошая новость c монадами пока застопорилось (думаю, как лучше их вписать в текущую архитектуру).
Но вот я ту в очередной раз просматривал стекаж... и взгляд мой зацепился за

https://www.stackage.org/package/sdl2-2.2.0
https://www.stackage.org/package/sdl2-ttf
https://www.stackage.org/package/sdl2-image

Меньше внешних зависимостей - проще и надёжней сборка.

Добавлено через 41 минуту
"Плохая" новость: нормальная версия sdl2-ttf есть только в "ночной сборке".
1
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,700
Записей в блоге: 9
01.10.2017, 10:59  [ТС]
Цитата Сообщение от Araneo Посмотреть сообщение
c монадами пока застопорилось
я не уверен что они в упомянутом вами месте нужны. Мне класса Default хватает. По крайней мере, некоторые параметры инициализации виджета потом могут изменяться, но они уже к тому моменту не в структуре (записи) инициализации. Например, при создании label.
Haskell
1
lb1 <- vL $+ label def{labelText="Пример"}
, а изменить текст в дальнейшем
Haskell
1
setText lb1 "Новый текст"
. Может быть это и неплохо унифицировать, но ...
К тому же, мысли бродят задавать поля инициализации в дальнейшем неким графическим конструктором интерфейса.
Ну, это весьма в дальнейшем.

Не по теме:

Млинский, млин. Совсем времени нет описать что же я сделал.


Опять же, и к тому же, есть много любителей линз. И, вот тут они более подходят.
К тому же (N-ый раз), нужно бы уменьшить кол-во имён и сделать членами классов изрядно функций, например, setWidgetRect/setWinRect или logPutLn/logPutLnWidget/logPutLnWindow и пр.
Собирался это делать ... мда.

Цитата Сообщение от Araneo Посмотреть сообщение
https://www.stackage.org/package/sdl2-2.2.0
А толку то. Они там или под windows не рабочие, или просто так не рабочие. Я прямо указал в stack.yaml грузить с гитхабов авторов, что, вообще то не очень.
Нужно при обновлении на stackage загружать исходники этих пакетов оттуда и смотреть, не появится ли строчка
cpp-options: -D_SDL_main_h
в .cabal файлах. Без неё под виндой не собирается. По крайней мере с текущей версией сишной либы SDL.
0
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
01.10.2017, 11:30
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
А толку то. Они там или под windows не рабочие, или просто так не рабочие.
Под виндой нужно проверить, под мятой (линукс минт) всё прекрасно собралось...

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

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

Добавлено через 9 минут
Я кстати знаю ровно два способа убедиться, что код работает.
1. Скомпилить - типы сошлись, значит всё норм.
2. Запустить тесты - прошли, значит всё норм.
1 и 2 лучше совмещать, ибо как показывает практика, они банально разное ищут. Но оба упираются в скорость компиляции и перекомпиляции

Может я что-то пропустил, но вроде бы жизнь так работает.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.10.2017, 11:30

[ubuntu] Как запустить qt-gui программу без gui-интерфейся из консоли?
Как запустить qt-gui программу без gui-интерфейса из консоли?

Как запустить GUI приложение (например, notepad.exe) без отображения GUI?
Добрый день. Интересует есть ли такая возможность, как запустить GUI приложение (например, notepad.exe) без отображения GUI?

LWJGL+ GUI - Выход из рендерного цикла для работы в GUI без потери окна
Всем привет! Учусь использовать OpenGL в Java. И у меня возникла небольшая проблемка, окно LWJGL запускается с гуи, и если уже...

LWJGL и GUI - Выход из рендерного цикла для роботы в GUI без потери окна
Всем привет! Учусь использовать OpenGL в Java. И у меня возникла небольшая проблемка, окно LWJGL запускается с гуи, и если уже запустился...

Как лучше и быстрее из SQL в QVector и в GUI или сразу из SQL в GUI
Доброе время суток! Ну собственно вопрос в теме, как лучше сделать. Сначала прочитать SQLite в вектор и работать с ним и оставить файл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru