gpt4 book ai didi

qt - Qt模型/ View 和QTableView的基本概念

转载 作者:行者123 更新时间:2023-12-04 12:14:10 30 4
gpt4 key购买 nike

我想创建一个软件来浏览一些数据库表,用户将能够编辑这些表。在我阅读此 link 之后,我认为模型/ View 是满足我需要的好方法。看看下面的模型: enter image description here

知道这一点后,我有一些问题来确保我理解这个概念。请告诉我我的方向是否正确:

  1. 我想我需要为我的每个表创建一个模型类吗?(子类化 QAbstractModel)。它看起来像这样:

    class citiesTableModel : public QAbstractItemModel
    {
    Q_OBJECT
    }
  2. citiesTableModel 构造函数将从表中获取数据在数据库中?

    QAbstractItemModel *model = new citiesTableModel(); //model will contain 2 rows, New York and Seattle
  3. 我是否需要为每个不同的模型子类化 QTableView?

    class citiesTableView : public QTableView{}
  4. 最后,我想 view.setData 和 view.setModel 需要重新实现? setModel 将遍历每个模型行以构建QTableView 和 setData 将进行适当的查询以在模特?

非常感谢。

最佳答案

基本上你有不同的选择:

要么你的数据库是 SQL 数据库。您可以使用子类 QSqlTableModel .否则,如果您想从头开始创建模型,您可以创建自己的模型,但我不明白这一点。你还有QTableModel举个例子。

您不需要为您的每个表创建一个模型,因为它始终是一个表模型。该模型主要定义了如何添加和删除包含特定数据的行。

关于 View ,您必须继承 QTableView 才能为您的行和列添加自定义行为,例如拖动事件。

您唯一需要的自定义元素是 View 或列的委托(delegate)。它基本上会将模型中的 bool 值转换为复选框。

我建议你看看SpinBox delegate以获得更高的精度。

希望这对您有所帮助。

编辑:

对于 PostgreSQL,您可以将其添加到 QsqlDatabase 中:

 QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("acidalia");
db.setDatabaseName("customdb");
db.setUserName("mojito");
db.setPassword("J0a1m8");
bool ok = db.open();

然后将数据库传递给 QSqlTableModel。如果你需要更多的关系操作,比如从外键中获取字段,你可以使用:

QSqlRelationalTableModel
QSqlRelationalDelegate

关于qt - Qt模型/ View 和QTableView的基本概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524286/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com