Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ QSqlQueryModel, QTableView, фильтрация

Автор: Rigat 1.6.2010, 15:39

Подскажите ка вынуть из QTableView имя колонки в таблице?

Подробнее выглядит так:

model = new QSqlQueryModel(this);
query = "Select SName, FName, ClnName, Model.Model, Num from Client, KTM, Model where Client.ClnNo=KTM.ClnNo and KTM.Model=Model.ModelNo";
model->setQuery(query);
ui->tableView->setModel(model);


Для каждой колонки есть свой фильтр в ячейках QTableWidget, который пользователь вводит самостоятельно. Я хочу реализовать его примерно так (код не отлажен, могут быть ошибки):

void MainWindow::fnd(int col, int row)
{
    QString s;
    if (ui->tableWidget->item(col, row)->text() != "")
    {
        for (int i=0; i<ui->tableWidget->columnCount(); ++i)
        {
            if (ui->tableWidget->item(0,i)->text() != "")
            {
                s = s+" and"+ИМЯ_КОЛОНКИ+" Like '%"+ui->tableWidget->item(0,i)->text()+"%";
            }
        }
        model->setQuery(query+s);
    }
    else
    {
        model->setQuery(query);
    }
}

Вот мне надо узнать ИМЯ_КОЛОНКИ.
Или может кто знает другой способ как реализовать такую фильтрацию.

Автор: Litkevich Yuriy 1.6.2010, 16:15

так и не понял о чём речь, то ли о представлении (QTableView), то ли о таблице-виджете (QTableWidget)


Автор: Rigat 3.6.2010, 5:44

Цитата
так и не понял о чём речь, то ли о представлении (QTableView), то ли о таблице-виджете (QTableWidget)

Речь не о QTableView и не о QTableWidget, а о реализации фильтрации.

Нашел нужную функцию
model->headerData(0, Qt::Horizontal, 0).toString()
так он выдает имя первого столбца, который называется "SName", но есть проблема если я задам новое имя столбца в модели
таким образом
model->setHeaderData(0, Qt::Horizontal, tr("Name"))
то он выдаст мне "Name", соответственно sql запрос типа "Select Name, FName..." не найдет столбец Name в таблице.

Автор: MoPDoBoPoT 3.6.2010, 11:18

А если так:

model->query().record().fieldName(index);

?

Автор: Rigat 4.6.2010, 15:31

Цитата(MoPDoBoPoT @ 3.6.2010, 11:18) *
А если так:
model->query().record().fieldName(index);

?

Вот это то, что нужно. Спасибо!

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)