没有匹配函数调用QTreeView :: setModel(modelClass(*)())'

问题描述:

我是QT的新手。我正在尝试创建一个简单的文件系统浏览器。我为模型和视图类创建了一个单独的类。在这里,他们是:没有匹配函数调用QTreeView :: setModel(modelClass(*)())'

//modelClass.h

#ifndef MODELCLASS_H 
#define MODELCLASS_H 
#include <QFileSystemModel> 

class modelClass: public QFileSystemModel{ 
    Q_OBJECT 
public: 
    modelClass(); //constructor 
    QFileSystemModel* createModel(); //creates the QFileSystemModel 
//public slots: 
private: 
}; 

#endif // MODELCLASS_H 

//modelClass.cpp

#include "modelClass.h" 

modelClass::modelClass(){ 
    createModel(); //calls to function below 
} 

QFileSystemModel* modelClass::createModel(){ 
    QFileSystemModel* model = new QFileSystemModel; 
    model->setRootPath("/"); 
    return model; 
} 

//systemBrowser.cpp

#include "modelClass.h" 
#include <QtGui> 

int main(int argc, char *argv[]){ 
    QApplication app(argc, argv); 
    modelClass model(); 

    QTreeView tree; 
    tree.setModel(&model); 
    tree.setSortingEnabled(true); 
    tree.header()->setResizeMode(QHeaderView::ResizeToContents); 
    tree.resize(640, 480); 
    tree.show(); 

    return app.exec(); 
} 

在尝试编译此,我收到错误:

no matching function for call to 'QTreeView::setModel(modelClass(*)())' 
    candidates are: virtual void QTreeView::setModel(QAbstractItemModel*)* 

任何人都可以请帮我解决这个错误吗?我相信它只是简单的我错过了。谢谢

我知道可能会复活尸体。但尽管如此,这很容易:

线

modelClass model();

是错误的。您的编译器假定这是函数的前向声明()返回类型modelClass。因此,在调用QTreeView则错误::则setModel

行应该写成:

modelClass model;

另见:http://en.wikipedia.org/wiki/Most_vexing_parse