Qt 프로그램입니다....컴파일시 에러가 나는데 뭐가 문제인지...
Qt를 이용해서 만든
시리얼 통신 수신부 소스 입니다...
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <qapplication.h>
#include <qpainter.h>
#include <qtimer.h>
#define BAUDRATE B115200
#define MODEMDEVICE "/dev/ttySA0"
#define _POSIX_SOURCE 1
class mywid:public QWidget
{
Q_OBJECT
public:
mywid();
private slots:
void slotTimer();
private:
void paintEvent(QPaintEvent*);
QTimer* timer;
};
mywid::mywid()
{
resize(300, 200);
setCaption("hi");
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()),this, SLOT(slotTimer()));
timer->start(500, false);
}
void mywid::slotTimer()
{
void paintEvent(QPaintEvent*);
}
void mywid::paintEvent(QPaintEvent*)
{
QPainter p(this);
int fd, res, num[2], i=0, c=1, sta=10, cat=0, tmp=0;
struct termios oldtio, newtio;
char buf[4];
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY);
tcgetattr(fd, &oldtio);
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD | CRTSCTS;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 1;
for(i=0;i<2;i++){
res = read(fd, buf, 4);
num[i] = atoi(buf);
}
p.drawLine(sta, num[0], sta+10, num[1]);
printf("%d %d %d %d\n", sta, num[0], sta+10, num[1]);
sta=sta+10;
tcsetattr(fd, TCSANOW, &oldtio);
tmp = num[1];
while(c){
res = read(fd, buf, 4);
cat = atoi(buf);
p.drawLine(sta, tmp, sta+10, cat);
printf("%d %d %d %d\n", sta, tmp, sta+10, cat);
sta = sta+10;
tcsetattr(fd, TCSANOW, &oldtio);
tmp = cat;
}
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
mywid mw;
app.setMainWidget(&mw);
mw.show();
return app.exec();
}
컴파일할때요
In function `mywid::mywid(void)' :
undefined reference to `mywid::QPaintDeveice virtual table'
undefined reference to `mywid virtual table'
In function `main':
undefined reference to `mywid::QPaintDeveice virtual table'
undefined reference to `mywid virtual table'
이런 에러가 뜨네요......ㅡ,.ㅡ;;;
머가 정의가 안됐다는건지.....
부탁드립니다.....^^;;;
signal이나 slot이 들어있는 클래스는 Q_OBJECT 매크로를 넣
signal이나 slot이 들어있는 클래스는 Q_OBJECT 매크로를 넣어줘야 하는데,
이런 클래스는 헤더로 따로 만들어야 합니다.
그런 다음에 qmake를 써서 makefile을 만들면 됩니다.
감사합니다~~~^^이제 에러 안나고 컴파일과 실행 다 됩니다..근
감사합니다~~~^^
이제 에러 안나고 컴파일과 실행 다 됩니다..
근데요 위 소스 보시면 아시겠지만.....
0.5초 마다 한번씩 데티어를 읽어서
위젯에 선을 그리는 건데요....
송신부에서는 0.1초에 한번씩 데이터를 계속 보내는 거구요...
처음 보낼때만 2개 보내고 그다음부터는 1개를 보내는것입니다.
근데 수신부에서도 0.1초에 한번씩 선을 그리네요....
0.1초마다 데이터를 보내면 그 보내어진 데이터를
0.5초에 하나씩 순서대로 읽어서 표현 하려는 거거든요...
댓글 달기