qt中的多个控件提升为自定义的类,怎么让它们不会相互干扰,且槽函数必须是公共的
时间: 2024-05-07 09:15:27 浏览: 85
qt 自适应类,可以自适应调整控件字体大小,间距等
为了让多个控件提升为自定义类后不会相互干扰,可以使用类的成员变量来存储各自的状态和数据。例如,每个自定义类都可以包含一个私有的成员变量用于存储自身的数据,这样每个自定义类的数据就可以独立存在,不会相互干扰。
为了让槽函数必须是公共的,可以在自定义类中声明槽函数为公共的。例如,可以在自定义类的头文件中声明槽函数为公共的,然后在类的实现文件中实现槽函数。这样,其他类就可以通过对象来调用该公共槽函数。
示例代码如下:
widget1.h
```
#ifndef WIDGET1_H
#define WIDGET1_H
#include <QWidget>
class Widget1 : public QWidget
{
Q_OBJECT
public:
explicit Widget1(QWidget *parent = nullptr);
~Widget1();
public slots:
void onButtonClicked();
private:
QString mData;
};
#endif // WIDGET1_H
```
widget1.cpp
```
#include "widget1.h"
#include "ui_widget1.h"
Widget1::Widget1(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget1)
{
ui->setupUi(this);
mData = "Widget1 data";
}
Widget1::~Widget1()
{
delete ui;
}
void Widget1::onButtonClicked()
{
// do something
}
```
widget2.h
```
#ifndef WIDGET2_H
#define WIDGET2_H
#include <QWidget>
class Widget2 : public QWidget
{
Q_OBJECT
public:
explicit Widget2(QWidget *parent = nullptr);
~Widget2();
public slots:
void onButtonClicked();
private:
int mData;
};
#endif // WIDGET2_H
```
widget2.cpp
```
#include "widget2.h"
#include "ui_widget2.h"
Widget2::Widget2(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget2)
{
ui->setupUi(this);
mData = 123;
}
Widget2::~Widget2()
{
delete ui;
}
void Widget2::onButtonClicked()
{
// do something
}
```
在使用这些自定义类的时候,可以创建对象并将其添加到父控件中,例如:
```
Widget1 *w1 = new Widget1(this);
Widget2 *w2 = new Widget2(this);
layout->addWidget(w1);
layout->addWidget(w2);
```
这样就可以在父控件中同时使用多个自定义类,且它们不会相互干扰。同时,它们的槽函数也是公共的,可以通过对象来调用。例如:
```
connect(w1, &Widget1::onButtonClicked, this, &MainWidget::onWidget1ButtonClicked);
connect(w2, &Widget2::onButtonClicked, this, &MainWidget::onWidget2ButtonClicked);
```
阅读全文