LINUX.ORG.RU

О прикручивании графического интерфейса


0

0

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

QT, я думаю, предназначен для создания только графических приложений. Было бы странным запускать все приложения, имеющие интерфейс пользователя на основе QT, при помощи вызова QApplication::exec ( ).


Re: О прикручивании графического интерфейса

А зачем нужно разделять? И при чем тут QApplication::exec?

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

anonymous ()

Re: Re: О прикручивании графического интерфейса

>А зачем нужно разделять? И при чем тут QApplication::exec?

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

>Строго говоря, большинству приложений консольная реализация не нужна. Нужен интерфейс и библиотека для доступа к функциональности.

Консольная реализация чего не нужна? Отображения данных? Некоторым нужна, и консольная, и графическая.

Предположим, есть класс интерфейса, сделанного на QT. Разве так: class UserInt *userint = new class QTBasedInt окно отобразиться? Нет!

Tsahes ()

Re: О прикручивании графического интерфейса

> Хотелось бы разделить приложение на часть, ответственную за основную логику работы, и часть, ответственную за представление информации пользователю. Что выбрать в качестве средства реализации графического интерфейса?

tcl/tk. Оно как раз для таких случаев предназначено.

aa5779 ()

Re: Re: О прикручивании графического интерфейса

Очень глупый онанимус. Вали обратно в свой виндовз, тут тебе не место.

Когда поймёшь, что такое unix way - возвращайся.

anonymous ()

Re: Re: Ответ:Тут скорее вопрос не в библиотеке

Здравствуйте.

Можно использовать любую библиотеку GUI.

Всё будет сосредоточено на том какое приложение вам нужно создать.

В обычном случае можно разделить GUI и сердцевину и осуществить обмен между ними.

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

lightport ()

Re: Re: Re: Ответ:Тут скорее вопрос не в библиотеке

Непонятным для меня пока что остается интеграция уже созданного GUI интерфейса в проект, созданный на C/C++. Есть ли такая возможность для GTK, Tcl/Tk, QT?

Tsahes ()

Re: Re: Re: Ответ:Тут скорее вопрос не в библиотеке

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

Что думать? Фильтровать данные, группировать, усреднять. Поскольку много данных не покажешь, а если и покажешь, то пользователь их все-равно не сможет осмыслить.

anonymous ()

Re: Re: Re: Re: Ответ:Тут скорее вопрос не в библиотеке

Что именно не понятно?

Обычно из гуишной программы дергают библиотечные функции: вызвали getData, получили данные, показали; пользователь изменил данные, сохранили через setData.

anonymous ()

Re: О прикручивании графического интерфейса

>QT, я думаю, предназначен для создания только графических приложений. Было бы странным запускать все приложения, имеющие интерфейс пользователя на основе QT, при помощи вызова QApplication::exec ( ).

http://doc.trolltech.com/3.3/qapplication.html#QApplication-2

ANDI ★★ ()

Re: О прикручивании графического интерфейса

В этом смысле поучителен проект http://www.licq.org/

Сама аська в LICQ графики не имеет. Графические интерфейсы подключаются как плагины (.so модули). Есть текстовый плагин, qt, gtk. По причине наибольшего качества, qt-плагин самый популярный.

KtaK ★★ ()

Re: Re: О прикручивании графического интерфейса

>Сама аська в LICQ графики не имеет. Графические интерфейсы подключаются как плагины (.so модули). Есть текстовый плагин, qt, gtk. По причине наибольшего качества, qt-плагин самый популярный.

Вот! А каким образом создать этот .so модуль из уже созданного графического окна на основе того же QT?

Tsahes ()

Re: Re: Re: О прикручивании графического интерфейса

Вас интересует создание .so модулей вообще или непонятно, как создавать окна из функций модуля? Во втором случае не вижу принципиальных отличий от обычной программы, т.к. обычная программа, можно сказать, тоже модуль, с функцией main.

KtaK ★★ ()

Re: Re: Re: Re: О прикручивании графического интерфейса

Именно второй случай. Отличия есть, так как для отображения виджета в main () используется QApplication. Он вызывает метод exec (), и следующий за ним оператор не будет выполняться до тех пор, пока пользователь не закроет окно приложения... Вызвав из модуля функцию создания окна, она так же не завершится до момента закрытия пользователем окна...

Tsahes ()

Re: Re: Re: Re: Re: О прикручивании графического интерфейса

> Он вызывает метод exec (), и следующий за ним оператор не будет выполняться до тех пор, пока пользователь не закроет окно приложения...

Все правильно.

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

Почему не завершится? Должна завершиться.

anonymous ()

Re: Re: Re: Re: Re: Re: О прикручивании графического интерфейса

>Почему не завершится? Должна завершиться.

Вы не могли бы привести примерный код функции, два вызова которой создадут две кнопки, например?

Tsahes ()

Re: Re: Re: Re: Re: О прикручивании графического интерфейса

>Именно второй случай. Отличия есть, так как для отображения виджета в main () используется QApplication. Он вызывает метод exec (), и следующий за ним оператор не будет выполняться до тех пор, пока пользователь не закроет окно приложения... Вызвав из модуля функцию создания окна, она так же не завершится до момента закрытия пользователем окна...

Все правильно. А что мешает вызвать нужную не-GUI функцию из MainWindow уже?

ANDI ★★ ()

Re: Re: Re: Re: Re: Re: О прикручивании графического интерфейса

>Все правильно. А что мешает вызвать нужную не-GUI функцию из MainWindow уже?

Вы правы, можно ее вызвать из MainWindow. Придется тогда вызывать из нее последующую вторую, третью... Так реализация всей логики, и не относящейся к интерфейсу, перенесется в MainWindow. А ведь это не хорошо, интерфейс по сути - вторичен...

Tsahes ()

Re: Re: Re: Re: Re: Re: Re: О прикручивании графического интерфейса

> Так реализация всей логики, и не относящейся к интерфейсу, перенесется в MainWindow.

Что ты называешь логикой, не относящейся к интерфейсу?

> А ведь это не хорошо, интерфейс по сути - вторичен...

Как вторичен? Зачем он тогда нужен?

anonymous ()

Re: Re: Re: Re: Re: Re: Re: Re: О прикручивании графического интерфейса

>Что ты называешь логикой, не относящейся к интерфейсу? Как вторичен? Зачем он тогда нужен?

Способ обработки, хранения данных, к примеру. Это не компетенция интерфейса. Интерфейс же может быть реализован посредством некоторого набора API, использовать который могут и графическое окно, реализованное на основе любой библиотеки, и консоль. Есть этому примеры?

Tsahes ()

Re: Re: Re: Re: Re: Re: Re: Re: Re: О прикручивании графического интерфейса

> Способ обработки, хранения данных, к примеру. Это не компетенция интерфейса. Интерфейс же может быть реализован посредством некоторого набора API, использовать который могут и графическое окно, реализованное на основе любой библиотеки, и консоль.

Кто кого использует? Не понял.

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

> Есть этому примеры?

vim, emacs.

amm ()

Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: О прикручивании графического интерфейса

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

Как сделать программу, интерфейсом которой было бы QT-окно? (Почувствуйте разницу - не "как написать QT приложение"). Еще раз, трудность в его, окна, создании!

Tsahes ()

Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: О прикручивании графического интерфейса

> Как сделать программу, интерфейсом которой было бы QT-окно? (Почувствуйте разницу - не "как написать QT приложение")

Это как так? Qt окно есть, а qt приложения нет. QApplication что-ли свой написать? Оно тебе надо?

amm ()

Re: Re: Re: Re: Re: Ответ:Тут скорее вопрос не в библиотеке

>Не надо ничего интегрировать. Мухи отдельно, котлеты отдельно. В Unix-ах главный механизм интеграции - пайпы.

Посмотрел реализацию плугинов в lisq. Вы правы, спасибо.

Tsahes ()

Re: Re: Re: Re: Re: Ответ:Тут скорее вопрос не в библиотеке

>Не надо ничего интегрировать. Мухи отдельно, котлеты отдельно. В Unix-ах главный механизм интеграции - пайпы.

Посмотрел реализацию плугинов в lisq. Вы правы, это делается через нити и пайпы. Спасибо.

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