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

时间:2013-02-06 15:53:06

标签: qtreeview qfilesystemmodel

我是QT的新手。我正在尝试创建一个简单的文件系统浏览器。我为模型和视图类创建了一个单独的类。他们在这里:

// 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*)*

有人可以帮我解决这个错误吗?我确信它只是一些我想念的简单事物。谢谢

1 个答案:

答案 0 :(得分:1)

我知道,可能会复活一具尸体。但是,这很容易:

该行

modelClass model();

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

时出错

该行应写为:

modelClass model;

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