Programming/qt2014. 11. 21. 10:17
음.. 일단 분석한 내용으로는..
signal은 껍데기 이고 Q_OBJECT를 본 moc가 알아서 생성해서
slot과 연결을 해주는 듯하다

아래 코드를 보면 signals: 에는 프로토타입만 있고 실제로 구현은 보이지 않으며
class Window : public QWidget
{
    Q_OBJECT
public:
    explicit Window(QWidget *parent = 0);
signals:
    void counterReached();
private slots:
    void slotButtonClicked(bool checked);
private:
    int m_counter;
    QPushButton *m_button;
}; 

connect를 보면 signal과 slot은 거의 동일한 함수 형태를 지니고
인자를 넘겨받게 되는 구조로 되어있다.
Window::Window(QWidget *parent) : QWidget(parent)
{
    // Set size of the window
    setFixedSize(100, 50);
 
    // Create and position the button
    m_button = new QPushButton("Hello World", this);
    m_button->setGeometry(10, 10, 80, 30);
    m_button->setCheckable(true);
 
    // Set the counter to 0
    m_counter = 0;
 
    connect(m_button, SIGNAL(clicked(bool)), this, SLOT(slotButtonClicked(bool)));
    connect(this, SIGNAL(counterReached()), QApplication::instance(), SLOT(quit()));
}
 
void Window::slotButtonClicked(bool checked)
{
    if (checked) {
        m_button->setText("Checked");
    } else {
        m_button->setText("Hello World");
    }
 
    m_counter ++;
    if (m_counter == 10) {
        emit counterReached();
    }
} 

아무튼.. 원칙(?)적으로는 각종 핸들러를 만들어주고 생성하고 연결해야 하나
그렇게 되면 코드가 막 꼬이는 것 처럼 보일수가 있기에
이를 간결하게 하기 위해서 moc를 통해 생성하는 구조로 추측된다.

[링크 : http://qt-project.org/doc/qt-4.8/tools-customtypesending.html]
[링크 : http://qt-project.org/wiki/Qt_for_beginners_Signals_and_slots]
[링크 : http://qt-project.org/wiki/Qt_for_beginners_Signals_and_slots_2]
[링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/QT_Whitepaper]

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

Qt for Embedded Linux 와 VNC  (0) 2014.12.11
qt dialog / webkit 연동  (0) 2014.12.10
qt 프로젝트 파일 연관  (0) 2014.11.20
QT font 관련  (0) 2014.11.06
QT modules  (0) 2014.11.05
Posted by 구차니