2017-08-15 201 views
0

我写了一个简单的代码来尝试和了解QTableView。当我建立我的项目,它不给任何错误,但是当我尝试运行它说:我的简单QTableView代码崩溃

C:\用户\二连\文档\集结QTableViewUygulama-Desktop_Qt_5_8_0_MSVC2015_64bit-调试\调试\ QTableViewUygulama.exe退出,代码255

该方案已意外结束。

C:\ Users \ Eren \ Documents \ build-QTableViewUygulama-Desktop_Qt_5_8_0_MSVC2015_64bit-Debug \ debug \ QTableViewUygulama.exe崩溃。

我对C++有一些了解,但是我对Qt知之甚少。我不知道为什么我不断收到此错误。这是我的代码使用

//Class Model(aracmodel.cpp) 
#include "aracmodel.h" 

AracModel::AracModel(QObject* parent = 0) : QAbstractTableModel(parent) { 

} 

int AracModel::rowCount(const QModelIndex &) const { 

return 3; 

} 
int AracModel::columnCount(const QModelIndex &) const { 

    return Araclar.size(); 
} 
QVariant AracModel::data(const QModelIndex &index, int role) const { 

    if(role != Qt::DisplayRole && role != Qt::EditRole) return 0; 

    const Arac& arac = Araclar[index.row()]; 

    switch(index.column()){ 

     case 0 : return arac.id; 
     case 1 : return QString::fromStdString(arac.marka); 
     case 2 : return QString::fromStdString(arac.model); 
     default : return 0; 
    } 
    return QVariant(); 
} 

QVariant AracModel::headerData(int section, Qt::Orientation orientation, int 
role){ 

    if(orientation != Qt::Horizontal || role != Qt::DisplayRole) return 0; 

    switch(section){ 

     case 0 : return "ID"; 
     case 1 : return "Marka"; 
     case 2 : return "Model"; 
     default : return 0; 
    } 
    return QVariant(); 
} 


//Class Model (aracmodel.h) 
#ifndef ARACMODEL_H 
#define ARACMODEL_H 

#include <QAbstractTableModel> 
#include "arac.h" 

class Arac; 

class AracModel : public QAbstractTableModel 
{ 
public: 
    QList<Arac> Araclar; 

    AracModel(QObject*); 

    int rowCount(const QModelIndex&) const override; 
    int columnCount(const QModelIndex&) const override; 
    QVariant data(const QModelIndex& index, int role) const override; 
    QVariant headerData(int section, Qt::Orientation orientation, int role); 
}; 

#endif // ARACMODEL_H 



//Class Header arac.h 
#ifndef ARAC_H 
#define ARAC_H 

#include <string> 

class Arac 
{ 
public: 
    int id; 
    std::string marka; 
    std::string model; 

    Arac(int, std::string, std::string); 
}; 

#endif // ARAC_H 

Arac::Arac(int i, std::string ma, std::string mo) : id(i), marka(ma), model(mo){} //This constructor is in arac.cpp 



//MainWindow.cpp (only copying the parts i've changed) 
MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    ui->tableView->setModel(model); 
} 




//MainWindow.hh(only copying the parts i've changed 
class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    AracModel* model; 
    ~MainWindow(); 

private: 
    Ui::MainWindow *ui; 
}; 
+1

从快速检查我看不到任何'模型=新AracModel(本);',你在哪里初始化模式? – Hakes

+0

我想你应该检查索引是否小于列表中的项目访问它之前const Arac&arac = Araclar [index.row()]; – Geek

回答