Programming/Qt 51

[Qt] 스레드 프로그래밍 moveToThread() 대해 알아보기 - 1

안녕하세요. Qt 프레임워크에서 반응성 좋은 애플리케이션을 구현하기 위해 멀티스레딩은 필수적입니다. Qt는 moveToThread()라는 안정적인 스레드 관리 메커니즘을 제공하고, 구식 QThread 상속 방식보다 권장되는 현대적인 접근법이라고 합니다. 그래서 moveToThread()의 정의와 동작 원리를 한번 알아보려고 합니다. 1. QObject::moveToThread()의 정의 QObject::moveToThread()는 특정 QObject 파생 객체의 스레드 소속(Thread Affinity)을 다른 스레드로 변경하는 함수입니다. 객체의 스레드 소속이 변경되면, 해당 객체와 관련된 모든 이벤트(특히, 슬롯 호출)는 새로운 스레드의 이벤트 루프에서 처리됩니다. 즉, 이 함수를 통해 특정 ..

Programming/Qt 2025.08.10

[Qt] Serial 통신 프로그램 제작 및 배포 (ComportFree) - github 공유

안녕하세요. Qt 프로그램을 가지고 무엇을 해볼까 하다가 장비들 제어할 때 사용하는 시리얼 프로그램을 한번 원하는 기능을 넣어서 만들어보자 생각이 들어 시작해 보았습니다. 기존에도 좋은 Serial 통신 프로그램도 많이 있지만, 개인적으로 조금 원하는 부분이 있고, 이런저런 기능을 추가해 보면 어떨까 생각했습니다. 첫 번째 버전은 간단하게 시리얼 포트를 검색하고 데이터를 받고 표시하고 오류들을 처리하는 로직, 로그를 저장, 환경설정 저장하기 기능 등을 기본 기능을 만들었습니다. 그리고 버전 체크하는 부분도 추가해서, 향후 github에서 버전업 release 될 경우 체크 버튼을 누르면 확인할 수 있습니다. 잘 만든 것은 아니지만, 소스를 오픈하고 버전을 조금씩 업데이트해 나가는 방식으로 생각..

Programming/Qt 2025.07.31

[C++] std::vector 기본 사용법 알아보기

안녕하세요. 이전 글에서 std::array에 대해 알아보았습니다. 이번 글에서는 std::array의 단점을 보완한 새로운 컨테이너인 std::vector에 대해 자세히 알아보겠습니다. 1. std::array의 한계점 std::array는 정적 배열의 장점을 가지지만, 몇 가지 한계점을 가지고 있습니다. (1) 컴파일 시 크기 결정: std::array의 크기는 컴파일 시간에 결정되는 상수여야 합니다. 이 말은 프로그램이 실행되는 동안에는 배열의 크기를 변경할 수 없다는 의미입니다. (2) 크기 고정 및 원소 추가/삭제 불가: 크기가 고정되어 있기 때문에, std::array는 런타임에 원소를 추가하거나 삭제할 수 없습니다. 이는 유연성이 필요한 상황에서 큰 단점이 됩니다. (3) 스택 메모리 ..

Programming/Qt 2025.07.27

[Qt] QCustomPlot이용한 차트(Chart) 기본 사용법 알아보기

안녕하세요. 우리가 많은 데이터가 있다면 정리해서 표로 보곤 합니다. 그러나 한눈에 잘 들어오지는 않습니다. 그래서 시각화하는 것이 그래프 혹은 차트일 것입니다. Qt 자체에서 제공해 주는 Chart를 이용할 수 있 수 있습니다. 그러나 조금 자유도가 있고, 여러 가지 설정을 해볼 수 있는 알려준 오픈소스가 있어서 간단하게 사용하는 방법을 알아보겠습니다. 1. QCustomPlot 란 QCustomPlot 사이트에 있는 정보를 조금 가져왔습니다. QCustomPlot은 플로팅 및 데이터 시각화를 위한 Qt C++ 위젯입니다. 추가 종속성이 없으며 문서화가 잘 되어 있습니다. 이 플로팅 라이브러리는 보기 좋고 출판 품질이 높은 2D 플롯, 그래프 및 차트를 만드는 데 중점을 두고 있으며, 실시간 ..

Programming/Qt 2025.07.25

Qt에서 응용 애플리케이션(실행 프로그램) 아이콘 추가하는 방법 알아보기

안녕하세요. Qt로 프로그램을 만들 후에 배포하려고 할 때, 프로그램의 고유의 아이콘도 있으면 추가하면 좋다고 생각할 것입니다. 프로그램을 빌드하면 디폴트(기본)로 생성되는 아이콘이 생성됩니다. 이번에는 프로그램에 특징에 맞는 아이콘이 적용해 보겠습니다. 아이콘을 적용 방법을 알고자 하는 내용이기 때문에 ChatGPT를 이용해서 샘플 멀티 이미지를 생성했습니다. 1. 테스트 환경 (1) Windows11 환경, 빌드 환경은 Qt6.8.3, CMake 사용 (2) 아이콘을 위한 디자인 요청 및 멀티 아이콘 파일 생성은 ChatGPT 사용 아이콘을 위해 만든 이미지가 있다면 ChatGPT에 윈도우 실행파일(. exe)을 위한 멀티 아이콘을 생성해 달라고 하면 Python 코드가 나오면서 파일을 만..

Programming/Qt 2025.07.20

[Qt] 애플리케이션을 windeployqt.exe 이용해 배포버전 버전 만들기

안녕하세요. Qt로 개발된 애플리케이션을 배포하려면, 앱이 실행되는 데 필요한 모든 Qt 라이브러리 및 종속성 파일을 함께 제공해야 합니다. 여러 dll 파일을 매번 복사하고 또 어떤 dll 파일이 필요한 찾아내는 것도 귀찮은 일입니다. 이 과정을 windeployqt.exe 도구를 사용하면 효율적으로 수고를 줄일 수 있습니다. 1. windeployqt.exe란 무엇인가? windeployqt.exe는 Qt 설치 시 함께 제공되는 유틸리티입니다. Windows 환경에서 Qt 애플리케이션을 배포할 때 필요한 모든 Qt 관련 DLL 파일, 플러그인, 번역 파일 등을 자동으로 수집하여 애플리케이션 실행 파일과 동일한 디렉터리 또는 지정된 디렉터리에 복사해 주는 도구입니다. 수동으로 이 모든 파일들을..

Programming/Qt 2025.07.19

[Qt] fritzing (회로설계) Open Source 빌드해보기 (실패담)

안녕하세요. OR CAD처럼 전문적인 회로도 구성은 아니지만, 조금 쉽게 회로도를 만들고, PCB까지 만들 수 있는 제작할 수 있는 프로그램입니다. fritzing은 Qt로 오픈소스로 되어 있어 참여도 해볼까 생각도 들어 빌드해 보았는데 될 듯 말 듯하다가 결국 실패한 내용 공유드립니다. 프로젝트가 중간에 한번 중지되었다가 다시 진행되는 것 같은데, 유료 버전과 빌드해서 사용하는 사람들에게는 무료다 보니 빌드 자료는 업데이트가 되지 않는 듯합니다. 실패한 것을 왜 올리느냐 할 수 있는데, Gemini와 GPT에게 물어 가면서 했지만, 사람을 실험시키는 아직 미완성 AI 내용을 따라 했기 때문에 아마 시도한다면 비슷하게 할 것이라 생각되어 미리 프롬프트 등을 입력해서 작업을 하는 것에 도움이 될..

Programming/Qt 2025.07.03

[Qt] Qt Creator에서 생성한 python 가상환경에서 PySide6 작업하기

안녕하세요. Qt Creator 툴을 사용하면서 Python도 가능하다는 것을 알고 있을 것입니다. PySide6을 사용하면서 코딩하면 되는 것 아니냐고 할 수 있는데, 가상환경을 이용한다면 라이브러리도 설치하고 배포할 리스트화 할 수 있습니다. 간단하게 사용하는 방법을 알아보겠습니다. 프로젝트 환경은 Windows11, Qt 6.8.3에서 진행했습니다. 1. Qt for Python 프로젝트 생성 기본적인 프로젝트 방법은 동일합니다. 선택을 Qt for Python으로 합니다. 그리고 UI도 가능한 것을 확인하기 위해서 Window UI를 선택합니다. Project Location, Name과 Define Class Name은 원하는 것으로 하면 됩니다. 여기서는 Name을 Qt_f..

Programming/Qt 2025.06.28

[Qt for Android] 카메라 영상 확인을 위한 yuv raw 데이터 저장 및 프레임 확인하기

안녕하세요. 안드로이드 카메라 영상(yuv) 프레임 데이터를 출력하면서 저장된 프레임이 잘 나오지 않아서 확인해 보았습니다. 테스트 환경은 Qt Creator와 Qt for Android(6.8.3), galaxy S20을 이용했습니다. 1. yuv Raw 데이터 저장 카메라 영상을 가지고 오는 로직은 제외했습니다. 영상 데이터가 전달되었다고 생각이 드는데, 영상이 나오지 않는다면, 간단하게 첫 프레임을 저장해서 확인해 보는 것입니다. void VideoWidget::slotImageReady(uint8 * data, int size, int width, int height, int format, int bpl){ QMutexLocker locker(&m_mutex); if (!i..

Programming/Qt 2025.06.22

[Qt] github에 push 하기 위한 win-ssh-askpass 대안 qtc-askpass

안녕하세요. github에 push 하기 위해 ssh-key 생성 시 암호를 설정했다면, Qt에서 원격지로 전송할 때 암호창이 나타나지 않아서 bash에서 수동으로 passphrase(암호)를 입력하는 경우 있을 겁니다. 설정창에는 기본으로 win-ssh-askpass 실행파일로 되어 있는데, 파일이 다운로드하거나 찾을 수 없어서 bash로 하는 경우가 있는데, qt에서 지원해 주는 ssh 암호창이 있어 공유해 봅니다. 1. github에 push 할 경우 문제 상황 로컬에서 git을 사용할 때는 원격지 전송이 필요하지 않기 때문에 문제가 없지만, 원격지로 push 하면 아래와 에러가 발생합니다. 특별한 설정을 하지 않았다면, win-ssh-askpass를 찾아 시도하지만, 파일이 없다고..

Programming/Qt 2025.06.08

[Qt] gRPC, Protocol Buffers 사용 시 라이브러리 추가 방법

안녕하세요. 두 개 이상의 프로그램 상에서 구조화된 데이터를 보낼 때 Serialized 해서 네트워크로 보냅니다. 최근에 구글에서 효율적인 데이터를 직렬화와 서비스 간 통신을 가능하게 해주는 기술(gRPC, Protocol Buffers)이 있다고 해서 확인해 보았습니다. 간단하게 내용을 확인하고 Qt에서 라이브러리 추가하는 방법 알아보겠습니다. 1. gRPC와 Protocol Buffers 간략한 개념 1) gRPC 란 gRPC는 Google이 개발한 고성능 오픈소스 원격 프로시저 호출(Remote Procedure Call, RPC) 프레임워크입니다. 서비스 간의 통신을 마치 로컬 함수 호출처럼 수행할 수 있도록 설계했고, 몇 가지 특징이 있습니다. HTTP/2 기반의 고속 전송..

Programming/Qt 2025.05.29

[Qt] C++ 컨테이너 순회, '범위 기반 for' 사용 및 최적화 방법

안녕하세요. Qt/C++로 코딩하다 보면 std::vector나 QList 같은 컨테이너 안의 데이터들을 하나씩 검색 혹은 출력할 때가 있습니다. 예전에는 foreach (또는 Qt의 Q_FOREACH) 같은 방식을 쓰기도 했지만, 요즘 C++에서는 훨씬 더 깔끔하고 효율적인 방법이 있습니다. 바로 '범위 기반 for 루프'입니다. 이것을 사용하면 조금 더 코드가 좋아지는 이유와 Qt 사용자를 팁을 하나 공유해 보고자 합니다. 1. 예전 방식의 foreach, Q_FOREACH 예전에 쓰던 foreach나 Qt의 Q_FOREACH는 특정 컨테이너들을 순회할 때 편리했지만, 몇 가지 불편한 점이 있습니다. 모든 C++ 환경에서 똑같이 돌아가지 않을 수 있었고, 내부 동작이 복잡해서 코드를 읽거나 문..

Programming/Qt 2025.05.14

How to Resolve Warning Messages When Adding Header Files in Qt 6.8.1

Hello,  I'd like to share how to resolve the persistent warning messages that appear when adding header files while using Qt 6.8.1. 1. Warning Message Even when creating a basic Qt widget project, the following warning message appeared (with QMake configuration): D:\project\02_qt\01_error_test01\widget.cpp:2:warning: Included header ui_widget.h is not used directly (fix available)    I thought i..

Programming/Qt 2025.04.08

Qt QMap의 iterator와 auto 상식 +1

안녕하세요.   간단하게 QMAP 클래스 사용하다가 iterator방법에 대해서 좀 더 알고 있으면 좋을 것  같아서 간략하게 남겨 보았습니다. 테스트 환경은 Qt 6.8.1입니다.  1. QMap은?  Qt 프레임워크에서 제공하는 데이터 컨테이너 클래스로, 키(key)와 값(value)의 쌍을 저장하는 연관 컨테이너입니다. 이는 정렬된 맵(sorted map) 자료 구조로 구현되며, 키가 자동으로 정렬됩니다.   QMap 사용법은 알고 있으리라 생각되어서 자세한 방법은 넘어가도록 하겠습니다. 간단하게 설명하자면 템플릿(template) 또는 제네릭(generic) 타입으로 변수를 선언하고, 키와 값을 쌍으로 저장하거나 읽으면 됩니다. QMap map;map["Apple"] = 1;map.insert("..

Programming/Qt 2025.03.11

Getting GPS Permissions Using the Qt Library in Qt for Android - Part 1

Hello everyone interested in Qt for Android.   Following my previous post on debugging in Qt for Android, I've now looked into how to retrieve GPS values. There are two main approaches: the first uses the Qt Library, and the second involves handling values with JNI and simply displaying them. In this article, we’ll go through the first approach. There isn’t much information available online for ..

Programming/Qt 2024.11.08

Setting Up adb Debugging and Viewing Logcat Messages with Qt

안녕하세요.   Qt 프로그래밍이 국내보다는 외국에서 조금 더 많이 사용하는 것으로 생각되어 영문으로 내용을 구성해 보았습니다. 쉬운 글로 되어 있으니 어렵지 않게 흐름 파악을 할 수 있을 것이라 생각됩니다.   When developing an Android app with Qt, basic debugging can be done through the Application Output. However, as you dive deeper into development using JNI and similar features, you may find the Output messages insufficient.  You’re likely already using Logcat in Android Studio. ..

Programming/Qt 2024.11.06

Android Emulator 사용 시 intel HAXM is deprecated 해결 방법

안녕하세요.  Qt로 안드로이드 앱을 개발하다 보니, 이런저런 에러나 방법들을 알게 되어 공유해 보는 시간을 조금 가져보려고 합니다.  아래내용은 Qt 뿐만 아니라, 안드로이드 에뮬레이터를 사용한다면 HAXM 지원중단이라는 메시지를 볼 수 있습니다. 그래서 HAXM 이 무엇이고 어떻게 해결하는지 찾아본 내용을 남겨 보았습니다.  인텔(Intel)에서 지원을 중단해서 굳이 자세히 알 필요는 없지만, 이것 때문에 나타나는 거구나. 해결책을 알고 있으면 좋을 것 같아서 공유드립니다.   1. Intel HAXM 이란?  Intel HAXM(Hardware Accelerated Execution Manager)은 Android 에뮬레이터와 같은 가상 머신(VM)에서 하드웨어 가속을 가능하게 해주는 가상화 엔진입..

Programming/Qt 2024.11.05

Qt6.x 조금 빠르게 설치하기(mirror 서버 이용)

안녕하세요.  스마트폰 앱개발을 조금 도와줄 일이 생겨 Qt for android를 사용하게 되었습니다.    이전 Qt5.x는 Offline installer 파일이 있어 복사해서 빠르게 설치했습니다. 그러나 최근에는 여러 버전들이 나오면서 Online Installer로 설치하는 형태가 변경되었습니다. 그리고 회원가입과 로그인을 해야 다음을 진행할 수 있습니다.  Online Installer 파일은 금방 다운로드할 수 있습니다. 그러나 설치하기 위한 다운로드 파일들을 다운로드하는 것은 너무 오래 걸린다는 것이 문제입니다.  그래서 검색하는 중에 mirror 옵션이라는 것이 있다는 것을 알게 되었습니다. 기본 다운로드 서버가 어디인지는 모르겠지만, 개발하는 곳에서 가장 가까운 서버를 이용하는 것이 다..

Programming/Qt 2024.11.02

VirtualBox 가상환경의 리눅스(Ubuntu)에 안드로이드용 Qt 설치 및 AVD(Emulator)에서 실행해 보기

안녕하세요. 리눅스용 안드로이드용 Qt 설치해야 할 일이  있어서 테스트한 내용을 정리해 보았습니다.안드로이드용 Qt를 윈도우에서는 설치하는 것은 크게 문제 되지 않았습니다. 의외로 리눅스에서는 조금 어려움이 있었습니다. 안드로이드 스튜디오, 리눅스, JDK 등 버전 호환성 잘 맞게 설치하여 한번에 실행된다면  좋은 일이라고 생각됩니다.  위와 버전 문제등으로 AVD(에뮬레이터)가 작동하지 않는 등 경우가 있다는 것도 알아두시면 좋을 듯합니다.  결론적으로 PC 테스트 환경 등으로 여러 곳에 테스트하지 못해서 완벽하게 동작한다는 결론을 보지 못했습니다. 그렇지만 이렇다 정도 참고하시면 좋을 듯합니다.   1. 테스트 환경  1차 테스트는 VirtualBox에 Ubuntu22.04 LTS 버전을 설치해서 ..

Programming/Qt 2024.09.13