0081 - 수직 / 수평 레이아웃 지정
참고 영상
QT Designer 를 쓰지 않고 QT 내 라이브러리를 사용하여 기본 위젯들을 C++ 코드 상에서 레이아웃 위젯에 의해 묶어서 사용하는 방법을 알아 봅니다.
1. 새 Project 를 만듭니다.
New File or Project
- Application
- Qt Widgets Application 을 선택합니다.
- Introduction and Project Location 에서는 임의로 Project 명과 저장할 장소를 입력합니다.
- Kits 은 기존에 사용하시던 Kit 를 이용하시면 됩니다. (제 경우는 Desktop QT 5.5 MinGW 32bit)
- Class Information 는 나중에 삭제 할 거지만 MainWindow 를 그대로 사용합니다.
2. 생성한 Projects 에서 다음의 파일들을 삭제합니다.
- mainwindow.h, mainwindow.cpp, mainwindow.ui
- 오른쪽 마우스 버튼을 누르고 Remove File... 을 선택합니다.
- 기존에 저장된 파일까지 영구적으로 삭제한다는 Delete file permanently 를 선택하고 OK 를 선택합니다.
- 삭제된 파일이 QT Creator 에서 열려 있는 경우 삭제시 열린 창의 내용을 저장할건지 그대로 둘건지 선택을 합니다. 이때는 Close 를 선택합니다.
3. Code 를 수정합니다.
- mainwindow.h 는 삭제 되었으므로 이를 참조하는 구문은 삭제합니다.
- 단순히 Window 형의 Widget 을 추가하기 위해 다음의 Code 를 입력합니다.
1 2 3 4 5 6 7 8 9 | #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); return a.exec(); } | cs |
- 실행하여 결과를 확인 합니다.
4. 추가 Widget 과 이들 간의 Layout 을 지정합니다.
- 추가할 QPushButton 객체들을 수평으로 볼려면 다음의 방법을 사용합니다.
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 | #include <QApplication> #include <QPushButton> #include <QHBoxLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget *window = new QWidget; window->setWindowTitle("My App"); QPushButton *button1 = new QPushButton("one"); QPushButton *button2 = new QPushButton("two"); QPushButton *button3 = new QPushButton("three"); QHBoxLayout *hlayout = new QHBoxLayout; hlayout->addWidget(button1); hlayout->addWidget(button2); hlayout->addWidget(button3); window->setLayout(hlayout); window->show(); return a.exec(); } | cs |
- 반대로 수직으로 볼려면 다음의 방법을 사용하면 됩니다.
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 | #include <QApplication> #include <QPushButton> #include <QVBoxLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget *window = new QWidget; window->setWindowTitle("My App"); QPushButton *button1 = new QPushButton("one"); QPushButton *button2 = new QPushButton("two"); QPushButton *button3 = new QPushButton("three"); QVBoxLayout *vlayout = new QVBoxLayout; vlayout->addWidget(button1); vlayout->addWidget(button2); vlayout->addWidget(button3); window->setLayout(vlayout); window->show(); return a.exec(); } | cs |
5. QT 는 상위 개체가 삭제가 되면 하위로 엮여 있는 객체들까지 삭제하는 Routine (루틴) 이 포함되어 있으므로 이 경우에는 따로 Delete 를 할 필요가 없습니다.
자세한 사항은 https://stackoverflow.com/questions/8000249/qt-widget-memory-management 과 엮여 있는 Object Trees & Ownership 을 참고 하시기 바랍니다.
6. 만약에 Layout 을 넣지 않고 직접 Widget 을 표시하려면 다음의 Code 를 사용하시면 됩니다. 아래 예는 button3 에 대한 예외적 표시 입니다.
1 2 3 | button3->setParent(window); button3->setGeometry(10,30,50,30); button3->show(); | cs |
작업 파일 받기
'소프트웨어 > Qt' 카테고리의 다른 글
Object Trees & Ownership (객체 트리들과 소유권) (1) | 2016.04.13 |
---|---|
0071 - HTML 태그를 인식하는 위젯 (0) | 2015.12.17 |
0061 - Layout, Tab, Buddy (레이아웃, 탭, 버디) (0) | 2015.12.10 |
0054 - Dr. Memory 로 메모리 누수 확인하기 (0) | 2015.11.10 |
0053 - 윈도우에서 QT 응용 프로그램 바로 실행하기 (0) | 2015.11.09 |