我在Qt中使用QTableView,我有一个表格,其中每个单元格都有不同的文字颜色。我有选择行为选择整行。但是当我选择任何行时,所选行的文本颜色会变为白色。我不想在选择行时更改文本颜色。我想在选择任何一行时显示原始颜色。
我尝试使用样式表,但它也改变了整行文本颜色。
我在这里发布示例代码
QTableView * pQTableView = new QTableView();
QStandardItemModel *model = new QStandardItemModel(5,3);
pQTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
pQTableView->setModel(model);
for(int row = 0;row < 5;row++)
for(int column = 0; column < 3; column++)
{
QModelIndex index1= model->index(row,column);
QVariant value("Swaminarayan");
model->setData(index1, value,Qt::DisplayRole );
}
QModelIndex index1= model->index(0,0);
QVariant Obj(Qt::green);
model->setData(index1,Obj,Qt::TextColorRole );
index1= model->index(0,1);
QVariant Obj1(Qt::red);
model->setData(index1, Obj1,Qt::TextColorRole );
pQTableView->show();
一旦我们选择第一行颜色变为白色,您可以看到第一个单元格的颜色为绿色,第二个单元格的颜色为红色。
答案 0 :(得分:1)
您也可以将TableView的选择模式设置为NoSelection。 然后,您可以使用itemClicked()信号获取项目索引,并根据需要为行中的每个项目设置其颜色。像这样:
connect( myTableView,
SIGNAL( clicked( const QModelIndex &) ),
this,
SLOT( onItemClicked(const QModelIndex &) ) ) ;
//....
void DataModel::onItemClicked(const QModelIndex &index)
{
//get the clicked item
QStandardItem *clickedItem = myDataModel->itemFromIndex(index);
// get the row
int selectedRow = clickedItem->row();
// for each col change the color as you want
for(int c = 0, colCount = myDataModel->columnCount(); c < colCount; ++c)
{
QStandardItem *itemToChange = myDataModel->item( selectedRow, c);
QBrush brush;
brush.setColor(Qt::red);
itemToChange ->setData(brush, Qt::ForegroundRole);
}
}
答案 1 :(得分:0)
看来你应该基于QTableView和reload data()函数实现自己的表视图:
QVariant YourTableViewClass::data(const QModelIndex &index, int role) const
{
if(!index.isValid()) {
return QVariant();
}
/* any other checks here */
switch(role) {
case Qt::BackgroundRole:
return QColor(/* background colour here */);
case Qt::ForegroundRole:
return QColor(/* foreground colour here */);
case Qt::DisplayRole:
/* any other actions here */
default:
break;
} /* switch(role) */
return QVariant();
}
对于Qt::BackgroundRole
和Qt::ForegroundRole
,您可以实现颜色。
请参阅http://qt-project.org/doc/qt-5.0/qtcore/qabstracttablemodel.html以获取QAbstractTableModel以供参考。希望它有所帮助。