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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как создать таблицу на n,m полей?  (Прочитано 11085 раз)
z11t3
Гость
« : Январь 27, 2010, 10:39 »

Гуглил, читал доку, смотрел примеры в поставке QT, искал по форуму. В общем пытался разобраться самостоятельно две недели.

Помогите кодом пожалуйста.
Нужно создать таблицу размерностью n,m. Отображаться пользователю в ней будет текст.
Изменять количество полей/строк и текст в ячейках.

Пока не хочу разбираться с моделями данных (связанная с SQL таблицей модель, при изменении данных в таблице изменила их в базе, боюсь за взрыв своего мозга)

P.S. Искал по форуму, найденное не помогло мне разобраться в вопросе.
Записан
BRE
Гость
« Ответ #1 : Январь 27, 2010, 10:56 »

Без моделей будет очень тяжко работать с большими таблицами.

Для работы с таблицами без явного использования модели в Qt есть класс QTableWidget.
Для создания таблицы можно использовать конструктор:
QTableWidget::QTableWidget ( int rows, int columns, QWidget * parent = 0 )
в котором указывается количество рядов и колонок или:
QTableWidget::QTableWidget ( QWidget * parent = 0 ),
но после создания нужно будет задать размеры используя методы:
setRowCount( rows );
setColumnCount( columns );

После создания таблицы, в ней нет ни одного элемента (QTableWidgetItem), которые хранят данные - таблица пуста.
Элементы могут устанавливаться в ячейки:
* если пользователь отредактировал одну из ячеек;
* программно с помощью метода QTableWidget::setItem.

Получить элемент можно с помощью метода QTableWidget::item.
Если в этой ячейке нет элемента, item вернет 0. Это означает, что для занесения значения в эту ячейку, необходимо создать элемент и установить его в таблицу.

Для добавления строк/столбцов есть методы:
void QTableWidget::insertRow ( int row )   [slot]
void QTableWidget::insertColumn ( int column )   [slot]

Записан
Amigo_sa
Гость
« Ответ #2 : Январь 27, 2010, 10:56 »

Код:
// form.gameTable типа QTableWidget
form.gameTable->clear();
// изменения количества полей\строк
form.gameTable->setColumnCount(m);
form.gameTable->setRowCount(n);

for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
               QTableWidgetItem * item = new QTableWidgetItem(QString::fromLocal8Bit("Твой текст"));
               form.gameTable->(i, j, item);
               // изменение текста
               item->setText("Changed text");
}
}


За дополнительной функциональностью читайте Assistant.
Записан
Amigo_sa
Гость
« Ответ #3 : Январь 27, 2010, 10:58 »

Код:
        form.gameTable->(i, j, item);
}

form.gameTable->setItem(i, j, item);
Записан
z11t3
Гость
« Ответ #4 : Январь 27, 2010, 11:06 »

Спасибо BRE. С моделями думаю теперь сам разберусь. Таблицы у меня действительно большие (~20М записей)

Amigo_sa благодарю, понял где я ошибался.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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