Название: QTableWidget - вопрос по insert, remove rows Отправлено: barm12345 от Июнь 09, 2020, 10:29 Доброго времени суток форумчане!
Занимаюсь портированием программы с Qt3 на Qt5, завис на одном моменте: код Qt5: void CDialog::ResetTableChannelsRowCount(short NewRowCount, bool DeleteAllowed) { short i, j, Count, OldCount; QVector<int> RowNums; // был QMemArray<int> RowNums; QStringList channels(""); for(i = 0; i < 32; i++) channels.append(QString::number(i + 1)); Count = TableChannels->rowCount(); OldCount = Count; if(NewRowCount == Count) return; else if(NewRowCount < Count) { //уменьшаем количество строк if(DeleteAllowed) { RowNums.resize(Count - NewRowCount); j = 0; for(i = NewRowCount; i < Count; i ++) { RowNums[j] = i; j ++; } TableChannels->removeRows(RowNums); } return; } tbl_channels->insertRows(Count, NewRowCount - Count); Count = TableChannels->rowCount(); Вопрос: никак не могу понять, как сейчас использовать removeRows (сейчас removeRow не подходит), и insertRows (insertRow тоже не подходит)... RowNums - у меня QVector. Мысли только, что надо взять контейнер и чистить - удалять по одной строке... Название: Re: QTableWidget - вопрос по insert, remove rows Отправлено: Пантер от Июнь 09, 2020, 11:11 Правильнее делать через Model/View. Посмотри документацию по QAbstractTableModel, посмотри примеры, пройдись по иерархии наследования если конкретно эта модель не подходит.
Название: Re: QTableWidget - вопрос по insert, remove rows Отправлено: tamplier от Июнь 09, 2020, 11:49 Вопрос: никак не могу понять, как сейчас использовать removeRows (сейчас removeRow не подходит), и insertRows (insertRow тоже не подходит)... RowNums - у меня QVector. Мысли только, что надо взять контейнер и чистить - удалять по одной строке... В классе QTableWidget есть public слоты void insertRow(int row) и void removeRow(int row) https://doc.qt.io/qt-5/qtablewidget.html#insertRow https://doc.qt.io/qt-5/qtablewidget.html#removeRow Название: Re: QTableWidget - вопрос по insert, remove rows Отправлено: barm12345 от Июнь 09, 2020, 12:08 Да, там все реализовано, с параметрами только разобраться надо
((QAbstractItemModel*)tbl_channels)->removeRows(RowNums); ((QAbstractItemModel*)tbl_channels)->insertRows(Count, NewRowCount - Count); Название: Re: QTableWidget - вопрос по insert, remove rows Отправлено: tamplier от Июнь 09, 2020, 12:31 Да, там все реализовано, с параметрами только разобраться надо ((QAbstractItemModel*)tbl_channels)->removeRows(RowNums); ((QAbstractItemModel*)tbl_channels)->insertRows(Count, NewRowCount - Count); Изначально вопрос стоял про QTableWidget, при чем тут концепция "модель-представление"? В QTableWidget есть два слота о которых я выше писал. С их помощью можно реализовать приведенный вами код. Единственное нужны будут дополнительные циклы по вектору (для удаления/вставки нужных строк). |