Как изменить цвет фона с помощью Qt :: BackgroundRole, когда присутствует StyleSheet - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь установить цвет фона элемента QTableView, перезаписывая метод данных для Qt :: BackgroundRole.

Это работает без таблицы стилей .

Нос qss, где я устанавливаю свойство границы QTableView :: item, оно не работает.

Мне нужны некоторые QTableViews с общей таблицей стилей и один QTableView с измененным цветом фона в Qt :: DisplayRole.

  • Я пытался отделить свой QTableView :: item от setObjectName: QTableView # SecondView :: item.

  • Я также пытался удалить таблицу стилейиз моего QTableView:

    • m_p_table_view2->setStyleSheet("");

    или

    • m_p_table_view2->setStyleSheet(0);

    • или в таблице стилей с border: 0;

Но без успеха.

MyProxyModel наследует от QStandardItemModel

class MyProxyModel : public QStandardItemModel
{
public:
     MyProxyModel(int in_row, int in_col);

    QVariant data(const QModelIndex &in_index, int in_role) const override;
};

А потом я перезаписываю метод данных

QVariant MyProxyModel::data(const QModelIndex &in_index, int in_role) const
{
    if(Qt::BackgroundRole == in_role)
    {
        int tmp = QStandardItemModel::data(in_index, Qt::DisplayRole).toInt();

        switch (tmp)
        {
        case 1:
            return QVariant(QColor(0xBB, 0xFF, 0x99));
            break;
   ...
        default:

            break;
        }
    }

    return QStandardItemModel::data(in_index, in_role);
}

Он работает без таблицы стилей.

Но с таблицей стилей это небез работы.



/*------------------------------------------*/
/*default*/
QTableView
{
    border: 1px solid #cccccc;
    background: #f3f3f3;
    color: #252424;
    font-family: "Segoe UI";
    outline: 0;
}

QTableView::item
{
/*    border-bottom: 1px solid #cccccc;     */  /* causes the bug */
}

/*------------------------------------------*/
/*second view*/
QTableView#SecondView
{
    background: #99dd99;
    border: 1px solid #cccccc;
    color: #252424;
    font-family: "Segoe UI";
    outline: 0;
}

QTableView#SecondView::item
{
/*    border: 0;    */                          /* causes the bug too */
}

...