我在Qt 4.8.0中遇到了一些按鈕信號問題。我正在使用vs 2010與Qt Designer。我使用playButton名稱在Designer中創建了一個按鈕。但在此之後,我嘗試將clicked()信號(in vs)與來自CRenderArea的函數(啓動計時器)連接起來,但它似乎不起作用(函數start()在我將其放入構造函數中時起作用,所以它不是代碼本身的問題)。代碼正在編譯,程序正在執行,但點擊一個按鈕後 - 什麼也沒有發生(它應該移動一行)。clicked()按鈕信號
我會非常感謝一些幫助,只是與Qt開始一段樂趣。
的代碼是在這裏(我希望文件的數量不會嚇到你,這是最簡單的代碼永遠:)):
的main.cpp
#include "ts_simulator.h"
#include <QtGui/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TS_simulator w;
w.show();
return a.exec();
}
ts_simulator.cpp:
TS_simulator::TS_simulator(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
p_map = new CRenderArea();
ui.setupUi(this);
p_map->setParent(ui.renderArea);
// this doesn't work, why?
connect(ui.playButton, SIGNAL(clicked()), this, SLOT(p_map->start()));
}
CRenderArea.h
#pragma once
#include <QtGui>
class CRenderArea : public QWidget {
Q_OBJECT // I think it's necessary?
int x;
QBasicTimer* timer;
public:
CRenderArea();
public slots: // this is necessary too, right?
void start();
private:
void timerEvent(QTimerEvent*);
void paintEvent(QPaintEvent*);
};
和CRenderArea.cpp:
#include "CRenderArea.h"
CRenderArea::CRenderArea() : x(0) {
setBackgroundRole(QPalette::Base);
setMinimumSize(591, 561);
setAutoFillBackground(true);
timer = new QBasicTimer();
}
void CRenderArea::timerEvent(QTimerEvent* e) {
++x;
update();
}
void CRenderArea::paintEvent(QPaintEvent* p) {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::darkGray);
painter.drawLine(2+x/10, 8, 60, 300);
}
void CRenderArea::start() {
timer->start(0, this);
}
迎接。
謝謝你的快速回答。它現在有效。 – tobi 2012-03-10 23:25:01