Russian Qt Forum
Сентябрь 30, 2024, 18:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget. Слишком громоздко как-то получается...  (Прочитано 6418 раз)
patison
Гость
« : Июнь 02, 2010, 00:45 »

Имеется на форме QTableWidget, с двумя колонками.
После некоторых вычислений, этот QTableWidget заполняется в цикле инфой.

Пока что реализовал следующим образом:
Код:
    
int i=0;
    foreach( FileInfoStruct item, stack ) {

        QTableWidgetItem *twItem1 = new QTableWidgetItem;
        QTableWidgetItem *twItem2 = new QTableWidgetItem;

        twItem1->setText( item.sFileName );
        twItem1->setFlags( Qt::ItemIsEnabled );
        ui->tableWidget->setItem(i, 0, twItem1);

        twItem2->setText( item.sFileAbsPath );
        twItem2->setFlags( Qt::ItemIsEnabled );
        ui->tableWidget->setItem(i, 1, twItem2);

        i++;
    }
Насколько правилен такой подход? Уж очень мне не нравится выделять такое кол-во памяти, да и + таким способом, в цикле. Тем более что нигде эта память в итоге не удаляется.
Подскажите, Как быть? Такой подход нормален? Или есть другие методики?

Спасибо.
Записан
ритт
Гость
« Ответ #1 : Июнь 02, 2010, 03:31 »

нормален, но далеко не оптимален.
советую написать простенькую табличную модель и использовать в паре с QTableView
Записан
patison
Гость
« Ответ #2 : Июнь 02, 2010, 10:17 »

В том-то и дело что с QTableView я промучался какое-то время, но так и не понял каким образом создать модель.. Все примеры что я нашёл - использовали QSqlTableViewModel или что-то в этом роде. А я с Sql вообще не работаю...
Не могли-бы вы мне показать простенький пример, подходящий для моего случая?
Записан
ритт
Гость
« Ответ #3 : Июнь 02, 2010, 18:36 »

QStringListModel - пример проще некуда
Записан
patison
Гость
« Ответ #4 : Июнь 02, 2010, 20:38 »

Я имел ввиду пример кода Улыбающийся
QStringListModel я уже смотрел. Но так и не догнал, каким образом формировать отображение.
Вот например мне нужна одна колонка в tableView. Делаю так:
Код:
    
QStringListModel qm;
qm.setHeaderData(0, Qt::Horizontal, "AAA");
ui->tableView->setModel(&qm);

Однако ничего не выходит.
Записан
MoPDoBoPoT
Гость
« Ответ #5 : Июнь 03, 2010, 00:04 »

Делаю так:
Код:
    
QStringListModel qm;
qm.setHeaderData(0, Qt::Horizontal, "AAA");
ui->tableView->setModel(&qm);

Однако ничего не выходит.
Типичная ошибка новичка. Модель создается на стеке в каком-то методе (скорей всего конструкторе) объекта -> при выходе из метода, все объекты, созданные на стеке, разрушаются. Создавай объект в куче:
Код
C++ (Qt)
 
QStringListModel *qm = new QStringListModel(this);
qm->setHeaderData(0, Qt::Horizontal, "AAA");
ui->tableView->setModel(qm);
 
Записан
patison
Гость
« Ответ #6 : Июнь 03, 2010, 00:44 »

Блин, действительно не подумал об этом. В Qt я новичек, но в С++ не совсем Улыбающийся) Совсем упустил из виду что это локальная переменная у меня.

А подскажите ещё, как теперь в созданной моделе задать имя колонки (в данный момен там просто цифра "1"), и + как добавить инфу в TableView.

Спасибо.
Записан
Kolobok
Гость
« Ответ #7 : Июнь 03, 2010, 01:15 »

QAbstractItemModel::setHeaderData ( int section, Qt::Orientation orientation, const QVariant & value, int role = Qt::EditRole )
Записан
patison
Гость
« Ответ #8 : Июнь 03, 2010, 01:21 »

Kolobok: ну я воспользовался кодом, предоставленным чуть выше:
Код:
...
qm->setHeaderData(0, Qt::Horizontal, "AAA");
...
По идее в заголовке должен быть столбец "ААА", но вместо этого там столбец "1".
Записан
Kolobok
Гость
« Ответ #9 : Июнь 03, 2010, 01:37 »

Функционал этого метода тебе придется реализовывать самому.
Записан
MoPDoBoPoT
Гость
« Ответ #10 : Июнь 03, 2010, 01:41 »

Вообще, отображение Q*ListModel подразумевается в QListView, который не имеет заголовки. Если хочешь иметь необходимый тебе заголовок, то реализуй соответствующий функционал.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.066 секунд. Запросов: 21.