Programming/qt2026. 3. 30. 11:58

이벤트 처리

[링크 : https://flower0.tistory.com/296]

[링크 : https://coding-chobo.tistory.com/34]

 

 

qt thread / worker

[링크 : https://jheaon.tistory.com/entry/QThread을-사용하여-작업-단위-분리하기]

[링크 : https://doc.qt.io/qt-6/qthread.html]

 

qt concurrent (비동기 수행)

[링크 : https://khj1999.tistory.com/229]

 

Qt Concurrent
Qt Concurrent 모듈은 뮤텍스, 읽기-쓰기 잠금, 대기 조건 또는 세마포어와 같은 저수준 스레딩 프리미티브를 사용하지 않고도 멀티스레드 프로그램을 작성할 수 있는 고수준 API를 제공합니다. Qt Concurrent 으로 작성된 프로그램은 사용 가능한 프로세서 코어 수에 따라 사용되는 스레드 수를 자동으로 조정합니다. 즉, 오늘 작성된 애플리케이션은 향후 멀티코어 시스템에 배포할 때 계속 확장할 수 있습니다.

Qt Concurrent 에는 공유 메모리(비분산) 시스템을 위한 MapReduce 및 FilterReduce 구현과 GUI 애플리케이션에서 비동기 계산을 관리하기 위한 클래스 등 병렬 목록 처리를 위한 함수형 프로그래밍 스타일 API가 포함되어 있습니다:

[링크 : https://doc.qt.io/qt-6/ko/qtconcurrent-index.html]

 

[링크 : https://blog.naver.com/kkyy3402/221332058583]

[링크 : https://truelightn.tistory.com/8]

[링크 : https://1d1cblog.tistory.com/514]

'Programming > qt' 카테고리의 다른 글

Qtimer를 이용한 반복/1회성 이벤트 생성  (0) 2026.03.30
qt6 시그널  (0) 2026.03.30
QLCDNumber class  (0) 2026.03.23
qt qrc 리소스 등록 후 이미지로 띄우기  (0) 2026.03.23
qt 6 프로그래밍 공개 ebook  (0) 2026.03.23
Posted by 구차니
Programming/qt2026. 3. 30. 11:30

결국은 슬롯에다가 시그널 보내는데

 Qtimer::singleShot() 이 있어서 단회성으로 발생이 가능한 듯.

//QTimer::singleShot(30000, ui->lbl_welcome,&QLabel::hide);
QTimer::singleShot(30000,ui->lbl_welcome,SLOT(hide()));

[링크 : https://forum.qt.io/topic/65799/how-to-display-label-for-30-seconds-and-then-hide-it/5]

[링크 : https://dev-astra.tistory.com/432]

[링크 : https://dongyeop00.tistory.com/86]

 

 

void QTimer::start(std::chrono::milliseconds interval)
Starts or restarts the timer with a timeout of duration interval milliseconds.

This is equivalent to:

timer.setInterval(interval);
timer.start();

If the timer is already running, it will be stopped and restarted. This will also change its id().

If singleShot is true, the timer will be activated only once.

Starting from Qt 6.10, setting a negative interval will result in a run-time warning and the value being reset to 1ms. Before Qt 6.10 a Qt Timer would let you set a negative interval but behave in surprising ways (for example stop the timer if it was running or not start it at all).

[링크 : https://doc.qt.io/qt-6/qtimer.html#start-2]

 

template <typename Duration, typename Functor> void QTimer::singleShot(Duration interval, const QObject *context, Functor &&functor)
[static]template <typename Duration, typename Functor> void QTimer::singleShot(Duration interval, Qt::TimerType timerType, const QObject *context, Functor &&functor)
[static]template <typename Duration, typename Functor> void QTimer::singleShot(Duration interval, Functor &&functor)
[static]template <typename Duration, typename Functor> void QTimer::singleShot(Duration interval, Qt::TimerType timerType, Functor &&functor)
This static function calls functor after interval.

It is very convenient to use this function because you do not need to bother with a timerEvent or create a local QTimer object.

If context is specified, then the functor will be called only if the context object has not been destroyed before the interval occurs. The functor will then be run the thread of context. The context's thread must have a running Qt event loop.

If functor is a member function of context, then the function will be called on the object.

The interval parameter can be an int (interpreted as a millisecond count) or a std::chrono type that implicitly converts to nanoseconds.

Starting from Qt 6.10, setting a negative interval will result in a run-time warning and the value being reset to 1ms. Before Qt 6.10 a Qt Timer would let you set a negative interval but behave in surprising ways (for example stop the timer if it was running or not start it at all).

[링크 : https://doc.qt.io/qt-6/qtimer.html#singleShot]

[링크 : https://doc.qt.io/qt-6/qtimer.html]

'Programming > qt' 카테고리의 다른 글

qt concurrent / qt thread  (0) 2026.03.30
qt6 시그널  (0) 2026.03.30
QLCDNumber class  (0) 2026.03.23
qt qrc 리소스 등록 후 이미지로 띄우기  (0) 2026.03.23
qt 6 프로그래밍 공개 ebook  (0) 2026.03.23
Posted by 구차니
Programming/qt2026. 3. 30. 11:14
#include <QObject>

class Counter : public QObject
{
    Q_OBJECT

// Note. The Q_OBJECT macro starts a private section.
// To declare public members, use the 'public:' access modifier.
public:
    Counter() { m_value = 0; }

    int value() const { return m_value; }

public slots:
    void setValue(int value);

signals:
    void valueChanged(int newValue);

private:
    int m_value;
};

void Counter::setValue(int value)
{
    if (value != m_value) {
        m_value = value;
        emit valueChanged(value);
    }
}

 

Counter a, b;
QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue);

a.setValue(12);     // a.value() == 12, b.value() == 12
b.setValue(48);     // a.value() == 12, b.value() == 48

[링크 : https://doc.qt.io/qt-6/ko/signalsandslots.html]

[링크 : https://doc.qt.io/qt-6/ko/moc.html]

 

QT5(람다) / QT4 - 근데 람다 쓴다고 receiver도 사라질수 있나? this 어디갔지?

Qt 5 이상 스타일 (람다 함수 지원)
connect(sender, &Sender::signal, receiver, &Receiver::slot);

// 람다 함수 연결
connect(button, &QPushButton::clicked, []() {
    qDebug() << "Button clicked!";
});
 

Qt 4 이하 스타일
connect(sender, SIGNAL(signalName()), receiver, SLOT(slotName()));

[링크 : https://cagongman.tistory.com/109]

 

// new style
connect(&myObject, &SignalSlot::valueChanged, this, &Widget::setValue);

// old style
//connect(&myObject, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));

[링크 : https://dongyeop00.tistory.com/78]

[링크 : https://truelightn.tistory.com/6]

'Programming > qt' 카테고리의 다른 글

qt concurrent / qt thread  (0) 2026.03.30
Qtimer를 이용한 반복/1회성 이벤트 생성  (0) 2026.03.30
QLCDNumber class  (0) 2026.03.23
qt qrc 리소스 등록 후 이미지로 띄우기  (0) 2026.03.23
qt 6 프로그래밍 공개 ebook  (0) 2026.03.23
Posted by 구차니
Programming/qt2026. 3. 23. 15:21

아니 저런(?) 쓸데없는걸 그려주는 좋은 클래스가 있다니 ㅋ

 

[링크 : https://doc.qt.io/qt-6/ko/qlcdnumber.html#details]

 

그 와중에 qt creator 에서 widget으로 제공된다.

프로퍼티가 제법 많다.

소수점 자리는 지정할수 있는데, 아쉽게도(?) 자릿수 까진 없는 듯.

'Programming > qt' 카테고리의 다른 글

Qtimer를 이용한 반복/1회성 이벤트 생성  (0) 2026.03.30
qt6 시그널  (0) 2026.03.30
qt qrc 리소스 등록 후 이미지로 띄우기  (0) 2026.03.23
qt 6 프로그래밍 공개 ebook  (0) 2026.03.23
QT QWizard  (0) 2026.03.19
Posted by 구차니
Programming/qt2026. 3. 23. 12:47

일단 button에 icon 으로 하는 방법과

label을 등록하고 pixmap  으로 등록하는 방법이 qt creator / qt widget designer 에서 마우스로 쉽게 할 수 있는 방법인듯

 

QButton

[링크 : https://coding-chobo.tistory.com/40]

 

QLabel

[링크 : https://1d1cblog.tistory.com/37]

[링크 : https://blog.naver.com/hextrial/221109232458]

[링크 : https://stackoverflow.com/questions/5653114/display-image-in-qt-to-fit-label-size]

'Programming > qt' 카테고리의 다른 글

qt6 시그널  (0) 2026.03.30
QLCDNumber class  (0) 2026.03.23
qt 6 프로그래밍 공개 ebook  (0) 2026.03.23
QT QWizard  (0) 2026.03.19
qt widget 화면 전환  (0) 2026.03.18
Posted by 구차니
Programming/qt2026. 3. 23. 12:30

'Programming > qt' 카테고리의 다른 글

QLCDNumber class  (0) 2026.03.23
qt qrc 리소스 등록 후 이미지로 띄우기  (0) 2026.03.23
QT QWizard  (0) 2026.03.19
qt widget 화면 전환  (0) 2026.03.18
qt qml 와 c++ 상호연동  (0) 2026.01.16
Posted by 구차니
Programming/qt2026. 3. 19. 16:00

화면에서는 Next 이런게 나오는데 소스에는 없어서 열어보니 QWizard 라는 클래스를 사용중이라 조사.

 

setTitle로 상단에 표시되는 항목이 지정되고

실제 내용이 label 을 통해 별도로 추가된다.

QWizardPage *createIntroPage()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle("Introduction");

    QLabel *label = new QLabel("This wizard will help you register your copy "
                               "of Super Product Two.");
    label->setWordWrap(true);

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(label);
    page->setLayout(layout);

    return page;
}

 

위저드를 써서 그런가 엄청 심플해진다.

    QWizard wizard;
    wizard.addPage(createIntroPage());
    wizard.addPage(createRegistrationPage());
    wizard.addPage(createConclusionPage());
//! [linearAddPage]

    wizard.setWindowTitle("Trivial Wizard");
    wizard.show();

[링크 : https://doc.qt.io/qt-6/qtwidgets-dialogs-trivialwizard-example.html]

 

 

[링크 : https://doc.qt.io/qt-6/qwizard.html]

'Programming > qt' 카테고리의 다른 글

qt qrc 리소스 등록 후 이미지로 띄우기  (0) 2026.03.23
qt 6 프로그래밍 공개 ebook  (0) 2026.03.23
qt widget 화면 전환  (0) 2026.03.18
qt qml 와 c++ 상호연동  (0) 2026.01.16
qt quick websocket  (0) 2026.01.14
Posted by 구차니
Programming/qt2026. 3. 18. 17:44

윈도우를 show() hide()로 전환하기

[링크 : https://trading-for-chicken.tistory.com/23]

 

QStackedWidget::setCurrentIndex()

[링크 : https://chung-n-rang.tistory.com/6]

 

currentIndex : int

This property holds the index position of the widget that is visible
The current index is -1 if there is no current widget.
By default, this property contains a value of -1 because the stack is initially empty.

[링크 : https://doc.qt.io/qt-6/qstackedwidget.html#currentIndex-prop]

'Programming > qt' 카테고리의 다른 글

qt 6 프로그래밍 공개 ebook  (0) 2026.03.23
QT QWizard  (0) 2026.03.19
qt qml 와 c++ 상호연동  (0) 2026.01.16
qt quick websocket  (0) 2026.01.14
qt qml loader  (0) 2026.01.14
Posted by 구차니
Programming/C++ STL2026. 2. 20. 16:30

sx1276 예제를 보다보니 mbed쪽(?) 드라이버 소스에 함수인데 "= 0"를 해둔게 있어서 이게 머야 하고 검색해보니

순수 가상 함수라는 이상한(?) 이름이 붙은 녀석이 발견되었다.

어떻게 보면 java에서 interface 로 선언되는 녀석과 비슷하게 실 구현체가 없이 선언되고

무조건 구현해서 사용해야 하는 녀석 같은데.. 참 난해한 문법형태구만..

그런데 cpp에 원래 virtual 키워드가 있었던..가?

 

    /*!
     * @brief Checks if the given RF frequency is supported by the hardware
     *
     * @param [IN] frequency RF frequency to be checked
     * @retval isSupported [true: supported, false: unsupported]
     */
    virtual bool CheckRfFrequency( uint32_t frequency ) = 0;

[링크 : https://hwan-shell.tistory.com/223]

[링크 : https://www.geeksforgeeks.org/cpp/pure-virtual-functions-and-abstract-classes/]

 

 

// deriv_VirtualFunctions2.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

class Base {
public:
   virtual void NameOf();   // Virtual function.
   void InvokingClass();   // Nonvirtual function.
};

// Implement the two functions.
void Base::NameOf() {
   cout << "Base::NameOf\n";
}

void Base::InvokingClass() {
   cout << "Invoked by Base\n";
}

class Derived : public Base {
public:
   void NameOf();   // Virtual function.
   void InvokingClass();   // Nonvirtual function.
};

// Implement the two functions.
void Derived::NameOf() {
   cout << "Derived::NameOf\n";
}

void Derived::InvokingClass() {
   cout << "Invoked by Derived\n";
}

int main() {
   // Declare an object of type Derived.
   Derived aDerived;

   // Declare two pointers, one of type Derived * and the other
   //  of type Base *, and initialize them to point to aDerived.
   Derived *pDerived = &aDerived;
   Base    *pBase    = &aDerived;

   // Call the functions.
   pBase->NameOf();           // Call virtual function.
   pBase->InvokingClass();    // Call nonvirtual function.
   pDerived->NameOf();        // Call virtual function.
   pDerived->InvokingClass(); // Call nonvirtual function.
}

 

부모 클래스로 바꾸어서 실행해도 virtual 로 선언된 함수는 무조건 자기 자신의 원래 함수를 호출한다.

내가 누구인지 타입 캐스팅이 되어도 원래꺼를 따라가니 일종의 메타데이터를 가지고 있는걸려나?

Derived::NameOf
Invoked by Base
Derived::NameOf
Invoked by Derived

[링크 : https://learn.microsoft.com/ko-kr/cpp/cpp/virtual-functions?view=msvc-170]

[링크 : https://mr-dingo.github.io/c/c++뽀개기/2019/01/10/virtual.html]

'Programming > C++ STL' 카테고리의 다른 글

crt0.o libstdc++.a  (0) 2025.08.12
cpp 그래픽 라이브러리  (0) 2025.04.22
cpp 기본 인자 prototype  (0) 2025.03.28
cpp std::to_string(int)  (0) 2025.02.20
cpp string 끝에 한글자 지우기  (0) 2025.02.06
Posted by 구차니
Programming/qt2026. 1. 16. 14:19

'Programming > qt' 카테고리의 다른 글

QT QWizard  (0) 2026.03.19
qt widget 화면 전환  (0) 2026.03.18
qt quick websocket  (0) 2026.01.14
qt qml loader  (0) 2026.01.14
qstackedwidget, qstackedlayout  (0) 2026.01.13
Posted by 구차니