【问题标题】:How do I assign a border to a specific QTableWidgetItem or a row in a QTableWidget?如何为特定的 QTableWidgetItem 或 QTableWidget 中的行分配边框?
【发布时间】:2011-08-31 19:25:57
【问题描述】:

我正在尝试根据项目(单元格)中包含的信息使 QTableWidget 中的某些单元格具有不同颜色的边框。

我不想选择这些单元格并使用选择颜色样式,因为需要选择/突出显示不同的单元格。

例如。 我有一个有 3 列和 3 行的表。所有单元格中都有简单的文本。
[] [名称] [值] [单位]
[1][1][1][cm]
[2][二][2][中]
[3][三][3][米]

第一行被用户选中并突出显示,后台进程更新表中的值并将第三行中的值更新为4。现在我想让第三行周围有一个红色边框它。

【问题讨论】:

    标签: qt qtablewidget qtablewidgetitem


    【解决方案1】:

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

    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() 函数在您的表和委托之间来回传递必要的信息

    请参阅QItemDelegate 的 qt 文档

    【讨论】:

    • 非常感谢。这正是我一直在寻找的。我确实对 if( some condition ) 部分以及如何为每个单元格设置该信息有疑问。你能帮我解决这个问题吗?我在上面编辑了我的问题以包含我需要帮助的代码。谢谢。
    • 如我的回答中所述,使用 QTableWidgetItem::setData() 获取您需要存储在模型中的信息。然后可以通过在 QModelIndex 对象上调用 data() 在您的委托中检索它。
    • 来自文档:“QAbstractItemView 不获取委托的所有权。”因此,您不能只在方法调用内部创建一个新对象,而无需正确设置它的父对象。
    • @chris 你能在 pyqt4 中告诉我吗?我的程序也有同样的问题,我需要删除特定行的边框,但我尝试了很多方法,这些方法都不能正常工作。如果你知道,请告诉我
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      相关资源
      最近更新 更多