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();
}
실행 결과

#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 위와 동일
/////////////////
실행결과

#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 편집기라는게 있어서 편하게 편집을 할 수 있다.