Qt - 텍스트 편집기 제작 #3 - 시그널&슬롯
스페이스가족이야기/SW개발이야기및팁
2009/03/02 16:44
지난번의 내용(Qt - 텍스트 편집기 제작 #2) 에서 이어집니다.
이제 각 액션의 동작을 구현하기 위한 핵심이 되는 Signal&Slot만 설명하고 넘어가도록 하겠습니다.
Signal&Slot
QObject 를 상속받은 클래스들은 Signal과 Slot이라는 기능을 사용할 수 있습니다. 하나의 Signal에 여러 Slot을 연결하고 Signal발생시 연결된 함수가 일괄적으로 실행되는 구조를 가지고 있습니다. 옵저버패턴과 유사합니다.
예를 들어 UI를 디자인 할때 만들어졌던 QAction의 경우, 메뉴를 누르거나 툴바의 버튼을 누르면 triggered()라는 시그널이 발생됩니다. 이때, 이 시그널에 슬롯을 만들어 연결해 두면 버튼이 눌렸을때의 동작을 정의 할 수 있습니다.
다음과 같이 함수의 접근권한 뒷쪽에 slots라고 적어주면 그 범위에 해당하는 함수는 slot으로 작동 하게 됩니다.
public slots:
void slot1();
void slot2();이렇게 만들어진 슬롯을 QAction::triggered()에 연결해 두면 Signal발생 시점에 연결된 모든 함수가 실행됩니다.예)
connect(saveAction, SIGNAL(triggered()), this, SLOT(slot1()));텍스트에디터의 중앙에 위치한 QTextEdit는 기능을 지니고 있습니다. 미리 만들어둔 액션들 다음의 5개는 액션의 signal에 QTextEdit의 슬롯을 연결 하기만 하면 구현이 됩니다.
- Copy (복사)
- cut (잘라내기)
- paste (붙여넣기)
- undo (실행취소)
- redo (되돌리기)
이 액션들을 연결하는 코드는 다음과 같습니다.
connect(ui->actionCopy, SIGNAL(triggered()), ui->textEdit, SLOT(copy()));
connect(ui->actionCut, SIGNAL(triggered()), ui->textEdit, SLOT(cut()));
connect(ui->actionPaste, SIGNAL(triggered()), ui->textEdit, SLOT(paste()));
connect(ui->actionUndo, SIGNAL(triggered()), ui->textEdit, SLOT(undo()));
connect(ui->actionRedo, SIGNAL(triggered()), ui->textEdit, SLOT(redo()));

mainwindow.cpp

















댓글을 달아 주세요