[완료] 리눅스에서 동작하는 GUI를 만들어야 하는데 Qt와 JAVA중에서 고민하고 있습니다. (Qt로 결정했습니다)

markman의 이미지

안녕하세요. 리눅스에서 동작하는 GUI를 개발할려고 합니다.
지금까지 GUI는 MFC로 윈도우즈용만 만들었었고 리눅스는 처음입니다.

GUI에서 표현해야하는 요구사항은 A 시스템과 B 시스템간의 네트워크 통신을 할때
Trace line을 보여주고 해당 line을 선택하면 상세윈도우가 떠야합니다.
예를 들면 아래 그림과 같습니다.

  Remote                 Local
   A                    B
   │      Service request     │
   ├──────────────────▷│
   │                   │
   │      Service accept      │
   │◁──────────────────│
   │                   │
   │      Service complete    │
   ├──────────────────▷│
   │                   │

방법을 살펴보니 JAVA나 Qt를 사용하면 된다고 하는데, 이 두개에 대해서는 처음 접합니다.
이런 유형의 GUI는 어떤 것으로 접근하는게 좋은지 문의를 드립니다.

그럼 고수님들의 답변을 부탁드리겠습니다.

semmal의 이미지

아무래도 c++을 쓰셨으니 qt가 약간이나마 좋지않을까 싶네요

자바도 그리 어렵지않고 괜찮기는한데 언어부터 알아야하니 시간이 더 걸릴듯 하네요

Qt도 학습기간이 필요하긴 하지만 자바보다는 덜하고 c++ 로직은 그냥 쓰던거 가져다 쓸 수 있으니 편하겠지요

------------------------------
How many legs does a dog have?

markman의 이미지

그렇지만 본격적으로 프로젝트에 적용해보지는 못했습니다.
Qt는 아직 사용해보지는 못했고 설치만 해봤습니다.

문제는 윈도우에서도 위와 같은 기능을 가진 GUI를 구현한 적이 없는 상태에서
리눅스에 동작하는 GUI를 만들려고 하니 어떻게 접근해야할지 잘 모르겠습니다.

Qt와 JAVA, 이들 중의 적합한 방법만 알게된다면 학습해서 구현을 할려고 합니다.

semmal의 이미지

리눅스에서 동작하는 것만 다를 뿐, 프로그램을 작성하는데 있어서 윈도즈와 다른 점은 거의 없습니다.

단지 winapi를 안쓰는 것 빼고는 말이지요.

표준 라이브러리와 공통 라이브러리를 쓰면, 윈도즈나 리눅스 뿐만 아니라 유닉스나 맥에서도 돌아갑니다.

MFC만 해본 상태라, 약간 겁을 먹으신 것 같은데, 리눅스를 사용하는 것과 리눅스에서 돌아가는 프로그램을 작성하는 것은 완전히 다릅니다.

리눅스를 쓸 줄 몰라도, 프로그램을 만드는 것은 그리 어렵지 않습니다.

그리고 자바든 Qt든 둘 다 GUI 프로그램을 만드는데 상당히 강력한 기능을 제공하고 있고, 인기있는 운영체제에서는 다 돌아간다는 장점이 있습니다.

이 두 가지 방법은, 약간의 문법적인 차이, 약간의 개념적인 차이만 있을 뿐, 둘 다 MVC를 따르고 표준적인 패턴을 이용하고 있습니다.

단지 Qt를 더 추천해 드렸던 이유는 Java의 문법뿐만 아니라 Java의 라이브러리 체계(표준 라이브러리 조차)에 대해서 그리 해박하시지 않으실 걸로 생각했기 때문입니다.

아무리 문법을 알고 있다고 하더라도, 하물며 파일 열고 닫는 것 조차도 그 라이브러리의 동작을 제대로 이해하지 못하면 프로그램을 완성도 있게 만들기 힘듭니다.

최소한 C++에서 표준 C라이브러리와 STL같은 것은 써보셨을테니, Qt 라이브러리에 대해서만 예제를 보면서 차근차근 만들어 가시면 될 것 같습니다.

어느게 더 적합한지는 저도 잘 모르겠습니다.

하지만 확신할 수 있는 것은 둘 다 잘하는 사람이라면 거의 같은 기간내에 만들 수 있을 것 같습니다.

참고 : http://turing.iimas.unam.mx/~elena/PDI-Lic/qt-vs-java-whitepaper.pdf

------------------------------
How many legs does a dog have?

markman의 이미지

자세한 설명과 참고자료 감사합니다.
잘 볼께요.

ifree의 이미지

Qt 는 특별히 리눅스에만 관련된 GUI 는 없고 cross platform 으로 개발할 수 있습니다.
다만 일반적인 MVC 방식과 조금 다른, Delegate 를 사용하는 Model-View 방식인데 개인적으로는 좀 더 깔끔하다고 생각되네요.

HotPotato의 이미지

자바 기준으로 설명드리겠습니다. 코드를 다 짜줄 수는 없고.. 기본적인 것만 가르쳐드리죠. 다른 것들은 링크를 참조하시길.

main(String[] arg) 함수 안에서 JFrame 객체를 만듭니다.
JFrame 이 타이틀바 달린 윈도를 만들 때 쓰이는 스윙의 최상위 객체입니다.
즉 JFrame 이 닫힐 때 프로그램이 종료되도록 하면 되겠죠.

JFrame 에는 ContentPane 이 기본적으로 존재합니다. getContentPane() 으로 가져올 수 있습니다.

예)
JFrame f = new JFrame();
f.setBounds(x,y,width,height);

JPanel panel = (JPanel) f.getContentPane();
panel.setLayout(null);

스윙에는 (윈도개념) JFrame, JDialog 과 (컨테이너 개념;Container)) JPanel, JLabel, JTabbedPane, JSplitPane, .. 이 기본 뼈대입니다.

Container 객체를 상속한 위 JPanel, JLabel, ... 에는 다른 스윙객체들을 붙일 수 있습니다.
BorderLayout 같은 레이아웃 매니저를 지정하면 자체 역할에 따라 객체들을 배열할 수 있고, setLayout(null) 을 해서 레이아웃 매니저없이

자식객체마다 setBounds() 를 이용하여 위치,크기 지정을 해줄 수 있습니다.

앞서 설명한 최상위 개념 뿐만 아니라 기타 스윙객체에는 add*Listener() 를 통해 이벤트리스너를 지정할 수 있습니다.
여기에는 마우스 클릭과 같은 인터렉티브한 동작들을 처리하는 함수를 연결합니다.

예를 들어, 데이터 송, 수신 화살표같은 류를 JButton 으로 구현한다면 MouseListener 또는 MouseAdapter 를 붙이면 됩니다.
------
기타 레이아웃은 첨부된 이미지대로 하면 됩니다. 다이얼로그 띄우는 부분은 공부하셔서 하시면 될 것 같네요. (참고로 JDialog)

URL>
http://wikis.sun.com/display/code/Home#Home-JavaPlatform%2CStandardEdition%28JavaSE%29

http://download.oracle.com/javase/6/docs/api/

http://download.oracle.com/javase/tutorial/uiswing/components/index.html

--
즐 Tux~

markman의 이미지

자세히 설명해주셔서 감사합니다.
이대로 실습해볼께요.

cleansugar의 이미지

WxWidget은 MFC랑 비슷하니 참고하세요

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

kaeri17의 이미지

제가 알기로는 JAVA로 GUI프로그램을 짜는 경우가 그리 많지는 않습니다.Qt가 더 나을 듯 하네요..

ldshyun7의 이미지

c랑 자바 배울생각인데.. gui가능하군요..

아무튼 언어란 멋진것같네요. 원하시는일 잘되시길빕니다..

rubenz의 이미지

둘이 용어만 다르지 비슷하더라구요.. MFC에 메시지, QT의 슬롯 개념 머 그런식? 어렵지 않게 개념이 서실 것입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.