我把代码贴出来,希望有人能帮忙看看,主要有3个问题:
1、lcdnumber中能够实时显示数据,但label中只能显示最后一次采集的温度。
2、lcdnumber和label只显示整数,小数点后的都没显示,我好象把显示数据定义为double型了。
3、程序中我一共采集20次数据,再采集过程中点击quit和stop都不能响应,该怎么改善。
DS18B20.h(头文件)
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <qwidget.h>
class QLabel;
class QString;
class QPushButton;
class QLCDNumber;
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0, const char *name = 0);
int fd;
private slots:
void start();
void stop();
private:
QLabel *label;
QString string;
QPushButton *startbutton;
QPushButton *stopbutton;
QPushButton *quitbutton;
QLCDNumber *lcdnumber;
};
#endif
DS18B20.cpp
#include <qcheckbox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qlcdnumber.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/fs.h>
#include <errno.h>
#include <string.h>
#include "DS18B20.h"
Widget::Widget(QWidget *parent, const char *name): QWidget(parent, name)
{
setCaption(tr("DS18B20"));
startbutton = new QPushButton(tr("start"),this);
stopbutton = new QPushButton(tr("stop"),this);
quitbutton = new QPushButton(tr("quit"),this);
lcdnumber = new QLCDNumber(this);
label = new QLabel("000",this);
connect(startbutton,SIGNAL(clicked()),this,SLOT(start()));
connect(stopbutton,SIGNAL(clicked()),this,SLOT(stop()));
connect(quitbutton,SIGNAL(clicked()),this,SLOT(quit()));
/* 布局 */
QVBoxLayout *midLayout = new QVBoxLayout;
midLayout->addWidget(label);
midLayout->addWidget(lcdnumber);
midLayout->addWidget(startbutton);
midLayout->addWidget(stopbutton);
midLayout->addWidget(quitbutton);
QVBoxLayout *leftLayout = new QVBoxLayout;
leftLayout->addStretch(1);
QVBoxLayout *rightLayout = new QVBoxLayout;
rightLayout->addStretch(1);
QHBoxLayout *mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(11);
mainLayout->setSpacing(6);
mainLayout->addLayout(leftLayout);
mainLayout->addLayout(midLayout);
mainLayout->addLayout(rightLayout);
}
void Widget::start()
{
fd = open("/dev/my_DS18B20",0);
if (fd < 0)
{
exit(1);
}
for(int i=0;i<20;i++)
{
int tmp;
double res;
read(fd,&tmp,sizeof(tmp));
res = double(tmp/10);
string = QString("%1 'C").arg(res);
lcdnumber->display(double(res));
label->setText(string);
sleep(1);
}
//label->setNum(res);
}
//close(fd);
}
void Widget::stop()
{
close(fd);
}
main.cpp
#include <qapplication.h>
#include "DS18B20.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Widget *widget = new Widget;
app.setMainWidget(widget);
widget->show();
return app.exec();
}