如何为特定的QTableWidgetItem或QTableWidget行分配边框?

4
我正在尝试使QTableWidget中的某些单元格具有不同颜色的边框,这取决于单元格中包含的信息。我不想选择那些单元格并使用选定颜色样式,因为需要选择/突出显示不同的单元格。
例如,我有一个表格,其中有3列和3行。每个单元格都有简单的文本。 [] [名称] [值] [单位] [1] [one] [1] [cm] [2] [two] [2] [in] [3] [three][3] [m]
用户选择第一行并将其突出显示,后台进程更新表格中的值,并将第三行的值更新为4。现在我想让第三行周围有一个红色边框。
2个回答

8

要更改边框本身,您可能需要创建一个自定义委托来执行以下操作:

class MyDelegate : public QItemDelegate {
  public:
    MyDelegate( QObject *parent ) : QItemDelegate( parent ) { }
    void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const {
      QItemDelegate::paint( painter, option, index );
      if( /* some condition */ ) {
         painter->setPen( Qt::red );
         painter->drawRect( option.rect );
      }
    }
}

然后,您可以调用:

myTableWidget->setItemDelegate( new MyDelegate(this) );

你可以使用QTableWidgetItem::setData()QModelIndex::data()函数,在表格和委托之间传递必要的信息。
请参阅Qt文档中有关QItemDelegate的说明。

非常感谢。这正是我在寻找的。我有一个关于if(某些条件)部分以及如何为每个单元格设置该信息的问题。你能帮我吗?我编辑了我的问题,包括我需要帮助的代码。谢谢。 - Brian
正如我的答案所述,使用QTableWidgetItem::setData()来获取您需要存储在模型中的信息。然后可以通过在您的QModelIndex对象上调用data()来在您的委托中检索它。 - Chris
从文档中得知:“QAbstractItemView不会拥有委托对象”,因此您不能在方法调用中仅创建一个新对象而不正确设置其父级。 - Nils
@chris,你能告诉我在pyqt4中怎么做吗?我的程序也遇到了同样的问题,我需要移除特定行的边框,但是我尝试了很多方法都不完美。如果你知道的话,能否请你告诉我? - navya sri

0
据我所知,您可以使用不同的颜色突出显示单元格。我没有看到任何仅更改单元格边框的选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接