Qt实现列表显示功能的是哪一个类?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt实现列表显示功能的是哪一个类?相关的知识,希望对你有一定的参考价值。
需要在一个表中显示数据库的数据,并且可以直接对表中的数据进行操作,从而间接操作数据库。
请问该用那个类实现?QListView,QTextEdit 或者其他的类?
对应一个表
或
QTableView 参考技术B QTableWidget或者QTableView吧本回答被提问者采纳
Qt:如何突出显示 QListWidget 中的重复项? (qtjambi)
【中文标题】Qt:如何突出显示 QListWidget 中的重复项? (qtjambi)【英文标题】:Qt: how do I highlight duplicated items in QListWidget? (qtjambi) 【发布时间】:2011-09-12 06:18:16 【问题描述】:我需要实现一种突出显示重复值的机制。根据值类型(字符串 - 行编辑、长和大十进制 - 旋转框),通过委托编辑值。目前,我在附加类的帮助下实现了此功能,该类将所有值及其计数存储在两个“并行”列表中。在添加一个新值之后,我增加了它的计数(或者在删除重复值时减少),但是这个解决方案似乎太庞大了。对于 QItemDelegate 的 setModelData(...)
方法中的高亮,你们有什么其他想法吗?
/**
* Stores a delegates' existing values
*/
private final class DelegateValuesStorage
private final List<Object> values = new ArrayList<Object>();
private final List<Integer> counts = new ArrayList<Integer>();
....
//Add value or increase a count if exists
public void add(final Object value)
if(values.contains(value))
final int valueIndex = values.indexOf(value);
final int oldCount = counts.get(valueIndex);
counts.remove(valueIndex);
counts.add(valueIndex, oldCount + 1);
else
values.add(value);
counts.add(1);
....
//Decrease a count or remove value if it doesn't exist anymore
public void decreaseCount(final Object value)
if(value == null)
return;
final int index = values.indexOf(value);
if(index >= 0)
final int oldCount = counts.get(index);
if(oldCount >= 2)
counts.remove(index);
counts.add(index, oldCount - 1);
else
values.remove(index);
counts.remove(index);
/**
* Delegate
*/
private class ConcreteDelegate extends QItemDelegate
private final DelegateValuesStorage values = new DelegateValuesStorage();
...
@Override
public void setModelData(final QWidget editor, final QAbstractItemModel model, final QModelIndex index)
if(editor instanceof ValEditor) // ValEditor is an abstraction of line edit and spin box over values' data types
final Object value = ((ValEditor) editor).getValue();
model.setData(index, value, Qt.ItemDataRole.UserRole);
final String newData = (value == null) ? "" : String.valueOf(value);
values.add(newData);
final String oldData = (String) model.data(index, Qt.ItemDataRole.DisplayRole);
values.decreaseCount(oldData);
model.setData(index, newData, Qt.ItemDataRole.DisplayRole);
model.setData(index, new QColor(0, 0, 0), Qt.ItemDataRole.ForegroundRole);
redrawItems(model); // runs through values and colors them red if count >= 2; or black if count == 1
else
super.setModelData(editor, model, index);
【问题讨论】:
【参考方案1】:我通常将地图用于这些类型的任务:
private final class DelegateValuesStorage
private final Map<Object, Integer> values = new HashMap<Object, Integer>();
....
//Add value or increase a count if exists
public void add(final Object value)
Integer count = values.get(value);
if (count == null)
values.put(value, 1);
else
values.put(value, count + 1);
....
//Decrease a count or remove value if it doesn't exist anymore
public void decreaseCount(final Object value)
if(value == null)
return;
Integer count = values.get(value);
if (count == null)
// decreasing a "new" value - could be an error too
return;
if (count <= 1)
// remove the value from the map
values.remove(value);
else
values.put(value, count - 1);
现在应该启用突出显示
values.get(value) > 1
是true
。
【讨论】:
以上是关于Qt实现列表显示功能的是哪一个类?的主要内容,如果未能解决你的问题,请参考以下文章
Qt:如何突出显示 QListWidget 中的重复项? (qtjambi)
菜鸟求助,请问QT使用哪个类可以画出那种静态文本框,就是实时显示我要显示的数据的,不需要有编辑功能。