Вопросы по работе с таблицами (тип QTableWidget)
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 23.09.22 05:46
Оценка:
Вопросы по работе с таблицами (тип QTableWidget):

1. Как удалить все столбцы в заголовке таблицы?
В MFC можно написать:

n = m_IDC_LIST1.GetHeaderCtrl()->GetItemCount();
if (n>0)
{
    for (i=(n-1); i>=0; i--)  m_IDC_LIST1.DeleteColumn();
}


А как написать в Qt? Можно ли написать:

n = ui->tableWidget->horizontalHeader()->count();
if (n>0)
{
    QStringList  lst;
    lst.clear();
    ui->tableWidget->setHorizontalHeaderLabels(lst);
}


Или же надо писать как-то по-другому?

2. Как сделать какую-то клетку в таблице редактируемой или нередактируемой?
Как сделать то же самое для целой строки? Для целого столбца? Для всей таблицы?

3. Как узнать номер выделенной строки в таблице?

4. Как работать с таблицей в режиме множественного выделения строк (multiselecting)?
Как узнать число выделенных строк и номера выделенных строк?
1613 г. = 2024 г.
Отредактировано 23.09.2022 5:48 RussianFellow . Предыдущая версия .
Re: Вопросы по работе с таблицами (тип QTableWidget)
От: Chorkov Россия  
Дата: 26.09.22 10:29
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Вопросы по работе с таблицами (тип QTableWidget):


RF>1. Как удалить все столбцы в заголовке таблицы?


Столбцы заголовка связаны со столбцами таблицы. Их можно удалить тлько вместе.
Вы хотите:
— Удалить/скрыть заголовок таблицы?
— Удалить текст заголовков?
— Удалить все содержимое таблицы (все столбцы)?


RF>2. Как сделать какую-то клетку в таблице редактируемой или нередактируемой?

RF>Как сделать то же самое для целой строки? Для целого столбца? Для всей таблицы?

https://stackoverflow.com/questions/2574115/how-to-make-a-column-in-qtablewidget-read-only

RF>3. Как узнать номер выделенной строки в таблице?

ui->tableWidget->setSelectionBehavior( QAbstractItemView::SelectRows ) ; //выделять только строки целиком
ui->tableWidget->setSelectionMode( QAbstractItemView::SingleSelection ) ; //выделять строки только по одной

Возможно, правильнее работать с текущей строкой https://doc.qt.io/qt-6/qtablewidget.html#currentRow , а выделение совсем запретить, если уж хотите работать с одной строкой.

RF>4. Как работать с таблицей в режиме множественного выделения строк (multiselecting)?

RF>Как узнать число выделенных строк и номера выделенных строк?

https://doc.qt.io/qt-6/qabstractitemview.html#selectedIndexes
for( auto i : ui->tableWidget->selectedIndexes() )
{ 
    int row = i.row(); // номер строки (в случае дерева - отсчитан от родительского узла,а не абсолютный).
    ...
}
Re: Вопросы по работе с таблицами (тип QTableWidget)
От: SaZ  
Дата: 26.09.22 14:10
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Вопросы по работе с таблицами (тип QTableWidget):


RF>1. Как удалить все столбцы в заголовке таблицы?

RF>В MFC можно написать:

RF>
RF>n = m_IDC_LIST1.GetHeaderCtrl()->GetItemCount();
RF>if (n>0)
RF>{
RF>    for (i=(n-1); i>=0; i--)  m_IDC_LIST1.DeleteColumn();
RF>}
RF>


RF>А как написать в Qt? Можно ли написать:


RF>
RF>n = ui->tableWidget->horizontalHeader()->count();
RF>if (n>0)
RF>{
RF>    QStringList  lst;
RF>    lst.clear();
    ui->>tableWidget->setHorizontalHeaderLabels(lst);
RF>}
RF>


RF>Или же надо писать как-то по-другому?


RF>2. Как сделать какую-то клетку в таблице редактируемой или нередактируемой?

RF>Как сделать то же самое для целой строки? Для целого столбца? Для всей таблицы?

RF>3. Как узнать номер выделенной строки в таблице?


RF>4. Как работать с таблицей в режиме множественного выделения строк (multiselecting)?

RF>Как узнать число выделенных строк и номера выделенных строк?

Вот прямо все ответы тут: https://doc.qt.io/qt-6/model-view-programming.html
Этой ссылки и минимума практики достаточно чтобы ответить на все эти и большинство последующих вопросов.
Re: Вопросы по работе с таблицами (тип QTableWidget)
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 06.10.22 09:19
Оценка:
И ещё вопрос: как задать ширину столбцов у таблицы?
1613 г. = 2024 г.
Re[2]: Вопросы по работе с таблицами (тип QTableWidget)
От: Igore Россия  
Дата: 06.10.22 13:13
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>И ещё вопрос: как задать ширину столбцов у таблицы?

Прочитать документацию.

Но я бы сделал так, при первом старте resizeColumnsToContents, при закрытии приложение saveGeometry, при открытии restoreGeometry. Так пользователю будет удобнее, выставил ширину как надо и радуешься.
Re[3]: Вопросы по работе с таблицами (тип QTableWidget)
От: SaZ  
Дата: 06.10.22 14:58
Оценка: +1
Здравствуйте, Igore, Вы писали:

I>...

I>Но я бы сделал так, при первом старте resizeColumnsToContents, при закрытии приложение saveGeometry, при открытии restoreGeometry. Так пользователю будет удобнее, выставил ширину как надо и радуешься.

Не по теме, но вспомнилось. Лет 12 назад (ещё Qt4 был сыроват) словили очень неприятный баг у saveGeometry в QMainWindow. Он очень плохо отрабатывал случаи, когда у пользователя менялось разрешение экрана и системные размеры шрифтов. Пришлось городить велосипед, который запоминал текущие настройки и в случае их изменения применял стандартное расположение контролов.
Re[4]: Вопросы по работе с таблицами (тип QTableWidget)
От: Igore Россия  
Дата: 06.10.22 17:01
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Не по теме, но вспомнилось. Лет 12 назад (ещё Qt4 был сыроват) словили очень неприятный баг у saveGeometry в QMainWindow. Он очень плохо отрабатывал случаи, когда у пользователя менялось разрешение экрана и системные размеры шрифтов. Пришлось городить велосипед, который запоминал текущие настройки и в случае их изменения применял стандартное расположение контролов.

Ну если такое вспоминать. Было что при переходе с одной версии на другую интерфейс перекашивало очень сильно(как раз от restoreGeometry на старых данных), пришлось на новой версии просто удалять старые данные при старте и показывать всё по дефолту. Сохранение позиций элементов хорошая практика, пусть иногда и могут быть нюансы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.