QObject 클래스와 vtkCommand 를 상속한 observer 클래스를 빌드할 때 아래와 같은 에러가 발생하였습니다. class VTKUTILS_EXPORT MyWidgetObserver : public QObject, public vtkCommand { Q_OBJECT public: explicit BoxWidgetObserver(QObject* parent = nullptr); signals: void planesChanged(vtkPlanes* planes); protected: void Execute(vtkObject* caller, unsigned long eventId, void* callData); vtkSmartPointer m_planes; }; 전체적으로 문제가 될것이 없어보이나..
QApplication을 실행하려고하면 바로 runtime 에서 다음과 같은 에러가 발생한 경우가 있습니다. 에러 메시지를 보면 QApplication 을 생성하고 난 뒤에 Widget을 만들어야 한다고 나옵니다. callStack을 찍어보면 ui 내부의 widget 객체를 생성할 때 에러가 발생하는 걸로 나옵니다. 하지만, 실제로 코드상에는 문제가 없다면, library import하는 부분을 확인해야 합니다. QTVSTools를 사용하는 경우에는 직접적인 library 를 import 하면 안되고, tools에서 관리되어 중복 import 가 되지 않도록 해야 합니다.
qt_static_metacall, staticMetaObject 함수에 대한 링크에러가 발생할 경우 build output 경로에 QObject 파일에 대한 moc_XX.cpp 파일이 생성되었는지 확인한다. 만약에 moc 파일이 생성되지 않은 클래스가 있을 경우에는 해당 클래스의 header 파일에서 space 하나를 추가해서 파일이 변경되도록 하고, moc 파일이 생성되도록 한다. 그러고나면 link 에러가 없어짐. 일시적으로 moc 컴파일러가 작동을 안하는 경우 그렇다.
지금까지 CustomWidget Plugin을 만들고 Application 프로그램에 만든 widget을 붙여서 실행하는 것까지 해왔습니다. 이번 시간에는 만든 widget plugin의 속성을 변경할 수 있는 interface에 대해서 알아보도록 하겠습니다. 1. QDesignerCustomWidgetInterface 2강에서 Qt Custom Widget 프로젝트를 만들 때 MyWidget 클래스와 함께 자동으로 MyWidgetPluin 클래스가 만들어졌었습니다. Plugin 클래스는 QDesignerCustomWidgetInterface 클래스를 상속한 자식 클래스입니다. 바로 이 시간에 알아볼 내용이 QDesignerCustomWidgetInterface 클래스 입니다. 짧게 interface 클..
이번 강의에서는 Application 에서 plugin 을 ui 을 사용하는 방법에 대해 알아보도록 하겠습니다. 1. Application 환경 구축 Designer에서 만든 Widget을 추가해서 App ui파일에 그리는 것까지 했습니다. 하지만, 프로젝트 빌드를 해보면 컴파일 에러가 나옵니다. 기본적으로 library 를 사용하려면 header 참조를 찾아야 하는데 ui_QtMyApp.h 파일에서 우리가 만든 plugin library 의 header를 참조하지 못해서 컴파일 에러가 발생했습니다. 일반적으로 library 프로젝트와 app 프로젝트가 같은 솔루션에 있기 때문에 상대 경로를 이용해서 header를 연결하면 될 수 있지만 이런 방법은 shared dll library 를 활용하는 방법으로..
2강에서 Qt VS Tools의 template 프로젝트를 이용하여 widget plugin프로젝트를 만들었습니다. 이번 강의에서는 Widget 프로젝트를 Qt Designer 에서 활용하는 방법과 주의점을 설명하겠습니다 1. App 프로젝트 만들기 Custom Widget을 띄울 application 프로젝트를 QtWidgetTutorial 솔루션에 추가하여 생성합니다. 그림 순서대로 따라하면 됩니다. Qt WidgetApplicaiton 에서는 Base class를 3가지 형태로 제공하는데 간단하게 QDialog 로 만들었습니다. QMainWindow나 QWidget 어느 형태여도 상관은 없습니다. 프로젝트 생성을 완료하면 다음과 같은 파일 구조를 만들게 됩니다. 2. CustomWidget 등록하기..
2강부터는 1강의 Intro 에서 설명했었던 방식에서 Plugin 을 활용하여 Custom Widget을 개발하는 방법을 설명하겠습니다. 우선 기본 프로젝트를 생성하고 ui 파일을 등록하는 방법을 설명하도록 하겠습니다. 1. Plugin 프로젝트 만들기 Visual studio에서 새로운 프로젝트를 Qt Designer Custom Widget template를 이용해서 생성합니다. 우선 새로운 솔루션과 프로젝트를 생성합니다. QtWidgetTutorial 솔루션을 만들고 이 솔루션에 계속 이어질 프로젝트들을 연결할 예정입니다. Widget Wizard 를 보면 아래의 Widget을 위한 클래스와 Plugin 클래스가 생성되는 것을 확인할 수 있습니다. 생성된 프로젝트의 파일 구조를 보면 자동으로 MyW..
필자는 그동안 주로 C# 기반의 프로그램을 개발하였고 여러 형태의 GUI 개발을 해왔습니다. 그런 경험 때문에 Qt에서도 당연히 Widget을 여러개로 분류하고 필요에 따라서 조합하여 사용하는 것을 당연하다고 생각했습니다. 하지만, Qt에서는 이런 개발 방식에 매우 불편하고 친절한 tutorial 이 없는 것 같습니다. 그래서 이번에는 Qt 를 이용하여 사용자의 Custom Widget을 적용하는 방법에 대해 공부한 것들을 개인적으로 정리하면서 필요하신 분들에게 공유하고자 부족한 내용이나마 연재하고자 합니다. 우선 공식 문서에 따르면 Qt에서 Custom Widget을 만드는 방법은 Promotion 과 Plugin 방식으로 두가지로 접근이 가능합니다. 1. Promotion 방식 우선 Promotion..
1. Widget 이란? Widget은 QT에서 GUI를 구성하는 가장 기본적인 컨트롤 유닛을 말한다. 모든 Widget은 parent-child 계층 관계를 갖게되어 있으며, parent widget에 속하지 않은 widget은 window라고 한다. Qt의 모든 widget은 화면에 어떻게 표시 될지 사용자와 어떤 상호작용을 할지에 대한 기능들을 제공한다. 2. Window 의 역할 Window는 데스크탑에서 task bar에 application으로 등록되어 관리된다. 하지만 앞서 말했듯이 parent가 없는 widget은 모두 window가 된다고 했다. 그렇기에 모든 window가 taskbar에 나타나는게 아니라 applicaiton 에 하나의 window만을 taskbar에 등록되도록 pri..