2016-06-01 3 views
1

Я пытаюсь прототип окна с QTableView. За ним еще нет базы данных, но в какой-то момент будет. Я не могу заставить табличное представление ничего показать. Я получаю прямоугольник с пробелом. Насколько я могу судить, я смотрел примеры в Интернете и, кажется, все делаю правильно.QTableView ничего не показывает

Я создал QTableView объект с GUI Builder, а затем добавил следующий код сразу после вызова ui.setupUi(this);

// set up prototype table model to hold dummy data 
QSqlTableModel * model = new QSqlTableModel(this); 

model->setTable("Errors"); 
model->setEditStrategy(QSqlTableModel::OnManualSubmit); 
model->select(); 

// set header names 
model->setHeaderData(0, Qt::Horizontal, QObject::tr("Error Number")); 
model->setHeaderData(1, Qt::Horizontal, QObject::tr("Message")); 
model->setHeaderData(2, Qt::Horizontal, QObject::tr("Details")); 

// insert a dummy record 
{ 
    QSqlRecord record; 
    QSqlField field1("Errno", QVariant::Int); 
    field1.setValue(1); 
    record.insert(0, field1); 

    QSqlField field2("Msg", QVariant::String); 
    field2.setValue(QString("Unable to perform snapshot")); 
    record.insert(1, field2); 

    QSqlField field3("Details", QVariant::String); 
    field3.setValue(QString("Unable to perform snapshot. Please try again")); 
    record.insert(2, field3); 

    model->insertRecord(0, record); 
} 

// insert a dummy record 
{ 
    QSqlRecord record; 
    QSqlField field1("Errno", QVariant::Int); 
    field1.setValue(1); 
    record.insert(0, field1); 

    QSqlField field2("Msg", QVariant::String); 
    field2.setValue(QString("Unable to perform snapshot")); 
    record.insert(1, field2); 

    QSqlField field3("Details", QVariant::String); 
    field3.setValue(QString("Unable to perform snapshot. Please try again")); 
    record.insert(2, field3); 

    model->insertRecord(1, record); 
} 

ui.errMsgsTableView->setEditTriggers(QAbstractItemView::NoEditTriggers); 
ui.errMsgsTableView->setModel(model); 

ui.errMsgsTableView->show(); 

Кто-нибудь есть какие-либо предложения? Что мне не хватает?

+0

Действительно ли модель содержит данные? Откуда вы знаете, что ваши вставки преуспели? –

+0

Очевидно, это не так. Вставки модели не работают с «невозможностью найти Ошибки таблицы». – user3407352

+0

Поддерживает ли QT то, что я пытаюсь сделать? Используйте QTableView без реальной базы данных за ней? Просто загрузите материал для прототипирования? – user3407352

ответ

0

Вы не можете использовать QSqlTableModel без базы данных. В качестве быстрого обходного пути вы можете подключить его к временной таблице sqlite в памяти, которая буквально может быть создана в двух операциях. Однако для прототипирования вы, вероятно, должны использовать QStandardItemModel. Вот полный пример:

// https://github.com/KubaO/stackoverflown/tree/master/questions/dummymodel-37577922 
#include <QtWidgets> 

template <typename T> QStandardItem * newItem(const T val) { 
    auto item = new QStandardItem; 
    item->setData(val, Qt::DisplayRole); 
    return item; 
} 

int main(int argc, char ** argv) { 
    QApplication app{argc, argv}; 

    QStandardItemModel model; 
    model.setColumnCount(3); 
    model.setHorizontalHeaderLabels(QStringList{"Error Number", "Message", "Details"}); 

    auto newRow = []{ return QList<QStandardItem*>{ 
     newItem(1), 
     newItem("Unable to perform snapshot"), 
     newItem("Unable to perform snapshot. Please try again")}; 
    }; 
    model.appendRow(newRow()); 
    model.appendRow(newRow()); 

    QTableView view; 
    view.setModel(&model); 
    view.show(); 

    return app.exec(); 
} 
+0

Спасибо. Я добавил БД, и он работает. – user3407352

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