Qt,两个QWidget对象之间的简单连接

Qt, a simple connection between two QWidget objects

本文关键字:简单 连接 之间 对象 两个 QWidget Qt      更新时间:2023-10-16

我有一个从QMainWindow继承的类和两个从QWidget继承的类。我将这两个QWidget对象添加到了我的QMainWindow对象中,并且我想在这两个QDidget对象之间创建一个连接(其中一个包含QPushButton对象(。不幸的是,不想工作。。。

代码:

大型机:

#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();
}

您的呼叫将clicked()信号从rysuj1连接到dComponentdraw1()插槽

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

需要

QObject::connect(this->cComponent->rysuj1, SIGNAL(clicked()), 
                 dComponent, SLOT(draw1()));
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()));