是什么力量让一个TableView中的细胞具有向上和向下按钮按下的状态在Qt的最好方法是什么?

StackOverflow https://stackoverflow.com/questions/970618

我试图做一个QTableView的细胞看起来像3D可点击按钮。所以,当你点击一个单元格,按钮看起来推。 似乎每个人都认为我只是想改变颜色,我需要表现出正常的按钮和推按钮的图片,看起来三维的。

我有打电话QTableView::setItemDelegate(),用适当的ItemDelegate单击时,将改变细胞的背景已经做到了这一点。但是我卡在这一点上,因为我想要一些细胞是基于它们所包含的数据不同颜色的按钮。因此,与低数量的细胞将是一个红色按钮,这也是红色时,它的点击,和其他细胞将是不同的颜色。

我可以设置与TableModel按钮的颜色,但一旦按钮被点击,就没有办法为ItemDelegate知道它应该是一个不同的颜色比其他人。你怎么能链接两个这样的ItemDelegate知道它应该是什么颜色呢?

此外,有没有简单地更好的方法,使细胞像按钮?

有帮助吗?

解决方案

可以从QModelIndex::model()ItemDelegate方法中调用paint(),因为它有一个QModelIndex参数。这使你的数据,你可以通过编程决定细胞的按钮,会是什么颜色的TableModel

然而,这仍然不是优雅,我倒是希望。有谁知道一个更好的办法来改变表格单元格的外观,当在两个上下按钮按下的状态?

其他提示

你为什么不问背景色的索引。

像这样...

QStyleOptionToolButton buttonOption;
const QStyleOptionViewItemV4& optionV4 = dynamic_cast<QStyleOptionViewItemV4&>(option);
//...
buttonOption.palette.setBrush( QPalette::Button, index.data( Qt::BackgroundColorRole ) ); 
//...

我觉得它在Qt和错误的一定是...

// model code  
if(role==Qt::BackgroundColorRole )
    return qvariant_cast<QBrush>( QBrush(Qt::red) );

// delegate code 
buttonOption.palette.setBrush(QPalette::Button, optionV4.backgroundBrush );

由于该optionV4.backgroundBrush处于sizeHint方法正确的,但是在paint方法无效。我看到现在之所以sizeHint应具备的背景画笔和paint方法不行。我会向诺基亚报告。

编辑:搜索结果 看来我是对的,它在 QStyleOptionViewItemV4不复制图标和backgroundBrush

您无法获取表格单元格的行的ID /行计数,然后检查它,你可以在具有颜色表,并设置相应的颜色?我不知道如果我理解你的问题好不好。

指定为背景色数据角色,并在您的项目委托,询问模型指标就是它的背景颜色(使用data( bg_color_role )或类似的东西)。然后,在你的模型,你需要确保数据函数返回用于建模的数据是合适的bg_color_role颜色。

做到这一点的方法是使用你上了漆方法QModelIndex对象的数据的方法,并要求一个特定的角色(如果定义了一个自定义模式,您可以添加自己的角色,并给予信息你需要在这些角色的委托。)

TIMW,我认为你必须填补之前调用initStyleOption的QStyleOptionViewItemV4信息。

我不知道在哪里的背景图像的需求从何而来。如果你想在细胞看起来像QPushButtons,你应该从QItemDelegate继承,并实现paint()使用QStyle画出你QPushButton,是这样的:

QStyleOptionButton opt;
// fill 'opt' from the information from the model, and the style option that's passed in
style()->drawControl( QStyle::CE_PushButton, &opt, painter );

您是否尝试过使用自定义样式表?

您可以只应用相同的样式表的每一个细胞,然后更改背景图片/风格取决于它是否选中后的3D按钮图像绘制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top