2016-08-20 14 views
-1

QWidgetクラス に基づいてQtで音楽プレーヤーのプロジェクトを作成し、widget.uiフォームを使用します。myClassがこのスコープで宣言されていません

同じテキストの2つのラベルを追加しないようにしたいので、フィールドを追加しようとしています:QList labelsList;私のwidget.hファイルの (labelList.append(label)よりもユーザーがラベルを追加するたびに、ラベルプログラムを追加できるようになる前に、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

あなたが含まれてで循環依存関係を持っています。これは、ヘッダーの1つが最初に含まれる順序(インクルードガードのため)に応じて見えないことを意味します。

#include "myqlabel.h"をwidget.hから削除し、widget.cppに追加します。次に、

class myQLabel; 

をwidget.hに追加することによってmyQLabelを宣言します。

+0

おかげさまで、基本的な質問がありましたが、あなたは私を大いに助けました;(私はインクルードにもっと注意を払わなければなりません... – WJuz

関連する問題