LINUX.ORG.RU

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


0

0

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

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


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

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

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

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

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

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

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

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

Tsahes
() автор топика

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

anonymous
()

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

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

ANDI ★★
()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вы хотите сказать, что программа, имеющая интерфейс на основе QT, и на основе Motif, обязана работать через пайпы?

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

Такие примеры есть в документации. Почитай --- может после вопросов станет меньше.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

vim, emacs.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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