На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> QHeaderView: как убрать нумерацию строк в вертикальном заголовке таблицы? , Qt 5.0.2
    Точнее: можно ли убрать текст (нумерацию строк) в вертикальном заголовке таблицы без полной ручной перерисовки ячейки в переопределённой функции paintSection класса QHeaderView?
    Спасибо.
    Сообщение отредактировано: vlad2 -
      vlad2, присоедини свой пример ;)
        Цитата Majestio @
        присоедини свой пример
        Да тот же самый, в этой ветке.
        Это вопрос на знание: если есть 2-3 функции, которые мне неизвестны, это одно, а если десятки строк кода, то проще отрисовать всю ячейку самому. Смысл в том, что ячейка вертикального заголовка должна быть пустой, либо с картинкой. Поэтому думал при помощи какой-то функции убрать текст или задать его пустым, а потом нарисовать или нет на этом месте картинку. Без полной ручной отрисовки. Только и всего.
          Ну, ручная отрисовка - это самое последнее дело, что нужно использовать. Т.к. теряется "стильность" при создании кросс-платформенных приложений. Пользователь ожидает оформление выбранной им темы, а ему "рисуют". Иными словами, когда вообще край - только тогда рисуй самостоятельно. Допустим, вывод изображения в ячейке потребует рисования, во всех остальных случаях лучше обойтись другими способами.

          Ну и по твоему вопросу этой темы ...

          1) Ты можешь вообще спрятать вертикальный заголовок:

          ExpandedWrap disabled
            tableView->setVerticalHeaderVisible(false);

          2) Ты можешь выводить произвольный текст, но откуда ты его возьмешь?

          Правильно - из твоей модели! Ведь там, и только там находятся (или вычисляются на-лету) данные для отображения. Поэтому дополни/скорректируй поведение своей модели. Например:

          ExpandedWrap disabled
            #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) Чтобы вместо текста рисовать картинку нужен немного другой подход - модификацию делегата, например:

          ExpandedWrap disabled
            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. Его ответы меня устроили, т.к. я помню, что такое делал когда-то сам. Ну а сидеть тестить и экспериментировать желания нет. Считаю, что самое главное - это показать куда "правильно копать" :)
            Цитата Majestio @
            Работу с моделями и делегатами я тебе показывал
            Спасибо, буду смотреть.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0541 ]   [ 16 queries used ]   [ Generated: 8.09.24, 01:10 GMT ]