在 QTableWidget 中区分交替行颜色和选择颜色
Distinguish alternating rows color from selection color in QTableWidget
我有两个 QTableWidget
,应该同步它们的选择。更准确地说,Table 2 中选择的所有内容都应在 Table 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();
}
即使奇数行元素的选择和之前一样,用户也没有机会看到这个选择。好像两种颜色都一样(但为什么会这样?)
从这个角度来看,可能只有两种可能的解决方案。更改选择颜色或更改 alternatingRows 的颜色。
如何在可能包含更多 QTableWidgets 的整个应用程序中一致地更改交替行的颜色?
这应该有效(主要):
QString style = "QTableWidget { alternate-background-color: white; background-color: gray; }";
style.append(" QTableWidget::item:selected { background: red; }"); //selection color
QApplication::setStyleSheet(style);
我有两个 QTableWidget
,应该同步它们的选择。更准确地说,Table 2 中选择的所有内容都应在 Table 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();
}
即使奇数行元素的选择和之前一样,用户也没有机会看到这个选择。好像两种颜色都一样(但为什么会这样?)
从这个角度来看,可能只有两种可能的解决方案。更改选择颜色或更改 alternatingRows 的颜色。
如何在可能包含更多 QTableWidgets 的整个应用程序中一致地更改交替行的颜色?
这应该有效(主要):
QString style = "QTableWidget { alternate-background-color: white; background-color: gray; }";
style.append(" QTableWidget::item:selected { background: red; }"); //selection color
QApplication::setStyleSheet(style);