Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Int main() от Июль 19, 2013, 18:03



Название: Таблица из колонок
Отправлено: Int main() от Июль 19, 2013, 18:03
Подскажите, как сделать таблицу, которая состоит из колонок и которую нельзя редактировать, только просматривать. Надо использовать клас QTabWidget, да? Если да, то как это можно реализовать(пример кода) ;)


Название: Re: Таблица из колонок
Отправлено: gil9red от Июль 19, 2013, 18:42
Вот так создается и заполняется таблица:
Код:
QTableWidget *tableWidget = new QTableWidget();
tableWidget->setColumnCount(9); // колонок
tableWidget->setRowCount(9); // строк

for(int i = 0; i < 9; i++)
 for(int j = 0; j < 9; j++)
 {
  QTableWidgetItem *item = new QTableWidgetItem();
  item->setText(QString(%1 %2).arg(i).arg(j));

  // ячейка может быть активна и выделена
  // если захочется, чтобы и  редактируема, добавляем флаг Qt::ItemIsEditable
  item->setFlags(Qt::ItemIsSelectable
                       | Qt::ItemIsEnabled);

  tableWidget->setItem (i, j, item);
 }

QStringList labels;
labels << "first" << "second" << "third" << "fourth"
        << "fifth" << "sixth" << "seventh" << "eighth" << "ninth";
tableWidget->setHorizontalHeaderLabels(labels); // заголовок таблицы


PS. QTabWidget это (http://harmattan-dev.nokia.com/docs/library/html/qt4/images/windowsxp-tabwidget.png)


Название: Re: Таблица из колонок
Отправлено: Int main() от Июль 21, 2013, 13:59
item->setText(QString(%1 %2).arg(i).arg(j));
здесь пишет, что ошибка, типа лишний знак ")"


Название: Re: Таблица из колонок
Отправлено: kambala от Июль 21, 2013, 14:50
оберни %1 %2 в кавычки


Название: Re: Таблица из колонок
Отправлено: Int main() от Июль 23, 2013, 20:42
на скрине видно, что выделена ячейка 2,4. Как сделать, чтобы выделялась вся строка, например, 1-4, 2-4, 3-4 и т.д. Типа показано на скрине с первого поста


Название: Re: Таблица из колонок
Отправлено: Hellraiser от Июль 23, 2013, 21:38
Смотреть здесь:
http://qt-project.org/doc/qt-4.8/qabstractitemview.html#selectionBehavior-prop
http://qt-project.org/doc/qt-4.8/qabstractitemview.html#SelectionBehavior-enum
http://qt-project.org/doc/qt-4.8/qabstractitemview.html#selectionMode-prop
http://qt-project.org/doc/qt-4.8/qabstractitemview.html#SelectionMode-enum
Как пример
Код
C++ (Qt)
myTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);


Название: Re: Таблица из колонок
Отправлено: Int main() от Июль 23, 2013, 21:58
Как пример
Код
C++ (Qt)
myTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

это уже я сделал как видно со скрина. Вроде выделяется вся строка, но в тоже время выделена какая-то ячейка пунктирной линией. Как это исправить?


Название: Re: Таблица из колонок
Отправлено: BuRn от Июль 24, 2013, 18:35
Как пример
Код
C++ (Qt)
myTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

это уже я сделал как видно со скрина. Вроде выделяется вся строка, но в тоже время выделена какая-то ячейка пунктирной линией. Как это исправить?
Это видимо фокус, установленный на эту ячейку. Хотя мб и не прав


Название: Re: Таблица из колонок
Отправлено: gil9red от Июль 25, 2013, 06:45
Как пример
Код
C++ (Qt)
myTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

это уже я сделал как видно со скрина. Вроде выделяется вся строка, но в тоже время выделена какая-то ячейка пунктирной линией. Как это исправить?
Это видимо фокус, установленный на эту ячейку. Хотя мб и не прав

Это текущая ячейка :)
Хоть и происходит выделение всей строки, но текущая ячейка также будет выделена :)
Надо поиграться с флагами QTableWidgetItem и глядишь можно будет убрать ту пунктирную линию :)
Впрочем, не только флаги можно попробовать, но и изменение стиля через setStyleSheet, но тут уже нужно будет у таблицы менять :)


Название: Re: Таблица из колонок
Отправлено: Int main() от Июль 25, 2013, 09:52
хорошо, попробую поиграться с флагами, отпишу что да как


Название: Re: Таблица из колонок
Отправлено: Int main() от Июль 26, 2013, 18:52
ничего не получается, блин(


Название: Re: Таблица из колонок
Отправлено: VPS от Июль 26, 2013, 19:58
Вроде выделяется вся строка, но в тоже время выделена какая-то ячейка пунктирной линией. Как это исправить?

Можно создать свой делегат отнаследованный например, от QItemDelegate и в нём переопределить метод:
Код:
void drawFocus(QPainter * painter, const QStyleOptionViewItem & option, const QRect & rect ) const;
В простейшем случае, сделать его пустым (хотя это и некрасиво)...
Ну и назначить этот делегат виджету.


Название: Re: Таблица из колонок
Отправлено: Bepec от Июль 26, 2013, 20:44
Или же поставить NoFocus :D Или же qss'ом убить рамку.


Название: Re: Таблица из колонок
Отправлено: Int main() от Август 01, 2013, 17:39
эх, ладно, отложим этот вопрос на потом. Лучше скажите как выровнять имена(шапку) колонок таблицы слева. По умолчанию они по центру, а мне нужно слева


Название: Re: Таблица из колонок
Отправлено: kambala от Август 01, 2013, 17:57
tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);


Название: Re: Таблица из колонок
Отправлено: Int main() от Август 01, 2013, 19:13
спасибо