gpt4 book ai didi

c++ - 将类附加到 QStandardItemModel

转载 作者:搜寻专家 更新时间:2023-10-31 00:07:47 24 4
gpt4 key购买 nike

如何将 BundleItem 类的项附加到 QListView 的 QStandardItem 模型?当附加它们时,我只想使用 BundleItem 的 Name 属性显示在 ListView 中。我希望指向实际项目的指针存在于模型的 UserRole 中,这样当用户双击列表中的项目时,现在它只会打印到调试器控制台或类似的东西。

#include "mainwindow.h"
#include <QVBoxLayout>
#include <QListView>
#include <QSortFilterProxyModel>
#include <QStandardItemModel>
#include <QAbstractItemModel>

struct BundleItem {
QString name;
QString nickname;
QString team;

// Constructor
BundleItem(QString name,
QString nickname,
QString team):
name(name), nickname(nickname), team(team)
{}
};

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
auto *proxyModel = new QSortFilterProxyModel;
proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);

auto *widget = new QWidget(this);
auto *lay = new QVBoxLayout(widget);
auto *listview = new QListView();

auto *model = new QStandardItemModel();
proxyModel->setSourceModel(model);
listview->setModel(proxyModel);

// add Item to list
BundleItem("Kevin", "Kev", "Coyotes");
BundleItem("Michael", "Mike", "Walkers");

lay->addWidget(listview);
setCentralWidget(widget);
}

MainWindow::~MainWindow()
{

}

最佳答案

最简单的版本是从 QStandardItem 类继承。

struct BundleItem : public QStandardItem {
QString name;
QString nickname;
QString team;

BundleItem(QString name,
QString nickname,
QString team):
QStandardItem(name), // call constructor of base class - name will be displayed in listview
name(name), nickname(nickname), team(team)
{}
};

请记住在 BundleItem 的构造函数中调用 QStandardItem 构造函数并将 name 作为参数传递。

将项目添加到 ListView 的行是:

model->appendRow (new BundleItem("Kevin", "Kev", "Coyotes"));
model->appendRow (new BundleItem("Michael", "Mike", "Walkers"));

就是这样,您的 ListView 由两个项目填充:KevinMichael

如果你想处理双击 Action ,你可以在你的插槽中使用

handleDoubleClick (const QModelIndex&); // declaration of your slot

方法 QStandardItemModel::indexFromItem(const QModelIndex&)QModelIndex(从插槽传递索引)作为参数并返回指向 QStandardItem 的指针。您只需将此指针转换为 BundleItem,然后您就可以访问您类(class)的其他成员。

关于c++ - 将类附加到 QStandardItemModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52356809/

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