Отличить чередующийся цвет строк от цвета выделения в QTableWidget

У меня есть два QTableWidget, которые должны синхронизировать их выбор. Точнее, все, что выбрано в Таблице 2, должно быть автоматически выбрано в Таблице 1.

Все работает нормально, но если я устанавливаю для свойства setAlternatingRowColors значение true, у меня возникают визуальные проблемы. (Я думаю, что setAlternatingRowsColors — отличная функция.)

#include <QApplication>
#include <QPushButton>
#include <QTableWidget>
#include <QHBoxLayout>

QTableWidget* create() {
    auto table = new QTableWidget;
    table->setAlternatingRowColors(true);
    table->setSortingEnabled(true);
    table->setRowCount(20);
    table->setColumnCount(2);
    for (auto i = 0; i < 20; i++) {
        {
            auto item = new QTableWidgetItem(QString("%1").arg(i));
            table->setItem(i, 1, item);
        }
        {
            auto item = new QTableWidgetItem(QString("%1").arg(i));
            table->setItem(i, 0, item);
        }
    }
    return table;
}
int main(int argc, char** args) {
    QApplication app(argc, args);
    QTableWidget* table1 = create();
    QTableWidget* table2 = create();
    auto frame = new QFrame;
    frame->setLayout(new QHBoxLayout);
    frame->layout()->addWidget(table1);
    frame->layout()->addWidget(table2);
    frame->show();
    QObject::connect(table2, &QTableWidget::itemSelectionChanged, [&]() {
        table1->selectionModel()->clearSelection();
        for (auto item : table2->selectedItems()) {
            table1->item(item->row(), item->column())->setSelected(true);
        }
        table1->update();
    });
    app.exec();
}

Несмотря на то, что выделение элементов в нечетных рядах осуществляется по-прежнему, у пользователя нет возможности увидеть это выделение. Кажется, что оба цвета одинаковые (Но почему это так?).

Выделение неотличимо от чередующейся строки

С этой точки зрения может быть только два возможных решения. Либо измените цвет выделения, либо измените цвет чередующихся строк.

Как я могу последовательно изменить цвет чередующихся строк во всем приложении, которое может содержать еще больше QTableWidget?


person Aleph0    schedule 04.01.2018    source источник
comment
Не то, чтобы это действительно имело значение здесь, но у вас есть утечка памяти   -  person Xatyrian    schedule 04.01.2018


Ответы (1)


Это должно работать (в основном):

QString style = "QTableWidget { alternate-background-color: white; background-color: gray; }";
style.append(" QTableWidget::item:selected { background: red; }"); //selection color
QApplication::setStyleSheet(style);
person p-a-o-l-o    schedule 04.01.2018
comment
Спасибо за ответ. Будет ли это работать среди всех QStyle? (На самом деле я использую только окна, но мне просто любопытно.) - person Aleph0; 04.01.2018
comment
На самом деле, это работает, но имеет некоторые побочные эффекты. Также возможно изменить цвет выделения? - person Aleph0; 04.01.2018
comment
Извиняюсь. Нет никакого побочного эффекта. Мне просто не нужно устанавливать background-color: gray. - person Aleph0; 04.01.2018
comment
Еще. Как изменить цвет выделения? Это возможно? - person Aleph0; 04.01.2018
comment
Пишет: QApplication, передано недопустимое переопределение стиля, игнорируется. В вашем случае работает? Мы используем Qt 5.8. - person Aleph0; 04.01.2018
comment
Еще раз отредактировал, извините. - person p-a-o-l-o; 04.01.2018
comment
Работает как шарм. Большое спасибо за ваш быстрый ответ. Мне интересно, пропускает ли QT эту проблему случайно или преднамеренно. - person Aleph0; 04.01.2018