Как сделать в QTableView полупрозрачное выделение текущей строки?
Необходимость в таком выделении возникла после того как, обнаружил что цвет ячеек, получаемый из модели методом data() для роли Qt::BackgroundRole, напрочь перекрывается цветом выделения строки. А хочется видеть всяческие раскраски даже для текущей строки. А если в модели будет 1 строка (т.е. она же текущая), то вообще цвет подкраски никогда не отобразится.
Исправить ситуцию с помощью стилей не получилось (назвачение цвета выделения с прозрачностью 30%):
myTableView->setStyleSheet("QTableView::item {selection-color: black; selection-background-color: rgba(30, 144, 255, 30%);}");
Так же обнаружил, что выделение в QTreeView и только в стиле WindowsVista работает именно так как мне хотелось (через выделение виден цвет ячеек).
Очень хотелось бы добится аналогичного поведения при выделении в QTableView.
Скрины во вложениях.
Пример:
#include <QtGui>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QDialog* window = new QDialog(0);
window->setAttribute(Qt::WA_DeleteOnClose);
window->resize(350,250);
QVBoxLayout* lw = new QVBoxLayout(window);
QTableView* tbv = new QTableView(window);
tbv->setAlternatingRowColors(true);
tbv->setSelectionMode(QAbstractItemView::SingleSelection);
tbv->setSelectionBehavior(QAbstractItemView::SelectRows);
tbv->verticalHeader()->setDefaultSectionSize(20);
tbv->horizontalHeader()->setStretchLastSection(false);
tbv->setStyleSheet("QTableView::item {selection-color: black; selection-background-color: rgba(30, 144, 255, 100);}"); //DodgerBlue
lw->addWidget(tbv);
QTreeView* trv = new QTreeView(window);
trv->setAlternatingRowColors(true);
trv->setSelectionMode(QAbstractItemView::SingleSelection);
trv->setSelectionBehavior(QAbstractItemView::SelectRows);
trv->header()->setStretchLastSection(false);
lw->addWidget(trv);
QStandardItemModel* model = new QStandardItemModel(3,3,window);
model->setData(model->index(0,0), QVariant("abc"));
model->setData(model->index(1,0), QVariant("Abc"));
model->setData(model->index(2,0), QVariant("ABC"));
model->setData(model->index(0,1), QVariant(10));
model->setData(model->index(1,1), QVariant(0));
model->setData(model->index(2,1), QVariant(-10));
model->setData(model->index(0,2), QVariant(true));
model->setData(model->index(1,2), QVariant(false));
model->setData(model->index(2,2), QVariant(true));
model->setData(model->index(1,0), QVariant(QBrush(Qt::red)), Qt::BackgroundRole);
model->setData(model->index(1,1), QVariant(QBrush(Qt::yellow)), Qt::BackgroundRole);
model->setData(model->index(1,2), QVariant(QBrush(Qt::green)), Qt::BackgroundRole);
tbv->setModel(model);
trv->setModel(model);
window->show();
return app.exec();
}
P.S. Гуглил, но решения так и не нашел.
Использовал Qt 4.8.5.