728x90
하나의 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)), this, SLOT(slot_setSpliterState(int, int)));
이럴 때 slot에서는 어떤 QObject에서 Signal이 발생한 것인지 알아야 그에 맞는 처리를 할 수 있습니다. 이럴 때 사용하는 것이 sender 함수 입니다.
void MainWindow::slot_setSpliterState(int pos, int index)
{
const QString sKeyHorizonSplitter = "Spliiter/horizon";
const QString sKeyVerticalSplitter = "Spliiter/vertical";
QObject* obj = sender();
if ( obj == nullptr ) { return; }
if ( obj == horizonSplitter ) {
qsetting->setValue(sKeyHorizonSplitter, horizonSplitter->saveState());
} else if ( obj == verticalSplitter ) {
qsetting->setValue(sKeyVerticalSplitter, verticalSplitter->saveState());
}
}
위 코드는 sender를 통해 splitter를 비교 후 해당 splitter에 맞는 key-value로 세팅하는 코드입니다.
728x90
'Programming > Qt' 카테고리의 다른 글
[Qt] TreeWidget 사용하기 (3) | 2023.12.01 |
---|---|
[Qt] TableWidget 사용하기 (4) | 2023.11.21 |
[Qt] QSplitter 사용하기 (0) | 2023.10.25 |
[Qt] Qt Console Application 실행 시 console 창 안뜨는 경우 (1) | 2023.05.19 |
[Qt] Qt Creator 10.0 Qt Quick Application 생성 불가 해결 (3) | 2023.04.29 |