Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.192.95.161] |
|
Сообщ.
#1
,
|
|
|
Точнее: можно ли убрать текст (нумерацию строк) в вертикальном заголовке таблицы без полной ручной перерисовки ячейки в переопределённой функции paintSection класса QHeaderView?
Спасибо. |
Сообщ.
#2
,
|
|
|
vlad2, присоедини свой пример
|
Сообщ.
#3
,
|
|
|
Цитата Majestio @ Да тот же самый, в этой ветке.присоедини свой пример Это вопрос на знание: если есть 2-3 функции, которые мне неизвестны, это одно, а если десятки строк кода, то проще отрисовать всю ячейку самому. Смысл в том, что ячейка вертикального заголовка должна быть пустой, либо с картинкой. Поэтому думал при помощи какой-то функции убрать текст или задать его пустым, а потом нарисовать или нет на этом месте картинку. Без полной ручной отрисовки. Только и всего. |
Сообщ.
#4
,
|
|
|
Ну, ручная отрисовка - это самое последнее дело, что нужно использовать. Т.к. теряется "стильность" при создании кросс-платформенных приложений. Пользователь ожидает оформление выбранной им темы, а ему "рисуют". Иными словами, когда вообще край - только тогда рисуй самостоятельно. Допустим, вывод изображения в ячейке потребует рисования, во всех остальных случаях лучше обойтись другими способами.
Ну и по твоему вопросу этой темы ... 1) Ты можешь вообще спрятать вертикальный заголовок: tableView->setVerticalHeaderVisible(false); 2) Ты можешь выводить произвольный текст, но откуда ты его возьмешь? Правильно - из твоей модели! Ведь там, и только там находятся (или вычисляются на-лету) данные для отображения. Поэтому дополни/скорректируй поведение своей модели. Например: #include <QAbstractTableModel> #include <QVariant> class MyModel : public QAbstractTableModel { public: int rowCount(const QModelIndex &parent = QModelIndex()) const override { Q_UNUSED(parent) return 0; // Замени на количество строк в твоей модели данных } int columnCount(const QModelIndex &parent = QModelIndex()) const override { Q_UNUSED(parent) return 1; // Замени на количество столбцов в твоей модели данных } QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override { if (orientation == Qt::Vertical && role == Qt::DisplayRole) { // Получаем данные из твоей модели данных // Здесь предполагается, что у тебя есть метод data() для получения данных // Замени на соответствующий код для твоей модели данных QVariant data = data(index(section, 0), Qt::DisplayRole); // Тут синтетический пример вычисления текста ячейки вертикального заголовка на основе данных QString text = (data.toInt() > 0) ? "+" : "-"; return text; } return QAbstractTableModel::headerData(section, orientation, role); } QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override { Q_UNUSED(index) Q_UNUSED(role) // Замени на соответствующий код для твоей модели данных return QVariant(); } }; В приведенном примере в ячейках вертикального заголовка будет выводится минус или плюс в зависимости от данных, хранимых в твоей модели (где-то как-то это уже второй вопрос) 3) Чтобы вместо текста рисовать картинку нужен немного другой подход - модификацию делегата, например: void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() == 0 && index.row() < model->rowCount()) { QString text = model->data(index, Qt::DisplayRole).toString(); painter->drawText(option.rect, text); // тут "рисуется" текст, но можно рисовать и картинку } else { QStyledItemDelegate::paint(painter, option, index); } } Работу с моделями и делегатами я тебе показывал в моем тестовом проекте, который я тебе оставлял. Ну и небольшое замечание: сорян, приведенные куски кода я не проверял - просто спросил у ChatGPT. Его ответы меня устроили, т.к. я помню, что такое делал когда-то сам. Ну а сидеть тестить и экспериментировать желания нет. Считаю, что самое главное - это показать куда "правильно копать" |
Сообщ.
#5
,
|
|
|
Цитата Majestio @ Спасибо, буду смотреть. Работу с моделями и делегатами я тебе показывал |