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


Автор: SilverMax 5.12.2009, 20:43
Добрый вечер!

Вопрос в следующем:

   Есть QTableView, есть QSqlRelationalTableModel. QSqlRelationalTableModel делает выборку из таблицы MySQL. Результат направляется в QTableView. Необходимо скрыть к примеру столбец "0"(ID). 
   Пробовал через 
Код
void QTableView::setColumnHidden ( int column, bool hide )
, через 
Код
void QTableView::hideColumn ( int column )
, эти два метода не имеют эффекта с моей таблицей. 
   Пробовал через 
Код
bool QAbstractItemModel::removeColumn ( int column, const QModelIndex & parent = QModelIndex() )
, это столбец скрывает, но, поскольку я скрываю поле "ID" таблицы БД, то некорректно работает удаление.

Код

model = new QSqlRelationalTableModel(u_ui->tvUsers, QSqlDatabase::database("db"));
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setTable("t_user");
....
//model->removeColumn(0, u_ui->tvUsers->currentIndex());
//model->removeColumn(1, u_ui->tvUsers->currentIndex());
u_ui->tvUsers->setColumnHidden(0, true);
u_ui->tvUsers->setColumnHidden(2, true);
//u_ui->tvUsers->hideColumn(0);
//u_ui->tvUsers->hideColumn(2);
u_ui->tvUsers->show();


возможно что-то неверно в настройках отображения QTableView?
Подскажите пожалуйста.

Автор: SABROG 6.12.2009, 13:12
А если так попробовать?

Код

u_ui->tvUsers->setColumnHidden(model->fieldIndex("ID"), true);


Возможно логическая позиция колонки отличается от физической. И возможно есть смысл скрывать колонки уже после метода 
Код

u_ui->tvUsers->show();


С другой стороны, если у tvUsers есть родитель, то метод show() вообще не нужен. Это при условии, что не планируется делать логику hide/show.

Автор: SilverMax 6.12.2009, 19:52
Код

//    u_ui->tvUsers->show();
    u_ui->tvUsers->setColumnHidden(model->fieldIndex("id_user"), true);
    u_ui->tvUsers->setColumnHidden(model->fieldIndex("password"), true);


Что до, что после 
Код
u_ui->tvUsers->show();
,  одинаково упорно столбцы не скрываются. 
Правда сам  
Код
u_ui->tvUsers->show();
 действительно оказался лишним...

Те же самые операции на другой таблице:
Код

void TableWindow::InitTable()
{
    QSqlRelationalTableModel *model = new QSqlRelationalTableModel(t_ui->Table, QSqlDatabase::database("db"));
    model->setTable(*TableName);
    model->select();
    t_ui->Table->setModel(model);
    t_ui->Table->setColumnHidden(0, true);
}


Всё работает как часы, в чём проблема с первой?

Автор: SilverMax 6.12.2009, 22:55
Проблема решена: в первой таблице я делал скрытие столбцов ДО установки модели в таблицу.

Код

    model->select();
    ...
    u_ui->tvUsers->setColumnHidden(0, true);
    u_ui->tvUsers->setColumnHidden(2, true);
    ...
    u_ui->tvUsers->setModel(model);


а не 

Код

    model->select();
    ...
    u_ui->tvUsers->setModel(model);
    u_ui->tvUsers->setColumnHidden(0, true);
    u_ui->tvUsers->setColumnHidden(2, true);


Спасибо, SABROG, за помощь. 

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