Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I assign a border to a specific QTableWidgetItem or a row in a QTableWidget?

I am trying to make certain cells in my QTableWidget have different colored borders based on the information contained in an item(cell).

I do not want to select those cells and use the selection-color styles because different cells need to be selected/highlighted.

for ex. I have a table with 3 columns and 3 rows. All the cells have simple text in each of them.
[] [Name] [Value] [Units]
[1] [one] [1] [cm]
[2] [two] [2] [in]
[3] [three][3] [m]

The 1st row is selected by the user and is highlighted, a process in the background updates the values in the table and updates the value in the 3rd row to 4. Now I want to make the 3rd row have a red border around it.

like image 464
Brian Avatar asked Nov 03 '25 00:11

Brian


1 Answers

To change the border itself you'll probably need to create a custom delegate that does something along these lines:

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 );
      }
    }
}

Then you can call:

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

You can use QTableWidgetItem::setData() and the QModelIndex::data() functions to pass the necessary information back and forth between your table and the delegate

See the qt documentation for QItemDelegate

like image 105
Chris Avatar answered Nov 05 '25 13:11

Chris