QSqlTableModel不作为对象工作,但作为指针

时间:2011-07-05 18:27:11

标签: qt

我的同事发现了QSqlTableModel的下一个问题:

#define VARIANT_1
class SomeClass : public QWidget
{
    Q_OBJECT

public:

SomeClass(QWidget *parent = 0, Qt::WFlags flags = 0)
{
    ui.setupUi(this);    

    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");
    if (!db.open()) {
        return;
    }

    QSqlQuery query;
    query.exec("create table person (id int primary key, "
               "firstname varchar(20), lastname varchar(20))");
    query.exec("insert into person values(101, 'Danny', 'Young')");
    query.exec("insert into person values(102, 'Christine', 'Holand')");

#if defined( VARIANT_1 )
    p_model = new QSqlTableModel( );
    QSqlTableModel & model = *p_model;
#endif
    model.setTable("person");
    model.setEditStrategy(QSqlTableModel::OnManualSubmit);
    model.select();

    model.setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
    model.setHeaderData(1, Qt::Horizontal, QObject::tr("First name"));
    model.setHeaderData(2, Qt::Horizontal, QObject::tr("Last name"));

    ui.tableView->setModel(&model);

}

private:
    Ui::qhlbClass ui;
    QSqlDatabase db;
#if defined( VARIANT_1 )
    QSqlTableModel * p_model;
#else
    QSqlTableModel model;
#endif
};

如果定义了VARIANT_1,则tableView显示正确的表,否则 - 不是。  即如果QSqlTableModel作为对象表出现,则不显示它的数据...  如果QSqlTableModel作为指针出现它可以正常工作......  你能评论一下吗?

1 个答案:

答案 0 :(得分:4)

QSqlTableModel构造函数

QSqlTableModel ( QObject * parent = 0, QSqlDatabase db = QSqlDatabase() )

需要QSqlDatabase连接,这在建立model成员时不可用。

    QSqlDatabase db; // <-- not set
#if defined( VARIANT_1 )
    QSqlTableModel * p_model;
#else
    QSqlTableModel model; // default db isn't set
#endif

但是这里

db = QSqlDatabase::addDatabase("QSQLITE"); // a connection is set up
db.setDatabaseName(":memory:");
if (!db.open()) {
    return;
}
. . .
#if defined( VARIANT_1 )
    p_model = new QSqlTableModel( ); // <-- a default connection exists
    QSqlTableModel & model = *p_model;