gpt4 book ai didi

c++ - Qt 中 QStandardItemModel 中的重复行

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

我正在努力实现一些我认为很容易但不知道如何让它发挥作用的事情。

在这个基本示例中,我正在创建一个地址簿,一个人可以在 2 个组中,John Doe 是 friend ,也是工作同事。

如果我在 friend 组中更改了他的电话号码,它也应该在工作组中更改。

这就是我第一次尝试使用静态内容的方式(最后它链接到一个数据库)

 addressBookListModel = new QStandardItemModel(0, 4);
addressBookListModel->setHeaderData(0,Qt::Horizontal,"First Name", Qt::DisplayRole);
addressBookListModel->setHeaderData(0,Qt::Horizontal,"fn", Qt::UserRole);
addressBookListModel->setHeaderData(1,Qt::Horizontal,"Last Name", Qt::DisplayRole);
addressBookListModel->setHeaderData(1,Qt::Horizontal,"ln", Qt::UserRole);
addressBookListModel->setHeaderData(2,Qt::Horizontal,"E-Mail", Qt::DisplayRole);
addressBookListModel->setHeaderData(2,Qt::Horizontal,"mail", Qt::UserRole);
addressBookListModel->setHeaderData(3,Qt::Horizontal,"Phone Number", Qt::DisplayRole);
addressBookListModel->setHeaderData(3,Qt::Horizontal,"phone", Qt::UserRole);

然后插入数据:

//Group 1
QStandardItem * work = new QStandardItem("Work");

QList<QStandardItem*> workgroup;
workgroup << work ;
addressBookListModel->appendRow(workgroup);

//group 2
QStandardItem * friends = new QStandardItem("Friends");

QList<QStandardItem*> friendgroup;
friendgroup << friends ;
addressBookListModel->appendRow(friendgroup);

//One contact in both groups
QStandardItem * fn = new QStandardItem("John");
QStandardItem * ln = new QStandardItem("Doe");
QStandardItem * mail = new QStandardItem("john.doe@gmail.com");
QStandardItem * phone = new QStandardItem("+123456789");

QList<QStandardItem*> rowitems;
rowitems << fn << ln << mail << phone;
work->appendRow(rowitems);
friends->appendRow(row items);

但这只会将 john doe 插入到这样的工作中:

enter image description here

我认为这是因为行项不是指针,所以我这样尝试:

//One contact in both groups 2

QStandardItem * fn = new QStandardItem("John");
QStandardItem * ln = new QStandardItem("Doe");
QStandardItem * mail = new QStandardItem("john.doe@gmail.com");
QStandardItem * phone = new QStandardItem("+123456789");

QList<QStandardItem*> rowitems;
rowitems << fn << ln << mail << phone;

QList<QStandardItem*> rowitemsB;
rowitemsB << fn << ln << mail << phone;


work->appendRow(rowitems);
friends->appendRow(rowitemsB);

但这给了我完全相同的结果,John Doe 没有出现在 Friends 中,尽管在这两种情况下,都有一个箭头指示 child 的存在。

知道如何让相同的数据出现两次吗?

最佳答案

QStandardItem 可以添加一次,而且只能添加一次到QStandardItemModel。检查您的调试器日志,我确定 QT 会写调试消息说当您两次插入相同的项目时不允许这样做。顺便说一句,插入两次的项的 QStandrardItem::index() 会返回什么(此方法返回项在 QStandardItemModel 中的行/列位置)?

因此您必须创建不同的QStandardItem。你应该这样做:

void addEntry( const QString& first, const QString& last, const QString& mail, const QString& tel, QStandardItem* parent )
{
QStandardItem * fn = new QStandardItem(first);
QStandardItem * ln = new QStandardItem(last);
QStandardItem * mail = new QStandardItem(mail);
QStandardItem * phone = new QStandardItem(tel);
QList<QStandardItem*> rowitems;
rowitems << fn << ln << mail << phone;
parent->appendRow(rowitems);
}

...
addEntry( "John", "Doe", "john.doe@gmail.com", "+123456789", work );
addEntry( "John", "Doe", "john.doe@gmail.com", "+123456789", friends );

关于c++ - Qt 中 QStandardItemModel 中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33062383/

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