티스토리

1D1C
검색하기
블로그 홈

블로그 홈

1D1C

1d1cblog.tistory.com/m
신고

개인공부 정리 블로그

구독자
104
방명록 방문하기

주요 글 목록

  • [Qt] QTreewidget 메모리 해제 없이 비우기 보통 QTreeWidget에서 아이템을 싹 비우려고 할 때 Clear() 함수를 많이 사용합니다. 하지만 이 함수의 경우 QTreeWidget에 가지고 있는 아이템들의 메모리를 해제시키기 때문에 아래와 같이 아이템을 다시 불러오려고 할 때 문제가 생기게 됩니다.class Test { Test(uchar nItemCount) { for ( int i=0; i getItems() { return Items; } QList Items;};int main() { Test* t1 = new Test(3); Test* t2 = new Test(10); auto items = t1->getItems(); for ( auto i : items ) { ui->tr.. 공감수 1 댓글수 0 2024. 11. 27.
  • [Qt] QtConcurrent mappedReduced 사용하기 예전 포스팅에서 소개했던 QtConcurrent를 사용하면 간단하고 Qt Event에 특화된 비동기 처리가 가능합니다. 이 QtConcorruent에서 제공하는 map-reduce 패턴을 사용할 수 있습니다. map-reduce 패턴을 간단히 설명하자면 수행할 작업을 분산하여 처리하고 하나로 모은다고 생각하시면 됩니다.QtConcurrent::mappedReuced 함수 원형입니다.template QFuture::ResultType>mappedReduced(const Sequence &sequence, MapFunction mapFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions options = QtConcurrent::Sequen.. 공감수 0 댓글수 0 2024. 11. 8.
  • [Qt] QTreeWiget Data Json 형태로 Save/Load 하는 방법 QTreeWidget에 Data를 추가 한 후 Json 형태로 Save 및 Load 하는 방법입니다. 먼저 좌측에 간단한 데이터가 입력된 Tree가 있고 Save로 Data를 Json 형태로 저장 후 Load 시 우측의 Tree에 Json Data를 출력하는 간단한 예제입니다. 아래는 코드 입니다. Save 버튼을 클릭했을 때 Tree의 정보를 Json형태로 Save 하고 Load 버튼을 클릭했을 때 Json을 읽어서 Tree에 Item을 생성하여 넣어줍니다.MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); connect ( ui->btnSave, &QPushBu.. 공감수 0 댓글수 0 2024. 11. 6.
  • [Qt] 다른 쓰레드에서 QTimer 처리하기 기본적으로 QTimer를 만들고 timeout Singal을 connect 해준다면 Main Thread에서 Slot이 처리됩니다. 이럴 때 QThread를 생성 후 Timer를 그 쓰레드로 이동시켜 사용한다면 Main Thread가 아닌 생성한 Thread에서 처리가 됩니다.class timerMgr : public QObject { Q_OBJECTpublic: timerMgr() { for ( int i=0; i setObjectName("Timer" + QString::number(i)); t->setInterval(QRandomGenerator::global()->bounded(100, 2000)); connect ( t, &QTime.. 공감수 1 댓글수 1 2024. 10. 22.
  • [Qt] QTableWidget header 정보는 남기고 내용만 지우기 void clearOnlyItem(QTableWidget* table){ table->setRowCount(0);} 공감수 0 댓글수 0 2024. 7. 18.
  • [Qt] Qt + PCAN API를 이용한 CAN Chat 프로그램 Windows / PCAN USB를 가지고 ISOTP 혹은 CAN-FD로 간단하게 채팅할 수 있는 프로그램을 제작해 보았습니다. PCAN API C++ 관련 자료가 많이 없어 이 API를 가지고 개발하시려는 분들께 도움이 됐으면 좋겠습니다.  GitHub - psy1064/PCAN-ChatContribute to psy1064/PCAN-Chat development by creating an account on GitHub.github.com 공감수 0 댓글수 0 2024. 7. 18.
  • [Qt] QString::toInt 주의사항 QString의 toInt는 정수형태의 문자열을 정수로 변환시켜주는 함수입니다. 그런데 이 호출하는 함수에 맞지 않는 문자열 값을 가지고 있으면 제대로 처리가 되지 않습니다.int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); QString sUInt = "123"; QString sInt = "-123"; QString sFloat = "123.12"; bool ok; qDebug() 위 실행결과를 보면 알 수 있듯이 해당 함수를 통해 얻고 싶은 자료형이 아닌 문자열이 호출되면 0이 반환되고 인자로 넘겨준 flag에는 false 가 나오게 됩니다. 이를 방지하기 위해서는 toInt(), toFlo.. 공감수 0 댓글수 0 2024. 6. 24.
  • [Qt] Drag&Drop으로 QTreeWidget 제어하기 Qt에서는 기본적으로 Drag&Drop Action을 지원합니다. 아래의 코드를 사용하면 QTreeWidget에 기본적으로 구현된 내부 Drag & Drop Action이 실행됩니다.MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow){ ui->setupUi(this); ui->originTree->setSelectionMode(QAbstractItemView::SingleSelection); ui->originTree->setDragEnabled(true); ui->originTree->viewport()->setAcceptDrops(true); ui->origin.. 공감수 0 댓글수 1 2024. 6. 14.
  • [Qt] Qt Concurrent를 통한 비동기 처리 Qt에서 멀티 쓰레딩을 사용하기 위해서 QThread를 상속받아서 처리하는 예제를 소개한 적이 있습니다. Qt QThread 사용하기(화면 실시간 갱신하기)센서값을 수집해서 실시간으로 실행창에서 최신화하고 갱신하는 방법에 대해 소개해 드리겠습니다. 먼저 QThread를 상속받는 클래스를 하나 만들어 줍니다. 생성된 qTh.h 파일에 소스코드를 아래1d1cblog.tistory.comQtConcurrent를 사용하면 간단하게 비동기 멀티 쓰레딩을 할 수 있습니다. 이를 Qt에서 제공하는 Example을 같이 살펴보며 필요한 부분에 대해 같이 공부해보려 합니다. Example은 Qt Creator > Examples에서 concurrent로 검색하여 첫 번째 예제인 Image Scaling을 사용하려 합니다.. 공감수 0 댓글수 0 2024. 1. 12.
  • [Qt] Windows cmd 명령어 실행 및 결과 얻어오기 QProcess를 이용해서 cmd 명령어를 실행 후 결과를 얻어오는 코드입니다. QProcess *m_process = new QProcess(this); QString program = "ipconfig"; QStringList arguments; arguments start(program, arguments); m_process->waitForFinished(3000); QByteArray result = m_process->readAll(); auto converter = QStringDecoder(QStringDecoder::System); QString string = converter(result); qDebug() close(); delete m_process; 공감수 0 댓글수 0 2023. 12. 14.
  • [Qt] 레이아웃에 있는 위젯 교체하기(replaceWidget) Combobox에 따라 Layout에 있는 Label을 바꾸려고 합니다. Combobox에 index가 바뀌면 replaceWidget 함수를 호출하도록 작성했습니다. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); QLabel* pLabel = new QLabel("test1"); QLabel* pLabel2 = new QLabel("test2"); labelList.append(pLabel); labelList.append(pLabel2); ui->comboBox->addItem(pLabel->text(), 0); ui->comboBox->addItem(pL.. 공감수 0 댓글수 2 2023. 12. 6.
  • [Qt] TreeWidget 사용하기 Qt를 설치할 때 볼 수 있던 아래와 같은 구조가지는 UI Component를 TreeWidget이라고 합니다. Qt에서 TreeWidget을 사용하는 법에 대해 간단히 소개하려고 합니다. 먼저 UI는 아래와 같이 구성했습니다. 상단에 QTreeWidget 그리고 하단에는 선택한 Item의 Text를 확인할 수 있는 Label과 선택된 Item에 자식 Item을 추가할 수 있는 Insert와 해당 Item을 지울 Delete 버튼입니다. 먼저 간단하게 Header와 몇가지 Item을 추가해보겠습니다. #include "mainwindow.h" #include "./ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) .. 공감수 0 댓글수 3 2023. 12. 1.
  • [Qt] TableWidget 사용하기 먼저 Ui에 tablewidget을 하나 추가합니다. Ui에서 더블클릭하여 Column을 추가하거나 cpp 코드에서 아래와 같이 컬럼을 추가합니다. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); AddColumns(); } void MainWindow::AddColumns() { for(int i = 0 ; i tableWidget->insertColumn(i); } // ui->tableWidget->setColumnCount(16); QStringList lHeader; lHeader setHorizontalHeaderLabe.. 공감수 1 댓글수 4 2023. 11. 21.
  • [Qt] 단일 SLOT 함수로 여러 QObject의 SIGNAL 대응하기 하나의 Signal을 처리할 때 여러 Slot 함수를 만들지 않고 싶다면 sender() 함수를 사용하여 처리할 수 있습니다. 이전 포스팅에서 사용했던 QSplitter로 예를 들어보겠습니다. Horizontal, Vertical QSplitter가 있습니다. QSplitter의 이동이 끝나면 splitterMoved라는 Signal이 발생하고 이 Signal이 발생됐을 때 하나의 Slot 함수로 처리하고 싶습니다. connect(horizonSplitter, SIGNAL(splitterMoved(int, int)), this, SLOT(slot_setSpliterState(int, int))); connect(verticalSplitter, SIGNAL(splitterMoved(int, int)), t.. 공감수 0 댓글수 0 2023. 10. 25.
  • [Qt] QSplitter 사용하기 QSplitter를 사용하면 화면에 배치된 UI Component의 크기를 마우스 드래그로 동적으로 조절할 수 있습니다. 위와 같은 ui가 있을 때 TabWidget 안에 Group Box 간, 그리고 TabWidget과 하단의 Text Browser 간에 사이즈를 조절하고 싶을 때 아래와 같이 코드를 작성합니다.#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); QSplitter* sp = new QSplitter(); sp->addWidget(ui->groupBox); sp->addWidget(ui->groupBox_2); ui->horizont.. 공감수 0 댓글수 0 2023. 10. 25.
  • [Qt] Qt Console Application 실행 시 console 창 안뜨는 경우 Qt Console Application을 만들고 Run을 시켰는데 Console 창이 안뜨고 아래 Application Output Pannel에 결과가 나오는 경우가 있습니다. QT -= gui CONFIG += c++17 console CONFIG -= app_bundle # You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp.. 공감수 0 댓글수 1 2023. 5. 19.
  • [Qt] Qt Creator 10.0 Qt Quick Application 생성 불가 해결 기존에 설치된 Qt를 재설치 했더니 Qt5 버전에서 Quick Applicaiton Create가 안되는 증상이 있었습니다. 확인해보니 Qt Creator 10.0을 설치하면 Build System에 qmake가 없는 증상이 있고 그렇기 때문에 project를 생성할 수 없었습니다. 해당 문제를 해결하기 위해 Qt Creator 9.0으로 다운그레이드 하여 사용하겠습니다. 아래 링크를 통해 Qt Creator를 재설치 해줍니다. Index of /official_releases/qtcreator/9.0/9.0.0 download.qt.io qt-creator-opensource-windows-x86_64-9.0.0.exe을 설치합니다. 경로는 기본으로 설치합니다. 설치가 완료됐으면 방금 설치한 QtCre.. 공감수 0 댓글수 3 2023. 4. 29.
  • [Qt] Static Build (exe 파일 단독 실행) Qt Creator를 통해 빌드한 결과물인 exe 파일을 단독으로 실행하면 아래처럼 오류 메시지가 나오게 됩니다. 실행파일을 실행하기 위해선 Qtcore에 명시한 dll들이 필요한데 그 dll들이 없어서 위와 같이 오류가 뜨게 됩니다. 이러한 dll들을 자동으로 추가해주는 windeployqt라는 툴도 있습니다. [Qt] windeployqt 사용하기 Qt5부터 사용할 수 있는 windeployqt는 빌드 시 생성한 실행파일을 단독으로 실행할 수 있게 필요한 라이브러리를 자동으로 추가해주는 툴입니다. 그 후 프로젝트가 저장된 폴더로 이동하면 Release 1d1cblog.tistory.com 이번에는 dll 없이 단독으로 실행할 수 있게 Static build 환경을 만들어보겠습니다. 먼저 Qt Main.. 공감수 1 댓글수 0 2023. 4. 20.
  • [Qt] QML 정리 포스팅 모음 QML 공부하면서 정리한 포스팅 링크 모음입니다. [Qt] QML(0) - Qt Quick Application 시작하기 기존에 Qt Widget을 이용하여 UI를 구성하는 방법 말고도 Qml을 이용하여 UI를 구성하는 방법에 대해 공부해보려 합니다. Qt Creator를 실행 후 Create Project > Qt Quick Application을 선택합니다. 프로젝트를 1d1cblog.tistory.com [Qt] QML(1) - Object, Layout, Event 지난 포스팅에서 Qt Quick Application 프로젝트를 생성하는 부분까지 포스팅했습니다. [Qt] Qt Quick Application 시작하기 기존에 Qt Widget을 이용하여 UI를 구성하는 방법 말고도 Qml을 이용하여.. 공감수 0 댓글수 2 2023. 4. 20.
  • [Qt] QML(8) - SoundEffect, ComboBox ListModel 적용 이전 포스팅에서 ListView에 아이템을 QAbstractModel을 상속받은 클래스를 통해 동적으로 관리하는 예제를 진행해봤습니다. [Qt] QML(7) - ListView/Model C++ 로 처리하기 이전 포스팅에서 ListView를 QML로 보여주고 그 안에서 동적으로 관리하는 예제를 살펴봤습니다. [Qt] QML(2) - State/Transition, ListView, Property 지난 포스팅에선 간단히 오브젝트와 컨테이너를 이용해서 1d1cblog.tistory.com 이번 포스팅에서는 Combobox에 위와 같이 Model을 적용시켜 보고 이전에 만들었던 TimeTimer에 시간이 다 되었을 때 알림 소리를 낼 수 있게 SoundEffect, Sound를 적용시켜 보겠습니다. 위 예제.. 공감수 1 댓글수 0 2023. 4. 20.
  • [Qt] QML(7) - ListView/Model C++ 로 처리하기 이전 포스팅에서 ListView를 QML로 보여주고 그 안에서 동적으로 관리하는 예제를 살펴봤습니다. [Qt] QML(2) - State/Transition, ListView, Property 지난 포스팅에선 간단히 오브젝트와 컨테이너를 이용해서 배치하고 이벤트 처리를 하는 예제를 해봤습니다. [Qt] QML UI 구성하기(1) 지난 포스팅에서 Qt Quick Application 프로젝트를 생성하는 부분까 1d1cblog.tistory.com 이번에는 C++에서 AbstractItemModel을 상속받아 Model을 만들고 그 Model을 가지고 데이터를 처리해보겠습니다. 예전에 설명했듯이 List로 데이터를 Display하기 위해서 Model(데이터), View(리스트 그려줌), Delegate(St.. 공감수 0 댓글수 0 2023. 4. 19.
  • [Qt] QML(6) - Loader, Binding, Connection 이전 예제로 TimeTimer를 만들어보면서 다른 Window를 Open 해보고 QML/C++ 간에 Signal과 Property를 통해 데이터를 연동하거나 신호를 주고받기도 하였습니다. [Qt] QML(5) - TimeTimer 프로그램 만들기 QML으로 간단하게 TimeTimer라는 프로그램을 제작하면서 다른 기능도 사용해 보겠습니다. 이 예제를 진행하면서 만들어볼 간단한 프로그램은 TimeTimer입니다. TimeTimer는 위와 같이 생긴 시계인데 예 1d1cblog.tistory.com 이번에는 동적으로 다른 qml을 Load해서 사용할 수 있는 Loader에 대해 알아보려 합니다. UI는 간단하게 아래처럼 구성되어 있습니다. 왼쪽에는 버튼들이 있고 버튼들을 클릭할 때마다 그에 맞는 qml 파일.. 공감수 0 댓글수 0 2023. 4. 18.
  • [Qt] QML(5) - TimeTimer 프로그램 만들기 QML으로 간단하게 TimeTimer라는 프로그램을 제작하면서 다른 기능도 사용해 보겠습니다. TimeTimer는 위와 같이 생긴 시계인데 예전에 크롬 확장 프로그램 만들기에서도 진행했었는데 예제로 사용하기 괜찮아서 이번에는 Qt/QML로 한번 만들어보면서 익숙해져보려 합니다. 크롬 확장프로그램 Time Timer 개발하기 - 4 이제 만들어진 시계 타이머 둘레에 숫자를 입력해보겠습니다. 현재 만든 시계의 좌표는 아래와 같습니다. 이 원의 둘레 주변에 1 ~ 12의 숫자를 넣어주려고 합니다. 우선 간단하게 12시에만 숫자 1d1cblog.tistory.com 먼저 완성된 UI부터 보여드리겠습니다. Main 화면 UI입니다. 가장 위부터 설정할 수 있는 window를 띄워줄 Button, 시계 UI, 시간.. 공감수 0 댓글수 0 2023. 4. 17.
  • [Qt] QML(4) - QML/C++ 통합하기(Q_PROPERTY, Q_INVOKABLE, SIGNAL) Qt Widget Application Project에서는 ui 파일에서 ui를 배치하고 c++ 코드에서 그 ui에 접근하여 수정하기도 했습니다. 그리고 c++ 코드에서 동적으로 UI를 배치할 수도 있었습니다. Qt Quick에서도 C++과 QML 사이에 주고받을 수 있는 방법이 여러 존재하는데 그에 대해 알아보려 합니다. 간단히 계산기 예제를 통해서 알아보겠습니다. 먼저 property를 이용한 방법입니다. qml 파일을 간단히 두 숫자를 계산하고 결과를 보여주는 ui로 구성하였습니다. import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15 Window { visible: true width : 650 height: 200.. 공감수 0 댓글수 0 2023. 4. 13.
  • [Qt] QML(3) - Control Object 이전 포스팅까지는 스위치 ON/OFF 예제라던지 등에 Rectangle에 MouseArea를 이용하여 버튼과 비슷한 동작을 만들어 사용했습니다. QtQuick.Controls 모듈을 import할 시 사용할 수 있는 Control Object는 기존의 Button과 같은 UI들을 제공하기 때문에 이 포스팅에서는 몇개의 오브젝트 예제를 다뤄보려 합니다. 먼저 Button입니다. 간단하게 Button Object를 생성하면 Item에 MouseArea 처리 없이 Button으로 사용이 가능합니다. import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15 Window { width: 640 height: 480 visible: tr.. 공감수 0 댓글수 0 2023. 4. 12.
  • [Qt] QML(2) - State/Transition, ListView, Property 지난 포스팅에선 간단히 오브젝트와 컨테이너를 이용해서 배치하고 이벤트 처리를 하는 예제를 해봤습니다. [Qt] QML UI 구성하기(1) 지난 포스팅에서 Qt Quick Application 프로젝트를 생성하는 부분까지 포스팅했습니다. [Qt] Qt Quick Application 시작하기 기존에 Qt Widget을 이용하여 UI를 구성하는 방법 말고도 Qml을 이용하여 UI를 구성하 1d1cblog.tistory.com 이번에는 State와 Property 등에 대해 알아보려고 합니다. State는 Transition이라는 개념과 같이 나오는데 스위치를 예를 들자면 스위치는 ON/OFF State가 있고 ON/OFF를 할때마다 설정한 값이 바뀌게 되는데 이에 대한 행동이나 작업을 Trasition이라고.. 공감수 0 댓글수 0 2023. 4. 12.
  • [Qt] QML(1) - Object, Layout, Event 지난 포스팅에서 Qt Quick Application 프로젝트를 생성하는 부분까지 포스팅했습니다. [Qt] Qt Quick Application 시작하기 기존에 Qt Widget을 이용하여 UI를 구성하는 방법 말고도 Qml을 이용하여 UI를 구성하는 방법에 대해 공부해보려 합니다. Qt Creator를 실행 후 Create Project > Qt Quick Application을 선택합니다. 프로젝트를 1d1cblog.tistory.com 오늘은 이어서 간단히 UI를 작성해보려 합니다. QML의 구성은 아래와 같습니다. 모듈을 사용하기 위해 import를 가장 상단에 기입합니다. 그 아래로부터 오브젝트들을 기입하는데 오브젝트들에는 그에 맞는 속성(Property)들에 값을 수정해 UI를 구성해줍니다. .. 공감수 0 댓글수 0 2023. 4. 10.
  • [Qt] windeployqt 사용하기 Qt5부터 사용할 수 있는 windeployqt는 빌드 시 생성한 실행파일을 단독으로 실행할 수 있게 필요한 라이브러리를 자동으로 추가해주는 툴입니다. 그 후 프로젝트가 저장된 폴더로 이동하면 Release 폴더가 생긴 것을 확인할 수 있습니다. 그 폴더로 들어가보면 exe 파일이 생성되어 있습니다. 이 exe 파일을 바로 실행시키려 하면 다음과 같이 오류창이 뜨게 됩니다. 제대로 exe파일을 실행파일로 만들기 위해서 MinGW 64-bit를 실행시켜 준 다음 아까 exe 파일이 있던 위치로 이동해줍니다. 창에 windeployqt 명령어로 exe파일을 실행합니다. 명령이 완료되면 아까 폴더에 없던 파일들이 생긴 것을 볼 수 있습니다. 이제 다시 exe 파일을 실행시켜보면 제대로 실행이 되는 것을 확인할.. 공감수 2 댓글수 0 2023. 4. 7.
  • [Qt] QTime to Seconds / Second to QTime Time 형태로 생긴 데이터가 있다고 했을 때(ex) 12:34:56) 이 데이터를 QTime으로 변환 후 Seconds로 변환하기 위해서는 아래 코드를 사용합니다. int QTimeToSeconds(QString sTime) { QTime tTime = QTime::fromString(sTime,"hh:mm:ss"); int nSecond = QTime(0,0,0).secsTo(tTime); return nSecond; } 이제 이 Seconds 값을 다시 QTime 형태로 바꾸기 위해선 아래처럼 사용합니다. QTime SecondsToQTime(int nSeconds) { QTime time(0,0,0); time = time.addSecs(nSeconds); return time; } 공감수 0 댓글수 0 2023. 3. 22.
  • [Qt] QML(0) - Qt Quick Application 시작하기 기존에 Qt Widget을 이용하여 UI를 구성하는 방법 말고도 Qml을 이용하여 UI를 구성하는 방법에 대해 공부해보려 합니다. Qt Creator를 실행 후 Create Project > Qt Quick Application을 선택합니다. 프로젝트를 생성하면 main.cpp 파일과 main.qml 파일이 자동으로 생성됩니다. #include #include int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; const QUrl url(u"qrc:/untitled/main.qml"_qs); QObject::connect(&engine, &QQmlApplicationEngine::o.. 공감수 1 댓글수 1 2023. 3. 20.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.