QT/Basics

사용자 정의 클래스.

모래반지빵냐빵냐 2015. 4. 8. 15:31

전에 있는거들은.. 죄다 ..

Qt에서 제공되는 클래스를 사용했다..

이번에는 내가 원하는 클래스를 만들어 본다.

접기

#ifndef USERCLASS_H
#define USERCLASS_H

#include <QtGui/QWidget>
#include "ui_userclass.h"

class UserClass : public QWidget
{
    Q_OBJECT

public:
    UserClass(QWidget *parent = 0);
    ~UserClass();

private:

};

#endif // USERCLASS_H

///////////////////////////////////
userclass.cpp
#include "userclass.h"

UserClass::UserClass(QWidget *parent)
    : QWidget(parent)
{

}

UserClass::~UserClass()
{

}

/////////////////////////

main.cpp

#include <QtGui>
#include <QApplication>
#include "userclass.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    
    UserClass user;
    
    user.show();
    return a.exec();
}

실행 결과


접기


소스를 보면.. QWidget클래스를 상속을 받고 있다..

그리고 생성자와 소멸자가 있다. 
생서자의 경우는 QWidget* 를 매개변수로 이용한다.

그리고 보면 Q_OBJECT 라는 매크로가 있다.

요 메크로를 안적어놓으면 connect가 작동 안한다.

고로 시그널과 슬롯을 사용하길 원한다면 Q_OBJECT를 써 놓으면 된다.

그리고 Q_OBJECT를 안쓰면 컴파일 하고 폴더를 살펴보면  debug 폴더에 o 파일 밖에 없다.

하지만 Q_OBJECT를 사용하면 moc_클래스이름.cpp 파일이 생긴것을 볼 수 있다.

저 파일은 MOC(Meta Object Compiler)가 만들어 놓은 것이다.

자세한 것은 실험을 해보면 알 수 있다.

그리고 실행결과는 그냥 창 하나만 뜨고 만다.

이유야.. 뭘 추가한게 없기 때문이다.

그래서 이 창에다가 버튼을 한개 넣고 버튼을 클릭하면 메시지 박스가 나오는것을 할것이다.

접기

///////////////////////
#ifndef USERCLASS_H
#define USERCLASS_H

#include <QtGui/QWidget>
#include "ui_userclass.h"
#include <QPushButton>

class UserClass : public QWidget
{
    Q_OBJECT

public:
    UserClass(QWidget *parent = 0);
    ~UserClass();

public slots:
    void onClicked();
private:

    QPushButton* bt;
};

#endif // USERCLASS_H
/////////////////////////

userclass.cpp
#include "userclass.h"

UserClass::UserClass(QWidget *parent)
    : QWidget(parent)
{

    bt = new QPushButton(this);
    bt->setText("button");

    QObject::connect(bt,SIGNAL(clicked()),this,SLOT(onClicked()));

}

UserClass::~UserClass()
{

}

#include<QMessageBox>
void UserClass::onClicked()
{
    QMessageBox::about(0,"Button clicked","Click!!");
}

/////////////////
main.cpp 위와 동일

/////////////////
실행결과

접기


소스를 보면 음영을 한 부분을 주목하면 된다.

public slots: 라고 써있다. 이 밑에다가 쓰는 것들은 모두 슬롯이라는 의미이다.
signal 도 마찮가지로 public signal: 이라 사용한다.

위에 있는 방식을 토대로 Qt는 만들어지게 된다.

물론 이런식으로 만들지는 않는다. ui 편집기라는게 있어서 편하게 편집을 할 수 있다.