Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: z11t3 от Январь 27, 2010, 10:39



Название: Как создать таблицу на n,m полей?
Отправлено: z11t3 от Январь 27, 2010, 10:39
Гуглил, читал доку, смотрел примеры в поставке QT, искал по форуму. В общем пытался разобраться самостоятельно две недели.

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

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

P.S. Искал по форуму, найденное не помогло мне разобраться в вопросе.


Название: Re: Как создать таблицу на n,m полей?
Отправлено: BRE от Январь 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]



Название: Re: Как создать таблицу на n,m полей?
Отправлено: Amigo_sa от Январь 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.


Название: Re: Как создать таблицу на n,m полей?
Отправлено: Amigo_sa от Январь 27, 2010, 10:58
Код:
        form.gameTable->(i, j, item);
}

form.gameTable->setItem(i, j, item);


Название: Re: Как создать таблицу на n,m полей?
Отправлено: z11t3 от Январь 27, 2010, 11:06
Спасибо BRE. С моделями думаю теперь сам разберусь. Таблицы у меня действительно большие (~20М записей)

Amigo_sa благодарю, понял где я ошибался.