简体   繁体   English

QTableView没有显示任何内容

[英]QTableView doesn't show anything

I am trying to prototype a window with a QTableView . 我试图用QTableView原型化一个窗口。 There isn't yet any database behind it, but there will be at some point. 它背后还没有任何数据库,但在某些时候会有。 I can't get the tableview to show anything. 我无法让tableview显示任何内容。 I get a rectangle with white space. 我得到一个带有空格的矩形。 I've looked at the examples online and seem to be doing everything right, as far as I can tell. 据我所知,我已经在线查看了这些示例,似乎正在做正确的事情。

I set up a QTableView object with the GUI builder and then added the following code immediately after the call to ui.setupUi(this); 我使用GUI构建器设置了一个QTableView对象,然后在调用ui.setupUi(this);后立即添加了以下代码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();

Anyone have any suggestions? 有人有什么建议吗? What am I missing? 我错过了什么?

You cannot use a QSqlTableModel without a database. 没有数据库,您不能使用QSqlTableModel As a quick workaround, you could connect it to a temporary in-memory sqlite table that literally can be created in two statements. 作为一种快速解决方法,您可以将其连接到临时内存中的sqlite表,该表可以在两个语句中创建。 For prototyping you should probably use a QStandardItemModel , though. 但是,对于原型设计,您应该使用QStandardItemModel Here's a complete example: 这是一个完整的例子:

// 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();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM