我的简单QTableView代码崩溃
我写了一个简单的代码来尝试和了解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;
};
实例化模型指针:
模型=新AracModel(本);
将此模型设置为tableView之前。
看一看这个简单的例子: http://www.thedazzlersinc.com/source/2012/06/04/qt-qtableview-example-short-and-quick/
这个例子中没有强调的一件事是调用ui-> setupUi(this)必须在调用ui-> tableView-> setModel(model)之前完成。 也许这对初学Qt创建者并不明显 – sandwood
从快速检查我看不到任何'模型=新AracModel(本);',你在哪里初始化模式? – Hakes
我想你应该检查索引是否小于列表中的项目访问它之前const Arac&arac = Araclar [index.row()]; – Geek