Как установить цвет фона ячейки QTableWidget, когда таблица не сфокусирована?

У меня есть приложение на основе Qt с несколькими таблицами QTableWidget. Мой сценарий использования:

  1. Я щелкаю ячейку внутри первой таблицы; фокус перемещается на выбранную ячейку;
  2. Я щелкаю ячейку во второй таблице; фокус перемещается на выбранную ячейку/таблицу.

Теперь я хотел бы установить цвет фона ячейки внутри первой таблицы, которая теперь не сфокусирована, как я могу это сделать?

Версия Qt=4.8.5


person navigator    schedule 11.09.2014    source источник


Ответы (1)


Используйте eventFilter или подкласс QTableWidget. Если вы получаете фокус на какой-то tableWidget - сбросьте stylesheet, если вы получаете фокус - применяйте специальный stylesheet (пример в коде)

Например:

{
//somewhere in constructor 
string = ui->tableWidget_2->styleSheet();//save normal stylesheet
}


bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if(obj == ui->tableWidget_2 && event->type()==QEvent::FocusIn)
        ui->tableWidget_2->setStyleSheet(string);//or set just " "
    if(obj == ui->tableWidget_2 && event->type()==QEvent::FocusOut)
        ui->tableWidget_2->setStyleSheet("QTableWidget::item{background-color: red;}");

return QObject::eventFilter(obj, event);
}

В заголовке:

protected:

     bool eventFilter(QObject *obj, QEvent *event);

private:
     QString string;

Как видите, с помощью stylesheet вы можете настраивать свои ячейки, так что вы можете сделать гораздо больше, чем изменение цвета фона, конечно, если вы этого хотите.

person Kosovan    schedule 11.09.2014