$ QTDIR \ Examples \ Qt-5.7 \ widgets \ tutorials \ modelview \ 2_formatting中有一个示例。 main.cpp是这样的:
#include <QtWidgets/QApplication>
#include <QtWidgets/QTableView>
#include "mymodel.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableView tableView;
MyModel myModel(0);
tableView.setModel( &myModel );
tableView.show();
return a.exec();
}
我根据这个例子写了一个测试程序。目的是添加一个tabwidget。并使用我自己的模型在选项卡中显示tabview。我的代码是这样的:
//nsalarmmodel.h
#ifndef NSALARMMODEL_H
#define NSALARMMODEL_H
#include <QAbstractTableModel>
class NSalarmModel : public QAbstractTableModel
{
Q_OBJECT
public:
NSalarmModel(QObject *parent);
int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE ;
int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;
};
//main.cpp
#include "nsalarmmodel.h"
#include <QTabWidget>
#include <QtWidgets/QGridLayout>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTabWidget *tabWidget;
QGridLayout *gridLayout;
tabWidget = new QTabWidget;
QTabWidget *alarmTab = new QTabWidget;
QTableView *alarmForm = new QTableView(alarmTab);
tabWidget->addTab(alarmTab,"TEST");
gridLayout = new QGridLayout(alarmTab);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(11, 11, 11, 11);
gridLayout->setObjectName(QStringLiteral("gridLayout"));
gridLayout->addWidget(alarmForm, 0, 0, 1, 1);
tabWidget->show();
//QTableView tableView;
NSalarmModel alarmModel(0);
alarmForm->setModel( &alarmModel);
return a.exec();
}
并且可以成功将alamModel(QAbstractTableModel)绑定到alarmForm(QTableview)。
然后我改变了我的设计。只需在mainwindow UI中显示我的内容。但如果我在mainwindow.cpp中写一下,我就无法成功地将我的模型绑定到视图中:
NSalarmModel alarmModel(0); (1)
alarmForm->setModel( &alarmModel);
我必须这样做才能成功绑定:
NSalarmModel *alarmModel = new NSalarmModel(0); (2)
alarmForm->setModel( alarmModel);
所以我的问题是为什么句子(1)效果不好?