2014-01-25 4 views
0

У меня есть пользовательская модель таблицы, которая расширяет QAbstractTableModel. Я внедрил data(), rowCount() и columnCount().QTableModel данные не называются

Это моя модель:

point_data_view_model::point_data_view_model(QObject *parent) : 
    QAbstractTableModel(parent) 
{ 
} 

int point_data_view_model::rowCount(const QModelIndex & /*parent*/) const 
{ 
    return 2; 
} 

int point_data_view_model::columnCount(const QModelIndex & /*parent*/) const 
{ 
    return 3; 
} 

QVariant point_data_view_model::data(const QModelIndex &index, int role) const 
{ 
    if (role == Qt::DisplayRole) 
    { 
     return QString("Row%1, Column%2") 
        .arg(index.row() + 1) 
        .arg(index.column() +1); 
    } 
    return QVariant(); 
} 

Но когда я хочу, чтобы показать вид таблицы в моей форме, ничего не отображается.

Это конструкторе формы:

SelectWindow::SelectWindow(QWidget *parent) : 
    QMainWindow(parent) 
    ,ui(new Ui::SelectWindow) 
{ 
    ui->setupUi(this); 

    point_data_view_model myModel; 

    ui->tableView->setModel(&myModel); 
    myModel.timerHit(); 
    ui->tableView->show(); 


} 

Другими словами, моя функция данных в модели не называется.

Что мне не хватает?

ответ

4
point_data_view_model myModel; 

Это большая проблема. myModel является локальным для этого конструктора и будет уничтожен при выходе из функции. Вам нужно сохранить эту модель где-то, которая сохраняется, если вам нужно ее использовать - должна быть подходящей переменная-член вашей SelectWindow.

2

Вы создаете myModel на стеке. Он удаляется сразу после вызова ui->tableView->show();. Таким образом, представление теряет модель и не имеет возможности позвонить data. Вы должны создать myModel с помощью new:

point_data_view_model* myModel = new point_data_view_model(); 
+1

Осторожно с утечками: вид не будет удалять модель, поэтому вам нужно справиться с этим самостоятельно. – Mat

Смежные вопросы