Qt 프로그램입니다....컴파일시 에러가 나는데 뭐가 문제인지...

leo~~~~의 이미지

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'

이런 에러가 뜨네요......ㅡ,.ㅡ;;;
머가 정의가 안됐다는건지.....
부탁드립니다.....^^;;;

doldori의 이미지

signal이나 slot이 들어있는 클래스는 Q_OBJECT 매크로를 넣어줘야 하는데,
이런 클래스는 헤더로 따로 만들어야 합니다.

// myheader.h
#include <qwidget.h>

class mywid:public QWidget 
{ 
Q_OBJECT 
public: 
mywid(); 
private slots: 
void slotTimer(); 
private: 
void paintEvent(QPaintEvent*); 
QTimer* timer; 
}; 

// main.cpp
/* ... */
#include "myheader.h"
/* ... */

그런 다음에 qmake를 써서 makefile을 만들면 됩니다.
leo~~~~의 이미지

감사합니다~~~^^
이제 에러 안나고 컴파일과 실행 다 됩니다..
근데요 위 소스 보시면 아시겠지만.....
0.5초 마다 한번씩 데티어를 읽어서
위젯에 선을 그리는 건데요....
송신부에서는 0.1초에 한번씩 데이터를 계속 보내는 거구요...
처음 보낼때만 2개 보내고 그다음부터는 1개를 보내는것입니다.
근데 수신부에서도 0.1초에 한번씩 선을 그리네요....
0.1초마다 데이터를 보내면 그 보내어진 데이터를
0.5초에 하나씩 순서대로 읽어서 표현 하려는 거거든요...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.