我的目的是,創建一個視窗,視窗中添加Label,在label中畫實時曲線圖(最終圖為AD卡采集的電壓值,畫曲線圖),現在只是簡單曲線圖。label可以任意挪動位置,曲線圖也相對挪動。
用向導定義了一個MainWindow類,然后又新增了drawLabel類,drawLabel.cpp。繼承于QLabel
問題是 1,在視窗顯示了,沒在Qlabel中顯示。
代碼為畫曲線:
drawLabel::drawLabel(QWidget *parent):QLabel(parent)
{
for(int i=0;i<DATA_X;i++)
buffer[i] = (int)(sin((i*PI) / 100) * 100);
QTimer *timer = new QTimer();
QObject::connect(timer,SIGNAL(timeout()),this,SLOT(flushBuff()));
timer->start(100);
}
void drawLabel::flushBuff()
{
int tmp = buffer[0];
for(int i=0;i<DATA_X;i++)
{
if(i == DATA_X - 1)
{
buffer[DATA_X - 1] = tmp;
break;
}
buffer[i] = buffer[i+1];
}
update();
}
void drawLabel::paintEvent(QPaintEvent *)
{
QPainter painter(this) ;
QPoint beginPoint;
QPoint endPoint;
painter.setPen(Qt::red);
for(int i=0;i<DATA_X;i++)
{
qDebug()<<"X = "<<2*i+100<<"Y = "<<buffer[i]+100;
beginPoint.setX(2*i);//a*i a決定波長,a越大波長越大
beginPoint.setY(buffer[i]);//a*i+b a決定振幅大小
endPoint.setX(2*i+1);
endPoint.setY(buffer[i+1]);
painter.drawLine(beginPoint,endPoint);
}
}
下面是MainWindow類
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QWidget::setWindowTitle(tr("繪圖"));
QWidget::setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum);
drawLabel *label = new drawLabel;
QMainWindow::setCentralWidget(label);
}
MainWindow::~MainWindow()
{
delete ui;
}
問題是畫的曲線圖一直是在視窗上,沒在drawLabel上,怎么才能畫在drawlabel上啊,問題不知道出在哪,都3天了。。謝謝各位大大!!還有一個問題:怎么在代碼中改變drawLabel的位置。。總共就這么多分了,
uj5u.com熱心網友回復:
QT不懂。。。。別找我。uj5u.com熱心網友回復:
一樣,沒有用過 QT。
uj5u.com熱心網友回復:
你想要畫在 label 上,就必須使用 label 對應的畫圖類函式。但從 LZ 提供的代碼看,只定義了 label ,但并沒有使用它啊。
uj5u.com熱心網友回復:
你的畫家應該是指定父類才行,哈哈 好久的問題了QPainter painter(你的label) ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/105577.html
標籤:嵌入開發(WinCE)
上一篇:arduino聲光控燈
下一篇:求鏈接
