更改QTableView的选择行为
我在Qt中使用QTableView,我有一个表,其中每个单元格都有不同的文本颜色。我有选择行为选择整行。但当我选择任何一行时,所选行的文本颜色将变为白色。我不想在选定行时更改文本颜色。我希望在选择任何行时显示原始颜色 我试图使用样式表,但它也改变了整行文本的颜色 我在这里张贴样本代码更改QTableView的选择行为,qt,qtableview,Qt,Qtableview,我在Qt中使用QTableView,我有一个表,其中每个单元格都有不同的文本颜色。我有选择行为选择整行。但当我选择任何一行时,所选行的文本颜色将变为白色。我不想在选定行时更改文本颜色。我希望在选择任何行时显示原始颜色 我试图使用样式表,但它也改变了整行文本的颜色 我在这里张贴样本代码 QTableView * pQTableView = new QTableView(); QStandardItemModel *model = new QStandardItemModel(5,3);
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();
QTableView*pQTableView=newqtableview();
QStandardItemModel*模型=新QStandardItemModel(5,3);
pQTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
pQTableView->setModel(模型);
对于(int行=0;行<5;行++)
for(int列=0;列<3;列++)
{
QModelIndex index1=模型->索引(行、列);
Q变量值(“Swaminarayan”);
model->setData(index1,value,Qt::DisplayRole);
}
QModelIndex index1=模型->索引(0,0);
QOBJ变体(Qt::绿色);
model->setData(index1、Obj、Qt::TextColorRole);
index1=模型->指数(0,1);
QJ1变型(Qt::红色);
模型->设置数据(index1、Obj1、Qt::TextColorRole);
pQTableView->show();
在这里,当我们选择第一行颜色变为白色时,您可以看到第一个单元格的颜色是绿色,第二个单元格的颜色是红色。似乎您应该基于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::foreggroundrole
您可以实现您的颜色
请参阅QAbstractTableModel以获取参考。希望有帮助。您也可以将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);
}
}
connect(myTableView,
信号(单击(常数QModelIndex&)),
这
插槽(onItemClicked(常数QModelIndex&));
//....
void数据模型::onItemClicked(常量QModelIndex和索引)
{
//获取单击的项目
QStandardItem*点击editem=myDataModel->itemFromIndex(index);
//吵架
int selectedRow=单击编辑项->行();
//对于每个颜色,根据需要更改颜色
对于(int c=0,colCount=myDataModel->columnCount();citem(selectedRow,c);
刷子;
笔刷。设置颜色(Qt::红色);
itemToChange->setData(画笔,Qt::ForegroundRole);
}
}
我希望我说的是你在找什么。如果有任何(或非常)不同,请回复。:)谢谢分享代码!这对我理解你的问题有很大帮助。您希望保留已设置的文本颜色-无论是否选中单元格。这是一个好的和艰难的。我将删除当前的答案(因为它是不相关的),并将为您的问题寻找解决方案。