Различают цвет чередующихся строк от цвета выделения в QTableWidget

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

Все отлично работает, но если я устанавливаю свойство setAlternatingRowColors правда, у меня есть визуальная проблема. (Я думаю, что 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();
}

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

Выбор неотличим от чередующегося ряда

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

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

1 ответ

Решение

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

QString style = "QTableWidget { alternate-background-color: white; background-color: gray; }";
style.append(" QTableWidget::item:selected { background: red; }"); //selection color
QApplication::setStyleSheet(style);
Другие вопросы по тегам