2016-08-20 135 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