2011-07-29 12 views
1

コードには何の問題がありますか?コンパイルすると、ファイルが見つからないという警告が表示されます。何かが無効です。私はおそらくここでいくつかの間違いをしています。問題はQWidgetから継承した方法かもしれないと私は思う。コンパイル時にファイルが見つかりません

#include <QtGui/QApplication> 
    #include "filedialogs.h" 

    int main(int argc, char *argv[]) 
    { 
     QApplication a(argc, argv); 

     FileDialogs w; 
     w.openFile(); 

     return 0; 
    } 

#ifndef FILEDIALOGS_H 
#define FILEDIALOGS_H 

    #include <QWidget> 
    class QFileDialog; 

    class FileDialogs : public QWidget 
    { 

    public: 
     FileDialogs(QWidget *parent = 0); 
     ~FileDialogs(); 

     void openFile(); 
    }; 

    #endif // FILEDIALOGS_H 

#include <QFileDialog> 
#include "filedialogs.h" 

FileDialogs::FileDialogs(QWidget *parent) 
    : QWidget(parent) 
{ 
} 

FileDialogs::~FileDialogs() 
{ 

} 

void FileDialogs::openFile() 
{ 
    QString filename = QFileDialog::getOpenFileName(
     this, 
     tr("Open Document"), 
     QDir::currentPath(), 
     tr("Document files (*.doc *.rtf);;All files (*.*)")); 

    if(!filename.isNull()) 
    { 
    qDebug(filename.toAscii()); 
    } 
} 

#------------------------------------------------- 
# 
# Project created by QtCreator 2011-07-29T19:06:33 
# 
#------------------------------------------------- 

QT  += core gui 

TARGET = exX 
TEMPLATE = app 


SOURCES += main.cpp\ 
     filedialogs.cpp 

HEADERS += filedialogs.h 
+0

無効なものは何ですか? –

+0

QtCreatorはこれに特化していません。私の推測では、FILEDIALOGS_Hの何かが好きではないということです。他の奇妙なことは、警告にもかかわらずコンパイルして動作するように見えるということです。その後、私は再びコンパイルすると、srcコード内の何かを変更するまで文句を言わない。奇妙な。私が見ていないコードで何かが間違っているはずです。 – user440297

+0

正確なメッセージは次のとおりです。 "該当するクラスが見つかりませんでした。出力は生成されませんでした。 (filedialogs.h) – user440297

答えて

1

このエラーメッセージは、MOCコンパイラによって放出されます。 Q_OBJECTマクロが欠落しています。あなたのクラス宣言に次のように入れてください:

class FileDialogs : public QWidget 
{ 
    Q_OBJECT 

    public: 
    .... 
+0

うん、それは警告を取り除いた。ありがとう。私はちょっと混乱しています。信号やスロットを宣言していないときにQ_OBJECTマクロが必要なのはなぜですか? – user440297

+0

Qtのドキュメントには詳細が書かれていないような理由がいくつもありますが、通常は結局それを入れてしまいます。 8文字のために、私はQtのすべてのサブクラスに書いています。なぜなら、ほとんどの場合、最終的にはそれが必要となる何かをやってしまうからです。私がQtライブラリを修正したいと思うまでは、エネルギーを注ぎ込んでいないと決めたものの1つです:)もし私が推測するならば、tr()マクロが疑わしいでしょう。 –

+0

フェア、十分。再度、感謝します。不足しているQ_OBJECTマクロ以外のコードがOKであるとお考えですか?驚くばかばかしいことはない?私はまだQtとC++の新機能です。 – user440297

関連する問題