2012-03-10 8 views
2

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。

答えて

4

問題はここにある:

connect(ui.playButton, SIGNAL(clicked()), this, SLOT(p_map->start()));

p_mapは、信号の受信機であり、それはQ_OBJECTを持っている場合、それはのように記述する必要があります。

connect(ui.playButton, SIGNAL(clicked()), p_map, SLOT(start()));

+1

はそのいただきありがとうございます速い答え。それは今働く。 – tobi

関連する問題