- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定一个 QTableWidget,有没有办法为单元格 (QTableWidgetItem) 设置一个不同于显示值的“隐藏”值?
例如,我的单元格应显示“项目 1”文本,但双击它编辑应该仅针对值 1,显示默认为 1 的旋转框。换句话说,单元格显示的文本应该从与单元格关联的值(隐藏)开始创建。
我在 QTableWidgetItem 上找不到合适的 QT 函数。
最佳答案
是的,您可以使用 QTableWidgetItem::setData()
函数来做到这一点。第一个参数定义角色,第二个参数是数据本身。除了标准角色(定义项目文本的 Qt::DisplayRole 等)之外,您还可以使用自定义角色来存储其他数据。 F
QTableWidgetItem item;
// Store the custom "invisible" data: 22
item.setData(Qt::UserRole, 22);
要检索它,您必须使用相同的角色:
QVariant v = item.data(Qt::UserRole);
int i = v.toInt();
一般来说,为了更好的代码风格,您可以使用枚举来定义您的自定义数据:
enum {
MyIntData = Qt::UserRole,
MyDblData,
MySuperItem
};
更新
这是使用项目委托(delegate)类的替代解决方案:
class Delegate : public QItemDelegate
{
public:
void setEditorData(QWidget *editor, const QModelIndex &index) const
{
QVariant value = index.model()->data(index, Qt::UserRole);
// If the editor is a spin box, set its value.
QSpinBox *spin = qobject_cast<QSpinBox *>(editor);
if (spin) {
spin->setValue(value.toInt());
} else {
QItemDelegate::setEditorData(editor, index);
}
}
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QSpinBox *spin = qobject_cast<QSpinBox *>(editor);
if (spin) {
int value = spin->value();
// If the value is changed, update the data.
if (value != index.model()->data(index, Qt::UserRole).toInt()) {
model->setData(index, value, Qt::DisplayRole);
model->setData(index, value, Qt::UserRole);
}
} else {
QItemDelegate::setModelData(editor, model, index);
}
}
};
以及如何创建表格小部件和项目:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTableWidget tw(1, 1);
tw.setItemDelegate(new Delegate);
QTableWidgetItem *item = new QTableWidgetItem();
item->setData(Qt::UserRole, 22);
item->setData(Qt::DisplayRole, 33);
tw.setItem(0, 0, item);
tw.show();
[..]
}
关于QTableWidgetItem 设置隐藏数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28025703/
给定一个 QTableWidget,有没有办法为单元格 (QTableWidgetItem) 设置一个不同于显示值的“隐藏”值? 例如,我的单元格应显示“项目 1”文本,但双击它编辑应该仅针对值 1,
我想在QTableWidgetItem 中画一条线。为了划清界线,我重新实现了 QStyledItemDelegate::paint 方法。 但是,当我滚动或选择 QTableWidget 中的项目时
如果 QTableWidgetItem 已更改其文本,我正在寻找一种干净的方式来对事件使用react。我尝试使用 Signal QTableWidget::itemChanged(QTableWidg
我想将附加数据与插入表中的每个 QTableWidgetItem 相关联,以便将来在单击表项时使用该数据。但这些数据不应该是可见的。我怎样才能做到这一点? 最佳答案 您可以使用 QTableWidge
我在 PyQt5 中创建了一个表,并通过此方法检索单元格中的数据。但是当我尝试 QTableWidgetItem 中的单元格变为 None 时。那么,我如何解决这个问题以及如何在特定单元格中插入其他确
我想实现可以选择和取消选择 QTableWidget 内的多个 QTableWidgetItem 的功能,以便了解这些 QTableWidgetItem 的值和“位置”以供进一步使用。 QTableW
我正在使用 Qt 和 python(以及 pyqt)编写一个 QGIS 插件。 在 QtDesigner 中,我有一个 QTableWidget 对象,如果有办法获取列项类型,我真的很挣扎。 例如下表
我正在使用 PySide 库用 Python 编写一个应用程序。我有一个QTableWidget,它大约每秒更新一次。问题是,我希望能够手动更改数据,并且我认为如果我可以找出用户是否正在更改单元格中的
我的程序中有一个 QTableWidget。我希望它的行和列根据表格小部件中的时间条目改变颜色。当我第一次添加时间时,它将与当前系统时间进行比较,并且颜色更改确实生效,但随着时间的推移,它不会跟上并且
我有一个qtablewidgetitem,里面有一个QCheckbox 禁用qtablewigetitem时如下 flags = self.item(row+1, self.columns["
有没有办法在QTableWidgetItem中使用富文本? 目前我有这个: widgetItem = QtWidgets.QTableWidgetItem() widget = QtWidgets.Q
您可能知道,您可以使用 setCellWidget 为 QTableWidget 中的单元格设置小部件: table->setCellWidget(0, 0, new QProgressBar); 在
我正在尝试将 QTableWidgetItem 转换为子类。我有一个这样的类层次结构: (Parent -> Child) QTableWidgetItem -> SortableTableWidge
我有一个 QTableWidget 的子类,代码如下: connect(this, SIGNAL(cellChanged(int, int)), this, SLOT(pushCellChange(i
我有一个 QtGui.QTableWidgetItem,我通过下面的 createRow 函数添加到表格中: def createRow(self, listA): rowNum = self
以下 PyQt4 示例演示了我的问题。 QTableWidget 单元格中的文本很好地居中,直到您编辑单元格。当您编辑单元格时,文本左对齐。 我想在每个单元格的编辑过程中保持居中对齐。 import
我有一个QThread,它更新QTableWidget列值。当用户双击该列的一行时,QThread 停止更新值以让用户编辑上次读取的值。 如果用户按 Enter,则发出 cellChanged(int
我认为标题不言自明:给定一个 QTableWidget,其中的项目由 setItem 成员函数添加,我想知道每个项目的边距是多少。特别是,我想要这些单元格中左边距的宽度。 最佳答案 我准备了一个计算用
我有一个 QTableWidget,上面有一些 QTableWidgetsItems。有些项目使用复选框。我使用以下代码添加了复选框: QTableWidgetsItem->setCheckState
现在我可以在函数 eventFilter() 中处理我的 QTableWidget 中的所有按键(在调用 myTable->viewport()->installEventFilter( this);
我是一名优秀的程序员,十分优秀!