Qt 4.8.0のボタンの信号に問題があります。 Qt Designerでvs 2010を使用しています。私は、デザイナーでplayButtonという名前のボタンを作成しました。しかしその後、私はCRenderAreaからの私の関数とclicked()シグナル(タイマーを始める)を接続しようとしましたが、動作しません(start()関数はコンストラクタに置くと機能します) 、コード自体の問題ではありません)。コードがコンパイルされ、プログラムが実行されていますが、ボタンをクリックしても何も起こりません(行が移動するはずです)。ボタンで信号をクリック(
私は本当にいくつかの助けに感謝し、ちょうど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);
}
Greets。
はそのいただきありがとうございます速い答え。それは今働く。 – tobi