~~如何在每个QStandardItem前面加个感叹号??

southbirdfly 2010-09-10 09:36:47
我是用treeview 和QStandardItemModel显示数据的,需要在数据前显示一个感叹号,该怎么做??
...全文
237 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lefttime 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 southbirdfly 的回复:]

引用 9 楼 lefttime 的回复:

在一个完整的model中, 对于要显示对象来说并不浪费, 而不需要显示的对象(是删除还是隐藏))就得自己把……

还不是很理解....
比如,我第一次要显示的时候new了很多item,然后添加数据,第二次要显示的时候又把所有item给new了一遍..那我一次new出来的item哪去了?会不会已经自动释放?如果不会,那我要刷新很多遍,那就需要n……
[/Quote]
已经存在的不需要再new出来~``
如果不一样, 那完全可以将原有的从model中删除~```
southbirdfly 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lefttime 的回复:]

在一个完整的model中, 对于要显示对象来说并不浪费, 而不需要显示的对象(是删除还是隐藏))就得自己把……
[/Quote]
还不是很理解....
比如,我第一次要显示的时候new了很多item,然后添加数据,第二次要显示的时候又把所有item给new了一遍..那我一次new出来的item哪去了?会不会已经自动释放?如果不会,那我要刷新很多遍,那就需要new很多遍,这不是要占用很多资源么?
请指教,谢谢
lefttime 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 southbirdfly 的回复:]

引用 6 楼 lefttime 的回复:
是这样的~``
不过如果只是针对于stringList的话, 也可以用QStringListModel```

还有,像这样每次需要显示的时候都需要去new一遍,会不会很费资源??
[/Quote]
在一个完整的model中, 对于要显示对象来说并不浪费, 而不需要显示的对象(是删除还是隐藏))就得自己把握了?
southbirdfly 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lefttime 的回复:]
是这样的~``
不过如果只是针对于stringList的话, 也可以用QStringListModel```
[/Quote]
还有,像这样每次需要显示的时候都需要去new一遍,会不会很费资源??
southbirdfly 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lefttime 的回复:]
是这样的~``
不过如果只是针对于stringList的话, 也可以用QStringListModel```
[/Quote]

我也试过用QStringListModel,不过找不到可以在数据前面加个checkBox的方法.
而不像QStandaradItem有setCheckable这样的函数可用
southbirdfly 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 lefttime 的回复:]
这是数据结构方面的问题了~``
如何拆解显示,自然原样的合并存储~``
哇噻噻, 这一问一答都可以盖楼了@@
[/Quote]
呵呵,那我只好暂时先按原来的那样做了...到时候有效率方面的问题时再改进吧。
真的很感谢你,结贴咯!
lefttime 2010-09-11
  • 打赏
  • 举报
回复
这是数据结构方面的问题了~``
如何拆解显示,自然原样的合并存储~``
哇噻噻, 这一问一答都可以盖楼了@@
southbirdfly 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lefttime 的回复:]
嗯,的确这类操作很多~``
事实上判断相同与否的操作还是有必要的, 因为判断耗费的时间和存取数据耗费的时间相比明显比较小,所以在频繁操作
或者数据量比较大的情况下最好加上判断~`` 当然判断建立在顺序相同(model和list排序方式一样)的情况下会更合适```
因为从list到model只是初始化, 修改只需要对model进行, 而保存结果从model到list即可; 尽量避免修改的过程在……
[/Quote]
但数据从model到list会不会很不方便?因为假设我list里面存储的是结构体,那我需要从model的每一行中取出各个数据段,然后构造一个结构体,再放到list中去,这样工作量也不小吧?而且我在其他的窗口也会用到这里的list,也就是list里的数据要时时保持和model里的一样...

真的非常感谢你的解答!!
lefttime 2010-09-11
  • 打赏
  • 举报
回复
嗯,的确这类操作很多~``
事实上判断相同与否的操作还是有必要的, 因为判断耗费的时间和存取数据耗费的时间相比明显比较小,所以在频繁操作
或者数据量比较大的情况下最好加上判断~`` 当然判断建立在顺序相同(model和list排序方式一样)的情况下会更合适```
因为从list到model只是初始化, 修改只需要对model进行, 而保存结果从model到list即可; 尽量避免修改的过程在list
中。
southbirdfly 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lefttime 的回复:]
添加数据的时候,应该是对standardModel操作,而不是对list操作!!!
添加的时候判断一下即可, 如果数据相同就没必要再重新new出来~```
这里贴出的show()一般在初始化时调用, 其它对model的修改不建议这么使用~``
[/Quote]
可是我的数据是保存在list里面的,它是从数据库读出来的,也需要放到数据库里面,而且数据显示是有顺序的,也就是我可能添加很多条数据或者删除很多条数据,那我不可能每次都去判断数据相不相同,每条数据该放在什么哪一行或者删除哪一行的数据吧,我当然希望在list里面先排好序,再一次就把所有数据再全部显示出来..
lefttime 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 southbirdfly 的回复:]

引用 11 楼 lefttime 的回复:
已经存在的不需要再new出来~``
如果不一样, 那完全可以将原有的从model中删除~```

不用重新new吗?
比如我有一个函数,是把这些item添加到model的,如下
C/C++ code
void show()
{
if(standardModel != NULL)
standardModel->clear(……
[/Quote]
添加数据的时候,应该是对standardModel操作,而不是对list操作!!!
添加的时候判断一下即可, 如果数据相同就没必要再重新new出来~```
这里贴出的show()一般在初始化时调用, 其它对model的修改不建议这么使用~``
southbirdfly 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lefttime 的回复:]
已经存在的不需要再new出来~``
如果不一样, 那完全可以将原有的从model中删除~```
[/Quote]
不用重新new吗?
比如我有一个函数,是把这些item添加到model的,如下
void show()
{
if(standardModel != NULL)
standardModel->clear();

for(int index = 0; index < list.count(); ++index)
{
QStandardItem *item = new QStandardItem(list.at(index));
standardModel->insertRow(index, item);
}
}

然后我往list里面添加数据,再把list里面的数据显示出来,那我就需要重新去调用上面的show函数,这时候,虽然list里的数据有些是和以前相同的,但这些都需要再重新再new一遍...
不知道我这样说对不对?或者有什么其他不用重新new过的方法?谢谢
lefttime 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 southbirdfly 的回复:]

引用 2 楼 southbirdfly 的回复:


那如果item前面有个checkBox,要把图标放在checkbox后面怎么办??
我按你上面说的,结果图标是显示在checkBox的前面的

不好意思,说反了...
是要把图标放在checkbox前面
[/Quote]
这种情况的话, 一般将这个图标作为一个item放在前面~``
southbirdfly 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 southbirdfly 的回复:]


那如果item前面有个checkBox,要把图标放在checkbox后面怎么办??
我按你上面说的,结果图标是显示在checkBox的前面的
[/Quote]
不好意思,说反了...
是要把图标放在checkbox前面
southbirdfly 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lefttime 的回复:]
调用QStandardItem::setIcon(const QIcon& icon);方法, 将数据item前加个感叹号的图标即可~``
[/Quote]
那如果item前面有个checkBox,要把图标放在checkbox后面怎么办??
我按你上面说的,结果图标是显示在checkBox的前面的
lefttime 2010-09-10
  • 打赏
  • 举报
回复
是这样的~``
不过如果只是针对于stringList的话, 也可以用QStringListModel```
lefttime 2010-09-10
  • 打赏
  • 举报
回复
调用QStandardItem::setIcon(const QIcon& icon);方法, 将数据item前加个感叹号的图标即可~``
southbirdfly 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lefttime 的回复:]

这种情况的话, 一般将这个图标作为一个item放在前面~``
[/Quote]
能不能帮忙解答一下另外一个相关的问题,也是关于QStandardItemModel的...
就是model里的item如何显示出来的问题。
为了说明问题,先看下面的简单代码

QStringList list;
QStandardItemModel* standardModel = new QStandardItemModel;

for(int index = 0; index < list.count(); ++index)
{
QStandardItem *item = new QStandardItem(list.at(index));
standardModel->insertRow(index, item);
}


假设list里面有很多条数据,那就要new很多条item,然后显示。
之后,我往list里面添加数据,然后想让list里面的所有数据再全部显示出来,那这时候是不是只能再去new所有的item出来??

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧