2013-02-27 347 views
1

我有一個從QMainWindow繼承的類和兩個從QWidget繼承的類。我將這兩個QWidget對象添加到我的QMainWindow對象中,並且我想在這兩個QWidget對象之間創建一個連接(其中一個包含QPushButton對象)。不幸的是,不希望工作...Qt,兩個QWidget對象之間的簡單連接

CODE:

大型機:

#ifndef MAINFRAME_H 
#define MAINFRAME_H 

#include <QtGui/QMainWindow> 
#include "DrawComponent.h" 
#include "ControllComponent.h" 

class MainFrame : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    DrawComponent *dComponent; 
    ControllComponent *cComponent; 
    MainFrame(); 

}; 

#endif 
#include "MainFrame.h" 
#include "DrawComponent.h" 
#include "ControllComponent.h" 
#include <iostream> 

using namespace std; 

MainFrame :: MainFrame() 
{ 
    this->setGeometry(100, 100, 640, 480); 

    this->dComponent = new DrawComponent(this); 
    this->cComponent = new ControllComponent(this); 

    QObject::connect(this->cComponent->rysuj1, SIGNAL(clicked()), this, SLOT(dComponent->draw1)); 
} 

FIRST QWidget的類

#ifndef DRAWCOMPONENT_H 
#define DRAWCOMPONENT_H 

#include <QtGui/QMainWindow> 
#include <qwidget.h> 

class DrawComponent : public QWidget 
{ 
    Q_OBJECT 

public: 
    DrawComponent(QMainWindow *parent); 

public slots: 
    void draw1(); 

}; 

#endif 
#include "DrawComponent.h" 
#include <qpushbutton.h> 
#include <qgridlayout.h> 

using namespace std; 

DrawComponent :: DrawComponent(QMainWindow *parent) 
{ 
    this->setParent(parent); 
    this->setGeometry(0, 0, 500, 480); 

    QPalette p(palette()); 
    p.setColor(QPalette::Background, Qt::black); 

    this->setPalette(p); 
    this->setAutoFillBackground(true); 
    this->show(); 
} 

void DrawComponent :: draw1() 
{ 
    QPalette p(palette()); 
    p.setColor(QPalette::Background, Qt::blue); 

    this->setPalette(p); 
} 

第二QWidget的類

#ifndef CONTROLLCOMPONENT_H 
#define CONTROLLCOMPONENT_H 

#include <QtGui/QMainWindow> 
#include <qwidget.h> 
#include <qpushbutton.h> 

class ControllComponent : public QWidget 
{ 
    Q_OBJECT 

public: 
    QPushButton *rysuj1; 
    ControllComponent(QMainWindow *parent); 

}; 

#endif 
#include "ControllComponent.h" 
#include <qpushbutton.h> 
#include <qgridlayout.h> 

ControllComponent :: ControllComponent(QMainWindow *parent) 
{ 
    this->setParent(parent); 
    this->setGeometry(500, 0, 140, 480); 

    QPalette p(palette()); 
    p.setColor(QPalette::Background, Qt::red); 
    this->setPalette(p); 
    this->setAutoFillBackground(true); 

    this->rysuj1 = new QPushButton(tr("draw1"), this); 
    this->rysuj1->setGeometry(45, 10, 50, 50); 
    this->rysuj1->show(); 

    this->show(); 
} 

回答

4

你的呼叫到clicked()信號從rysuj1連接到的dComponent

QObject::connect(this->cComponent->rysuj1, SIGNAL(clicked()), 
       this, SLOT(dComponent->draw1)); 

需求draw1()槽是

QObject::connect(this->cComponent->rysuj1, SIGNAL(clicked()), 
       dComponent, SLOT(draw1())); 
2
dComponent->draw1 

不是槽

在這裏看到:

QObject::connect(&a, SIGNAL(valueChanged(int)), 
        &b, SLOT(setValue(int))); 

參數:1.對象,2.信號功能,3.一個對象,4.槽函數。

所以

QObject::connect(this->cComponent->rysuj1, SIGNAL(clicked()), dComponent, SLOT(draw1()));