在$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。并使用我自己的模型在选项卡中显示选项卡视图。我的代码是这样的:
//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)。
然后我改变了我的设计。只需在主窗口UI中显示我的内容。但是,如果我用mainwindow.cpp编写,我就不能成功地将模型绑定到视图,就像这样:
NSalarmModel alarmModel(0); (1)
alarmForm->setModel( &alarmModel);我必须这样做才能成功绑定:
NSalarmModel *alarmModel = new NSalarmModel(0); (2)
alarmForm->setModel( alarmModel);所以我的问题是为什么句子(1)不能很好地工作?
发布于 2017-01-12 17:39:20
在(1)中,模型被分配到堆栈中,并在代码块的末尾被销毁。您必须将其分配到堆中,如(2)所示。
请参阅The stack and the heap
https://stackoverflow.com/questions/41609504
复制相似问题