- 라이선스: LGPL 2.1
- 테스트 환경: Windows 10 Home 22H2 64-bit, Qt 6.5.0, Qt Creator 11.0.1, MinGW 11.2.0 64-bit
제목 그대로 Visual Studio 스타일의 도킹 윈도우를 제공함. 2020년 즈음에 Qt 마켓 플레이스를 돌아 댕기다 발견함. 깃헙 저장소에서 readme 파일을 읽다 Showcase에 Qt Quick Designer, Qt Design Studio에 적용되었다는 글을 읽고 바로 다운로드받아 지금까지 잘 사용하고 있음.
라이브러리 사용하기: qmake 프로젝트
소스 코드를 빌드해서 사용하기
응용 프로그램에 Qt ADS의 소스 코드를 포함시키려면 ads 프로젝트와 그 하위 프로젝트인 demo, examples의 내용을 참고하자. Qt ADS를 사용하는 간단한 프로젝트를 만들어 보자. 프로젝트 이름을 QtAdsTest로 정하고 프로젝트 파일을 아래와 같이 작성하자.
TEMPLATE = subdirs
SUBDIRS = \
ads \
adsTest
adtTest.depends = ads
프로젝트는 Qt ADS 소스 코드가 있는 ads 폴더와 이를 사용하는 adsTest 폴더로 구성된다. 즉 adsTest 프로젝트가 실질적인 클라이언트 프로젝트이다. 이런 구성의 프로젝트는 그 하위 폴더에 개별 프로젝트 파일이 있어야 한다. 그리고 adsTest 프로젝트는 Qt ADS를 사용하기 때문에 ads 프로젝트가 먼저 빌드 되어야 한다. 자세한 사항은 SUBDIRS - handling dependencies를 참조하자.
ads 프로젝트는 Qt ADS 소스 코드의 src 폴더를 가져와 이름만 바꾼 것이다. 달리 손댈 것은 없다. adsTest 프로젝트 파일의 내용은 아래와 같다.
QT += \
widgets
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
LIBS += -L$$OUT_PWD/../lib -lqtadvanceddocking
INCLUDEPATH += $$PWD/../ads
DEPENDPATH += $$PWD/../ads
아래 세 줄이 클라이언트 코드가 Qt ADS를 사용하게 해준다. Qt ADS는 라이브러리로 빌드되므로 이를 클라이언트 프로젝트가 사용한다. 외부 라이브러리를 사용하는 방법에 대해서는 Qt/Qt Creator에서 외부 라이브러리 사용하기를 참조하자.
adsTest 프로젝트의 클라이언트 코드는 Qt ADS의 Getting started / Example과 크게 다르지 않다. mainwindow.h 파일을 아래와 같이 작성하자. 코드에 대한 설명은 주석으로 대신한다.
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "DockManager.h" // Qt ADS를 사용하기 위한 헤더 파일
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
protected:
/* dockManager 리소스를 해제하기 위해 오버라이드 함 */
virtual void closeEvent(QCloseEvent *event) override;
private:
/* 도킹 윈도우를 관리할 컨테이너 */
ads::CDockManager *dockManager;
};
#endif // MAINWINDOW_H
mainwindow.cpp의 내용은 아래와 같다. 코드에 대한 설명은 주석으로 대신한다.
#include "mainwindow.h"
#include <QLabel>
#include <QMenuBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
/* 도킹 윈도우에 담을 컨텐츠 생성:
* 어떤 위젯이라도 넣을 수 있음 */
auto *label = new QLabel();
label->setWordWrap(true);
label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
label->setText(tr("<H1>Qt ADS Test</H1>"));
/* 도킹 윈도우 생성:
* 위에서 생성한 라벨을 대상 위젯으로 설정함 */
auto *dockWidget = new ads::CDockWidget(tr("Label 1"));
dockWidget->setWidget(label);
/* dockWidget 토글 메뉴 생성 */
menuBar()->addAction(dockWidget->toggleViewAction());
/* 도킹 윈도우를 관리할 컨테이너 생성:
* ui 파일을 사용한다면 이 코드는 반드시 ui->setupUi() 다음에 위치해야 함 */
dockManager = new ads::CDockManager(this);
/* dockWidget을 컨테이너에 추가 */
dockManager->addDockWidget(ads::CenterDockWidgetArea, dockWidget);
}
void MainWindow::closeEvent(QCloseEvent *event)
{
/* dockManager 삭제:
* 포함되어 있는 dockWidget을 함께 삭제함 */
dockManager->deleteLater();
QMainWindow::closeEvent(event);
}
빌드후 실행하면 다음과 같은 결과를 볼 수 있다.
공유 라이브러리로 만들어 사용하기
앞서도 언급했지만 Qt ADS는 라이브러리로 빌드된다. 따라서 Qt ADS 소스 코드나 이전 에제 프로젝트를 빌드했다면 Qt ADS는 이미 공유 라이브러로 빌드 되어 있을 것이다. 공유 라이브러리로 빌드된 Qt ADS를 사용하는 것은 Qt/Qt Creator에서 외부 라이브러리 사용하기와 완전히 동일하다.
QtAdsLibTest라는 폴더를 만들고 다음 세 가지를 준비하자.
- 이전 프로젝트의 빌드 폴더에서 lib 폴더를 복사: libqtadvanceddocking.a와 qtadvanceddocking.dll 파일이 있음
- Qt ADS 소스 코드 src 폴더 혹은 이전 프로젝트의 ads 폴더에서 모든 헤더 파일을 lib 폴더로 복사
- 이전 프로젝트의 소스 코드를 모두 복사: main.cpp, mainwondow.cpp, mainwindow.h
프로젝트 이름을 QtAdsLibTest로 정하고 프로젝트 파일을 아래와 같이 작성하자. adsTest.pro 파일에서 제일 아래 세 줄, 라이브러리 경로 설정 부부만 수정한 것이다.
QT += \
widgets
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
LIBS += -L$$PWD/lib -lqtadvanceddocking
INCLUDEPATH += $$PWD/lib
DEPENDPATH += $$PWD/lib
소스 코드는 손댈 필요 없다. 빌드 후 실행하면 이전과 같은 결과를 얻을 수 있다.
'Qt > 라이브러리' 카테고리의 다른 글
Qt에서 공유 라이브러리 만들기 (0) | 2024.01.03 |
---|---|
LED 인디케이터: QLedIndicator (0) | 2024.01.02 |
Qt/Qt Creator에서 외부 라이브러리 사용하기 (0) | 2023.12.25 |