$ QTDIR \ Examples \ Qt-5.7 \ widgets \ tutorials \ modelview \ 2_formattingに1つの例があります。 main.cppは次のようになります。QTableView/QAbstractTableModelバインディング
#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を追加することです。私自身のモデルでタブ内にタブビューを表示します。私のコードは次のようである:
//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();
}
、alarmForm(QTableview)にalamModel(QAbstractTableModel)を結合するのに成功することができます。
次にデザインを変更しました。メインウィンドウのUIに自分のコンテンツを表示するだけです。
NSalarmModel alarmModel(0); (1)
alarmForm->setModel(&alarmModel);
私は正常にバインドするために、このようにしなければならない:
NSalarmModel *alarmModel = new NSalarmModel(0); (2)
alarmForm->setModel(alarmModel);
だから私の質問はあるが、私はmainwindow.cppに書き込みに成功した場合だけ好きビューに私のモデルをバインドすることはできませんなぜ文章(1)がうまくいきませんか?