Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Модель/Представление _ отображение в QTableView

Автор: vanvo 22.3.2009, 13:49

Возникло пара вопросов:
1. Можно представлять записи в QTableView не строками, а столбцами?
2. Почему изменить горизонтальные заголовки с помощью

model.setHeaderData(0, Qt::Horizontal, tr("region"), Qt::DisplayRole);

удается, а именить вертикальные заголовки (где по имолчанию счетчик записей) с помощью этой же функции не получается
model.setHeaderData(0, Qt::Vertical, tr("region"), Qt::DisplayRole);
?

Автор: ViGOur 24.3.2009, 21:00

Цитата(vanvo @ 22.3.2009, 13:49) *
Можно представлять записи в QTableView не строками, а столбцами?
Не думаю, что это можно. Просто стандартное представление идет строками, а не столбцами. Таблица заполняющаяся по одному столбцу, а не по строке, думаю будет выглядеть забавно.

А для чего тебе это нужно?

Цитата(vanvo @ 22.3.2009, 13:49) *
Почему изменить горизонтальные заголовки с помощью
Просто Header это заголовок, а то, что с боку, называется как-то по другому.

Автор: Litkevich Yuriy 24.3.2009, 21:27

Цитата(ViGOur @ 25.3.2009, 0:00) *
Просто Header это заголовок, а то, что с боку, называется как-то по другому.
нет, всё также.
vanvo, всё работает ищи багу у себя

#include <QApplication>
#include <QTextCodec>
#include <QStandardItemModel>
#include <QTableView>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    // Установим кодировку для функции перевода tr()
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

    
    // Создадим табличную модель 2 столца, 4 строки
    QStandardItemModel model(4, 2);
    
    // Создадим табличное представление
    // и установим для него модель
    QTableView tableView;
    tableView.setModel(&model);
    
    // Заполним модель данными
    for (int row = 0; row < 4; row++)
    {
        // создаем строчки
        for (int column = 0; column < 2; column++)
        {
            // создаем колонки
            QModelIndex index = model.index(row, column, QModelIndex());
            model.setData(index, QVariant((row) + (column)));//
        }
    }

    // заголовок
    model.setHeaderData(0, Qt::Horizontal, QObject::tr("region"), Qt::DisplayRole);
    model.setHeaderData(0, Qt::Vertical, QObject::tr("YYY"), Qt::DisplayRole);

    // Отобразим представление
    tableView.show();
    return app.exec();
}

Автор: vanvo 2.4.2009, 21:35

Цитата(ViGOur @ 24.3.2009, 21:00) *
Цитата(vanvo @ 22.3.2009, 13:49) *
Можно представлять записи в QTableView не строками, а столбцами?
Не думаю, что это можно. Просто стандартное представление идет строками, а не столбцами. Таблица заполняющаяся по одному столбцу, а не по строке, думаю будет выглядеть забавно.

А для чего тебе это нужно?

Ну допустим, у нас таблица со множеством полей. При выборке информации мы точно знаем, что получим в результате одну запись. Как ее можно удобно отобразить? Если использовать стандартный QTableView, то таблица будет слишком длинная. Я думаю, что отображение, при котором в первом столбце будут названия полей, а во втором - данные, довольно приемлимо. Хотя интересно послушать ваше мнение :)
И еще вопросец назрел: как можно в header'е писать в несколько строк?

Автор: Litkevich Yuriy 2.4.2009, 22:13

Цитата(vanvo @ 3.4.2009, 1:35) *
как можно в header'е писать в несколько строк?
а стандартный прием:
str = "first line\nsecond line";

не помогает?

Автор: vanvo 3.4.2009, 12:29

Цитата(Litkevich Yuriy @ 2.4.2009, 22:13) *
Цитата(vanvo @ 3.4.2009, 1:35) *
как можно в header'е писать в несколько строк?
а стандартный прием:
str = "first line\nsecond line";

не помогает?

Хм... Вот точно помню, что пробовал - не получалось: \n отображалось как текст. А сейчас работает :) Спасибо :)

Автор: Litkevich Yuriy 25.4.2010, 21:00

Тему разделил: http://www.forum.crossplatform.ru/index.php?showtopic=4819

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)