У меня два QTableWidget
s, это должно синхронизировать их выбор. Точнее, все, что выбрано в Таблице 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?
Это должно работать (в основном):
QString style = "QTableWidget { alternate-background-color: white; background-color: gray; }";
style.append(" QTableWidget::item:selected { background: red; }"); //selection color
QApplication::setStyleSheet(style);
Других решений пока нет …