Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QT4 Увеличение размера таблицы.


Автор: Bars_rb 19.5.2008, 12:06
Такой вопрос.
Есть таблица. QTableWidget.
При создании она 2х1.
Но во время работы надо ее увеличить.
Делая setRowCount(5) количество строк увеличивается, но туда нельзя ничего записать.
Ковыряя сырцы понял, что надо сделать setItem для каждой ячейки.
Но при этом для каждой надо создать отдельный элемент типа QTableWidgetItem.
Я пробовал создать один, и всем ячейкам его присвоить - не хочет.
ПО этому вопрос. Как это дело можно обойти, либо автоматом все ячейки сделать доступными.
В принципе в таблице будет только текст. По этому мож есть какой-то другой компонент?

Автор: JackYF 19.5.2008, 14:34
Цитата(Bars_rb @  19.5.2008,  11:06 Найти цитируемый пост)
Но при этом для каждой надо создать отдельный элемент типа QTableWidgetItem.

да.

Цитата(Bars_rb @  19.5.2008,  11:06 Найти цитируемый пост)
Как это дело можно обойти

зачем?

Автор: archimed7592 19.5.2008, 14:55
Цитата(Bars_rb @  19.5.2008,  12:06 Найти цитируемый пост)
Как это дело можно обойти, либо автоматом все ячейки сделать доступными.

Унаследоваться от QTableWidget и при изменении кол-ва строк/столбцев заливать их new QTableWidgetItem() автоматом. Если это устраивает, конечно...

Автор: Bars_rb 20.5.2008, 12:55
Цитата(JackYF @ 19.5.2008,  12:34)
Цитата(Bars_rb @  19.5.2008,  11:06 Найти цитируемый пост)
Как это дело можно обойти

зачем?

 QTableWidgetItem *__tableItem = new QTableWidgetItem();
    table->setItem(0, 0, __tableItem);
    QTableWidgetItem *__tableItem1 = new QTableWidgetItem();
    table->setItem(0, 1, __tableItem1);
    QTableWidgetItem *__tableItem2 = new QTableWidgetItem();
    table->setItem(1, 0, __tableItem2);

Вот так происходит, если делать дизигнером.
то есть он сам для каждой ячейки создает указатель на QTableWidgetItem.

А у меня количество ячеек не известно.
И как в цикле каждой присвоить этот указатель через setItem - я не знаю.
Собстно в этом вся проблема.

Автор: XavierElf 20.5.2008, 13:33
ну так сделай так:
Код

QTableWidgetItem *tableItem = new QTableWidgetItem();
table->setItem(0, 0, tableItem);
tableItem = new QTableWidgetItem();
table->setItem(0, 1, tableItem);
tableItem = new QTableWidgetItem();
table->setItem(1, 0, tableItem);

Автор: archimed7592 20.5.2008, 14:22
Цитата(Bars_rb @  20.5.2008,  12:55 Найти цитируемый пост)
И как в цикле каждой присвоить этот указатель через setItem - я не знаю.

Код

int rowCount = 100;
int colCount = 2;
QTableWidget *table = ...;
for(int r = 0; r < rowCount; ++r)
    for(int c = 0; c < colCount; ++c)
        if (table->item(r, c) == 0)
            table->setItem(r, c, new TableWidgetItem());

Автор: Bars_rb 20.5.2008, 18:14
Всем огромное спасибо.

XavierElf, я пытался, но немного по другому. Так не пробовал. Оказалось - работает. smile Огромное спасибо.


archimed7592, и как-то так я тоже пытался, но видимо что-то не то делал. Твой способ как-то немного красивее смотрится. Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)