QTableView с таблицей стилей - индикаторы перекрывают текст в Qt6C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 QTableView с таблицей стилей - индикаторы перекрывают текст в Qt6

Сообщение Anonymous »

Нам пришлось перенести код на Qt6, и одной из вещей, которая сломалась, был QTableView.
  • В Qt 5,15 и ранее применение таблицы стилей с настраиваемыми индикаторами флажков работало нормально.
  • В Qt 6.5.3 пользовательские индикаторы изображений перекрывались флажками по умолчанию и текстом элемента.
  • В Qt 6.6.3 и 6.7.2 пользовательские индикаторы изображений отображаются нормально, индикаторы по умолчанию больше не отображаются, но индикаторы по-прежнему перекрывают текст.
Изображение

Это определенно улучшение — но я не знаю, как исправить наложение текста, скрытого под индикатором. Единственные простые варианты также плохи:
  • добавление большого количества пробелов (перенос текста все равно будет затронут).
    < li>вставка флажка в отдельный столбец (я пробовал, но заголовок отформатирован с использованием QHeaderView::section:horizontal:first, QHeaderView::section:horizontal:only-one, который мне было трудно понять для последующие столбцы).
  • Пытался сравнить версии Qt, но не понял, откуда такие изменения.
Это очень простой пример, показывающий поведение, если кто-нибудь может мне помочь, пока Qt не исправит это полностью. Она ведет себя так же, как настоящая программа, изображения закрывают текст.
main.cpp:
#include "mymodel.h"
#include
#include

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableView tableView;
MyModel myModel;
tableView.setModel(&myModel);

QString viewStyle = "QTableView::item { padding: 10px; }\n"
"QTableView::indicator { width: 30px; height: 30px; }\n"
"QTableView::indicator:unchecked { image: url(:/checkbox_unselected.png); }\n"
"QTableView::indicator:checked { image: url(:/checkbox_selected.png); } ";
tableView.setStyleSheet(viewStyle);
tableView.setColumnWidth(0, 100);
tableView.setColumnWidth(1, 100);
tableView.setColumnWidth(2, 100);
tableView.setRowHeight(0, 100);
tableView.setRowHeight(1, 100);

tableView.show();
return a.exec();
}

mymodel.h
#include

class MyModel : public QAbstractTableModel
{
public:
explicit MyModel(QObject *parent = nullptr);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
};

mymodel.cpp
#include "mymodel.h"

MyModel::MyModel(QObject *parent) : QAbstractTableModel(parent) { }

int MyModel::rowCount(const QModelIndex & /*parent*/) const
{
return 2;
}

int MyModel::columnCount(const QModelIndex & /*parent*/) const
{
return 3;
}

QVariant MyModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole) {
return QString("Row%1, Column%2").arg(index.row() + 1).arg(index.column() +1);
}
else if (role == Qt::CheckStateRole) {
return (index.column() == 0) ? Qt::Checked : Qt::Unchecked;
}
return QVariant();
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... ext-in-qt6
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»