2016-08-20 178 views
-1

我使用QWidget类 并使用widget.ui窗体在Qt中制作音乐播放器项目。myClass未在此范围内声明

我想检查用户不会添加两个标签具有相同的文本,所以我想添加字段:QList labelsList; 在我的widget.h文件中。 (每次用户添加标签,比:labelsList.append(标签),并且在他可以添加该标签程序之前,将遍历labelsList并检查列表中是否存在带有心室文本的标签)。

虽然包含“myqlabel.h”,但编译器说'myQLabel'未在此范围内声明......我不知道为什么。对我来说有点奇怪,但也许我缺乏/忘记一些基本知识......;/

感谢您的帮助!

代码(只是需要片段)如下:

widget.h文件:

#ifndef WIDGET_H 
#define WIDGET_H 

#include <QWidget> 
#include "myqlabel.h" 

#include <QList> 
#include <QFormLayout> 

#include <QSqlDatabase> 
#include <QtSql> 

#include <QMediaPlayer> 


namespace Ui { 
class Widget; 
} 

class Widget : public QWidget 
{ 
    Q_OBJECT 

public: 
    explicit Widget(QWidget *parent = 0); 
    ~Widget(); 


    // to check if label with input text already exists: 

    // HERE OUR BAD FIELD: 

    QList<myQLabel*> labelsList; 



private: 
    Ui::Widget *ui; 
    QMediaPlayer player; 

    qint64 duration; 

}; 

#endif // WIDGET_H 

myqlabel.h文件:

#ifndef MYQLABEL_H 
#define MYQLABEL_H 

#include <QLabel> 
#include "widget.h" 
#include "ui_widget.h" 

#include <QFormLayout> 
#include <QMouseEvent> 

class myQLabel : public QLabel { 

    Q_OBJECT 
public: 

    myQLabel(QString& text, QFormLayout* parent = 0) : QLabel(text){ 
     setAcceptDrops(true); 
     position = amount; 
     this->parent = parent; 

     labelsList.append(this); 
    } 



}; 


#endif // MYQLABEL_H 
+0

有关编码风格的说明:在Qt代码中,通常使用大写来启动类名,因此您应该考虑在这里使用'MyQLabel'作为类名。 – hyde

+0

哦,谢谢:)我的坏...我试图区分它与内置的类,但我们应该坚持规则。 – WJuz

回答

1

您的包括循环依赖。这意味着其中一个标题看不到它们首先被包含的顺序(由于包括守卫)。

从widget.h中删除#include "myqlabel.h"并将其添加到widget.cpp。然后通过添加

class myQLabel; 

向widget.h发送myQLabel

+0

谢谢,人...这是一个基本的问题,但你非常帮助我;(我必须更多地关注包括...... – WJuz