본문 바로가기
SWE/Qt

[Qt] Qt desinger에서는 domXmL을 사용한다. XML이란

by S나라라2 2020. 10. 21.
반응형

 

Qt designer는 Qt에서 위젯을 gui로 손쉽게 만들 수 있게 도와준다. 

그 Qt designer로 생성한 파일은 ~.ui 확장자로 저장이 되고, 이 파일을 메모장으로 열면 xml 형태라는 것을 확인할 수 있다.

 

그렇다면, Qt designer 파일의 구조를 이루는 xml이란 무엇인지 보자.


  • XML이란?

트리구조의 데이터를 단순히 텍스트 형태로 나타낸 것.

<?xml version="1.0"?>
<고양이>
	<이름> 나비 </이름>
    <품종>샴</품종>
    <나이>3</나이>
  	....
</고양이>
이런식으로 <태그></태그> 구조로 자유롭게 만들 수 있다.

- xml은 버용성과 확장성을 가지기 때문에 환경설정이나 데이터 전달포맷으로 쓰이는 것을 많이 볼 수 있다.

 

- 장점 :

 (1) 유연하게 쓰인다. (이기종간 데이터 전달 등)

 (2) XML과 HTML을 함께 사용할 수 있다. (다른 프로그래밍 언어와의 결합이 가능하다.)

 (3) 유니코드 기반(UTF-8 및 UTF-16을 지원)이라 외국어 표현이 용이하다.

 

- 단점 :

 (1) 가독성이 안좋다.

 (2) 파싱하기 어렵다.

 (3) 처리 속도도 느리다.

 (4) XML은 실제 자료보다 자료구조를 정의하는데 더 많은 비중을 차지할 경우가 많아서 자료 이외의 값이 xml 파일 크기를 무한히 증가시킬 수 있다.

 

=> 웬만하면 json을 쓰자

 


Qt Designer는 DomXML을 사용한다.

DomXML은 무엇인지, 그와 달리 SAX이 있고, 그것과의 차이는 무엇인지 살펴보자

 

- XML의 경우는 페이지 자체가 데이터로서 DOM(Document Object Model: 문서 객체 모델)이나 SAX(Sample Application X for XML)을 이용하여 스크립트나, VB, C++ 등에서 핸들링할 수 있다.


  • XML DOM (문서 개체 모델)

XML DOM(문서 개체 모델) 클래스는 XML 문서의 메모리 내 표현이다.

DOM을 사용하여 XML 문서를 프로그래밍 방식으로 읽고, 조작하고, 수정할 수 있다.

실제 XML 데이터는 파일에 저장될 때나 다른 개체에 읽어 올 때 순차적인 방식으로 저장되지만 XML 데이터를 표현하는 것은 일반적이고 추조적인 방식으로 수행된다.

 

다음은 XML 데이터이다.

 

다음 그림은 이 XML 데이터를 DOM 구조로 읽어올 때 메모리가 구조화되는 방법을 보여준다.

XML 문서 구조

XML 문서 구조에서 이 그림의 각 원은 XmlNode 개체라고 하는 노드를 나타낸다.

XmlNode 개체는 DOM 트리에서 기본 개체이다.

XmlNode를 확장한 XmlDocument 클래스는 XML을 메모리에 로드하거나 파일로 저장하는 것처럼 문서 전체에 수행되는 메서드를 지원한다. 


  • Qt에서의 XML

Qt에서 XML의 사용 예시를 보면 다음과 같다.

<ui language="c++"> displayname="MyWidget">
    <widget class="widgets::MyWidget" name="mywidget"/>
    <customwidgets>
        <customwidget>
            <class>widgets::MyWidget</class>
            <addpagemethod>addPage</addpagemethod>
            <propertyspecifications>
                <stringpropertyspecification name="fileName" notr="true" type="singleline"/>
                <stringpropertyspecification name="text" type="richtext"/>
                <tooltip name="text">Explanatory text to be shown in Property Editor</tooltip>
            </propertyspecifications>
        </customwidget>
    </customwidgets>
</ui>

가장 첫 번째 행 <ui>태그의 속성을 살펴보면,

 

- language :  "c++", "jambi"

   주 언어를 지정한다. python 으로도 Qt를 하던데, Qt Designer를 사용한 ui에서는 python사용이 불가한지 모르겠다. 공식 다큐먼트에는 일단 c++만 나와있다.

 

- displayname : 클래스 이름


  • Qt XML, 속성 함수들

 

 

 

 

 

참고 :

docs.microsoft.com/ko-kr/dotnet/standard/data/xml/xml-document-object-model-dom

doc.qt.io/qt-5/designer-creating-custom-widgets.html

blog.daum.net/sinea2007/11281816

humble.tistory.com/23

반응형