Привет всем. Есть TableWidget и есть QStringList c элементами.
for (int i = 0; i < 3; i++)
{
ui->tableWidget->insertItem(i);
}
QStringList list;
list << 1 << 2 << 3;
ui->tableWidget->setHorizontalHeaderLabels(list);
ui->tableWidget->horizontalHeader()->setVisible(true);
Что нужно? Как сделать так что бы список можно было отмечать чекбоксами. Т.е к примеру я не хочу показывать 2-й столбец заголовка. Мои действия: убрал галочку c элемента номер 2 из списка и показываются в заголовке только 1-й элемент и 3-й.
В Qt это можно реализовать, но не теми инструментами, которые вы выбрали. Для этого потребуется написать собственный класс, наследующий QAbstractTableModel. Все данные, которые должны отображаться в таблице, нужно помещать в модель. Способ хранения данных в модели вы должны выбрать сами. Плюс к этому модель должна хранить флаги видимости столбцов (только не путайте с флагами модели, они нужны для определения операций, которые можно производить с той или иной ячейкой). Способ хранения этих флагов - также на ваше усмотрение.
Теперь самое главное. Когда отмечается ваш checkbox, ваша программа должна вызвать метод модели, который менял бы флаги видимости столбцов. В этом методе кроме самого управления флагами нужно вызвать protected-методы beginInsertColumns и endInsertColumns. Например, он может выглядеть так:
void MyModel::setColumnVisible(int column, bool visible)
{
if (visible)
{
beginInsertColumns(QModelIndex(), column, column);
m_visibility[column] = true; //Ваш массив флагов видимости
endInsertColumns();
}
else
{
beginRemoveColumns(QModelIndex(), column, column);
m_visibility[column] = false;
endRemoveColumns();
}
}
Соответственно, нужно написать метод columnCount с учетом видимости. А в методе data учитывать смещение индексов таблицы.
Полная информация о моделях
После того, как вы создадите модель, данные можно будет отображать на форме с помощью представления. Для этого используете QTableView. К нему подключайте вашу модель.
Логически правильнее будет реализовать этот функционал с помощью двух моделей: одна будет только хранить данные, а другая - управлять видимостью. Но она будет уже наследовать не QAbstractTableModel, а QAbstractProxyModel.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники