问题
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.
回答1:
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
回答2:
AFAIK, you can highlight the cell with a different color. I don't see any option that changes only the border of the cell.
来源:https://stackoverflow.com/questions/7262318/how-do-i-assign-a-border-to-a-specific-qtablewidgetitem-or-a-row-in-a-qtablewidg