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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Таблица из колонок  (Прочитано 7361 раз)
Int main()
Гость
« : Июль 19, 2013, 18:03 »

Подскажите, как сделать таблицу, которая состоит из колонок и которую нельзя редактировать, только просматривать. Надо использовать клас QTabWidget, да? Если да, то как это можно реализовать(пример кода) Подмигивающий
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июль 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 это
« Последнее редактирование: Июль 19, 2013, 18:44 от gil9red » Записан

Int main()
Гость
« Ответ #2 : Июль 21, 2013, 13:59 »

item->setText(QString(%1 %2).arg(i).arg(j));
здесь пишет, что ошибка, типа лишний знак ")"
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #3 : Июль 21, 2013, 14:50 »

оберни %1 %2 в кавычки
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Int main()
Гость
« Ответ #4 : Июль 23, 2013, 20:42 »

на скрине видно, что выделена ячейка 2,4. Как сделать, чтобы выделялась вся строка, например, 1-4, 2-4, 3-4 и т.д. Типа показано на скрине с первого поста
« Последнее редактирование: Июль 23, 2013, 20:43 от Int main() » Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #5 : Июль 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);
« Последнее редактирование: Июль 23, 2013, 21:41 от Hellraiser » Записан
Int main()
Гость
« Ответ #6 : Июль 23, 2013, 21:58 »

Как пример
Код
C++ (Qt)
myTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

это уже я сделал как видно со скрина. Вроде выделяется вся строка, но в тоже время выделена какая-то ячейка пунктирной линией. Как это исправить?
Записан
BuRn
Гость
« Ответ #7 : Июль 24, 2013, 18:35 »

Как пример
Код
C++ (Qt)
myTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

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

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Июль 25, 2013, 06:45 »

Как пример
Код
C++ (Qt)
myTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

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

Это текущая ячейка Улыбающийся
Хоть и происходит выделение всей строки, но текущая ячейка также будет выделена Улыбающийся
Надо поиграться с флагами QTableWidgetItem и глядишь можно будет убрать ту пунктирную линию Улыбающийся
Впрочем, не только флаги можно попробовать, но и изменение стиля через setStyleSheet, но тут уже нужно будет у таблицы менять Улыбающийся
« Последнее редактирование: Июль 25, 2013, 13:18 от gil9red » Записан

Int main()
Гость
« Ответ #9 : Июль 25, 2013, 09:52 »

хорошо, попробую поиграться с флагами, отпишу что да как
Записан
Int main()
Гость
« Ответ #10 : Июль 26, 2013, 18:52 »

ничего не получается, блин(
Записан
VPS
Гость
« Ответ #11 : Июль 26, 2013, 19:58 »

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

Можно создать свой делегат отнаследованный например, от QItemDelegate и в нём переопределить метод:
Код:
void drawFocus(QPainter * painter, const QStyleOptionViewItem & option, const QRect & rect ) const;
В простейшем случае, сделать его пустым (хотя это и некрасиво)...
Ну и назначить этот делегат виджету.
Записан
Bepec
Гость
« Ответ #12 : Июль 26, 2013, 20:44 »

Или же поставить NoFocus Веселый Или же qss'ом убить рамку.
Записан
Int main()
Гость
« Ответ #13 : Август 01, 2013, 17:39 »

эх, ладно, отложим этот вопрос на потом. Лучше скажите как выровнять имена(шапку) колонок таблицы слева. По умолчанию они по центру, а мне нужно слева
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #14 : Август 01, 2013, 17:57 »

tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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