本人初学Qt,希望高人指点一二
————MainWindow.h————————
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtNetwork/QUdpSocket>
#include <QtNetwork/QHostAddress>
#include "../driver_c/fpga_me_ioc.h"
#include <QThread>
namespace Ui {
class MainWindow;
class MyThread;
}
class MyThread:public QThread
{
Q_OBJECT;
public:
MyThread(QObject *parent =0);
int fd;
int ret,arg;
signals:
void ready_data();
protected:
void run();
};
class MainWindow : public QMainWindow,public MyThread
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
short temp;
char gain;
int buf[256];
MyThread *b;
public slots:
void paintEvent(QPaintEvent *);
private:
Ui::MainWindow *ui;
protected:
private slots:
void on_action_3_triggered();
};
#endif // MAINWINDOW_H
————MainWindow.cpp————————————————
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <QtDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
b->start(); ui->setupUi(this);
}MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *)
{
}
MyThread::MyThread(QObject *)
{
fd = ::open("/dev/fpga_mea",O_RDWR);
if(fd<0)
{
qDebug()<<"open fpga failed!: \r\n"<<fd;
}
else
{
while(1)
{
ret = ::ioctl(fd, DEV_IOC_WAIT_TASK, &arg);
if(ret == -108)
{
qDebug()<<"ioctl error!: \r\n"<<ret;
}
else
{
emit ready_data();
}
}
}
}
void MyThread::run()
{
extern MainWindow w; //这句是我瞎想的
connect(this, SIGNAL( ready_data()), &w,SLOT(paintEvent()), Qt::QueuedConnection); //编译一直是这一句过不去,提示w有问题,但不知道怎样才能和主窗口的槽函数连接上。
exec();
}
void MainWindow::on_action_3_triggered()
{
}
————main.cpp————————————————————————————————
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QThread>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show(); return a.exec();
}