vs2019 qt c++ 提升控件为自定义类 报错C1083 自定义类是<>包含而非“”包含
时间: 2023-12-07 13:03:17 浏览: 49
如果您在自定义类的头文件中使用了尖括号 `< >` 来引用其他头文件,而不是双引号 `" "`,则编译器可能会将该头文件解释为系统头文件而非当前项目的头文件,从而导致 C1083 错误。
解决方法:
1. 使用双引号 `" "` 来引用当前项目的头文件。
2. 如果必须使用尖括号 `< >`,则可以在头文件引用之前使用 `#include <QtCore/qglobal.h>`,然后使用 `Q_DECL_IMPORT` 或 `Q_DECL_EXPORT` 宏来声明该头文件是当前项目的头文件而非系统头文件。
例如:
```cpp
#include <QtCore/qglobal.h>
#ifndef MYHEADER_H
#define MYHEADER_H
#ifdef MYLIBRARY_EXPORT
#define MYLIBRARY_EXPORT Q_DECL_EXPORT
#else
#define MYLIBRARY_EXPORT Q_DECL_IMPORT
#endif
MYLIBRARY_EXPORT void myFunction();
#endif // MYHEADER_H
```
希望这能够帮助您解决问题。
相关问题
qt中的多个控件提升为自定义的类,怎么让它们不会相互干扰
在将多个控件提升为自定义的类之后,可以在每个类中使用私有成员变量来存储控件的状态和属性。这样,每个自定义类只会影响它自己所对应的控件,而不会干扰其他控件。
另外,如果多个自定义类需要共享数据或控制信息,可以使用信号和槽机制来进行通信。通过信号和槽,不同的自定义类可以在需要的时候相互通知和交互,而不会直接干扰彼此的状态和属性。
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);
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)