2011-07-29 75 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库为止:)如果我猜测,我会怀疑tr()宏。 –

+0

公平,够了。再次感谢。你会说我的代码不是缺少的Q_OBJECT宏吗?没有明显的荒谬吗?我还是Qt和C++的新手。 – user440297

相关问题