作为一名C / C#程序员,我是Qt的新手,对C ++没什么经验。
我想要做的是在包含我的数据的类中“制作”QTableView的模型。在C#中,我可以从包含有关此数据的所有内容的类中的静态方法返回DataSet,并将此数据集绑定到我的表或列表。
public class Books
{
//properties
...
//construtors etc...
...
static DataSet BookData()
{
// fill my dataset
return myDataSet;
}
}
在主程序中,我然后将我的DataSet与我想要使用的控件
绑定有没有办法在Qt / C ++中做同样的事情,这样我就可以这样写:
QSqlTableModel* Books::BookData()
{
// Create an QSqlTableModel
// Fill it with my data
return model; // or whatever is possible
}
在主程序中:
...
ui->tvBooks->setModel(BookData());
...
这是正确的垃圾清理还是这种一厢情愿的想法......
TNX
答案 0 :(得分:0)
在Qt中,通常如下所示:
setModel
,让视图显示模型中的内容。Qt有两种通用的模型方法:
使用具体模型并使用数据填充它。此类模型包括QStringListModel
,QStandardItemModel
以及与数据库接口的模型,例如QSqlTableModel
。
创建一个派生自其中一个基本模型类的类,例如QAbstractListModel
,QAbstractTableModel
或QAbstractItemModel
。重新实现相关的虚拟方法以实现您自己的模型。
在您的情况下,您可以,例如:
让Books
班级成员QStandardItemModel
,并用它来存储图书数据。不要将数据存储在该模型之外。该类应该将模型暴露给外部,然后您可以在视图上设置它。这将是更简单的方法,因为您不需要自己重新实现模型。
如果您希望SQL的灵活性可用于访问数据,您还可以使用内存中的SQLITE数据库,并通过QSqlTableModel
,QSqlQueryModel
或{{ 1}}。除此之外,方法如上所述。
(您的回答)有一个返回新创建的静态模型的方法。
让QSQLRelationalTableModel
类继承Books
。这需要你理解Qt模型的语义,并且有点难。
如果您希望每次数据库内容发生变化时都使用静态模型(例如QAbstractTableModel
),您可以轻松利用QSqlQueryModel
的复合性。
要管理模型的生命周期,它可以自动使自己成为视图的子项,并删除任何其他同样也是该视图的子项:
QObject
答案 1 :(得分:0)
[解决]
我为解决此案做了什么:
class Books
{
static void* GetBookData(QTableView *model)
{
model->setTable("books.books");
model->select();
...
}
};
在图书馆
和
...
QTableView *view = new QTableView;
...
Books::GetBookData(view);
ui->myCombobox->setModel(view);
...
delete view;
...
在主程序中。