I have one class that inherits from QMainWindow and two that inherits from QWidget. I added this two QWidget objects into my QMainWindow object and i wanted to create a connection between this two QWidget object(one of them contains QPushButton object). unfortunately, doesn't want to work...
CODE:
MAINFRAME:
#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 class
#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);
}
SECOND QWidget class
#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();
}
Your call to connect the clicked()
signal from rysuj1
to the draw1()
slot of dComponent
QObject::connect(this->cComponent->rysuj1, SIGNAL(clicked()),
this, SLOT(dComponent->draw1));
needs to be
QObject::connect(this->cComponent->rysuj1, SIGNAL(clicked()),
dComponent, SLOT(draw1()));
dComponent->draw1
is not a slot
see Here:
QObject::connect(&a, SIGNAL(valueChanged(int)),
&b, SLOT(setValue(int)));
arguments: 1. object, 2. Signal-function, 3. an object, 4. a slot function.
so
QObject::connect(this->cComponent->rysuj1, SIGNAL(clicked()), dComponent, SLOT(draw1()));
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.