Russian Qt Forum

Qt => Базы данных => Тема начата: oktogen от Февраль 11, 2006, 11:12



Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: oktogen от Февраль 11, 2006, 11:12
QT-4.0
Есть QTableView .
В него ставлю QSqlQueryModel
Надо сортировать данные по определенному столбцу
Код:

tableView->sortByColumn(i);

Почему-то не проходит.
Кто этим занимался?


Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: crocus от Февраль 11, 2006, 18:20
Одни и теже грабли.
Нет реальной сортировки в  QSqlQueryModel, точнее найдешь в ассистенте,  используй QSqlTableModel.
Я например сделал так:
Код:

begin = ("CREATE TEMPORARY TABLE " + agency + " ENGINE=MyISAM SELECT g.agency_name, f.flats_date, r.room_cod, k.sale_name.............................

А потом
Код:

    modelQuery->setQuery(begin);

Добавил обработчики и теперь и сортировка и фильтра пашут как надо!!!


Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: oktogen от Февраль 13, 2006, 10:15
Я это обошел заменой QSqlQueryModel на QSqlTableModel.
Дурацкий вопрос.  А как обработать клик на хедере?
Чего-то не нашел сигналов в QtableView , а по ссылке на горизонтальный хедер
ничего не работает.
Как вы это сделали? Спасибо.


Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: Steven_Orko от Февраль 13, 2006, 11:58
Цитата: "oktogen"
Я это обошел заменой QSqlQueryModel на QSqlTableModel.
Дурацкий вопрос.  А как обработать клик на хедере?
Чего-то не нашел сигналов в QtableView , а по ссылке на горизонтальный хедер
ничего не работает.
Как вы это сделали? Спасибо.

В данном случае я тебе просто предлагаю сделать виджет Qt на основе модели и вида. Конкретно не скажу, как делается. Посмотри исходник QTableWidget. Я сам создавал такой объект, но не для отображения результатов SQL-запросов. Просто мне нужен был свой QTableWidgetItem и особое его отображение. Мог бы код выложить, да не могу его найти, наверно, утерял в процессе перемены компа и установки новой систему.


Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: Dendy от Февраль 13, 2006, 13:56
Цитата: "oktogen"
А как обработать клик на хедере?


Код:
QHeaderView * horizontalHeader () const;
QHeaderView * verticalHeader () const;


Название: Re: QT4.0, QTableView и сортировка по столбцу
Отправлено: burunduk от Февраль 13, 2006, 15:47
а я вот так сортировку делал:

Код:


class MyModel : public QSqlQueryModel {
public:
  virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) {
    setQuery(QString("select * from mytable order by %1 %2").arg(column+1).arg(order == Qt::AscendingOrder?"asc":"desc"));
  }
};


class MyTable : public QTableView {
public:
  MyTable() {
    setModel(new MyModel);
    sortByColumn(0);  
    connect(horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(sortByColumn(int)));
    horizontalHeader()->setSortIndicatorShown(true);
  }
};



Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: oktogen от Февраль 13, 2006, 23:13
Код:
QHeaderView * horizontalHeader () const; 
QHeaderView * verticalHeader () const;

Пишет, что ошибка.
Типа нельзя обращаться к QHeaderView как к QObject.
Пробовал по разному, одна и таже байда с коннектом.
Можно кусочек кода?(где происходит коннект  клика по хедеру к местному слоту.)


Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: Steven_Orko от Февраль 14, 2006, 00:15
Цитата: "oktogen"
Код:
QHeaderView * horizontalHeader () const; 
QHeaderView * verticalHeader () const;

Пишет, что ошибка.
Типа нельзя обращаться к QHeaderView как к QObject.
Пробовал по разному, одна и таже байда с коннектом.
Можно кусочек кода?(где происходит коннект  клика по хедеру к местному слоту.)


А так работает?
Цитировать
QHeaderView *pH = ui.tableWidget->horizontalHeader();
   connect((QObject*)pH, SIGNAL(sectionClicked (int)), this, SLOT(ch(int)));


Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: oktogen от Февраль 14, 2006, 10:33
нет, не работает.
Я не пользуюсь ui в проекте.
поэтому
Код:
 
QHeaderView *pH = tableWidget->horizontalHeader();
 
  connect((QObject*)pH, SIGNAL(sectionClicked (int)), this, SLOT(sortedBy(int)));
 

Это прокатывает, но сортировки все равно нет. Только выделяется столбец.


Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: Dendy от Февраль 14, 2006, 13:57
Проверь что возвращает connect(). Произошло ли вообще соединение.


Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: Steven_Orko от Февраль 15, 2006, 01:50
Цитата: "oktogen"
нет, не работает.
Я не пользуюсь ui в проекте.
поэтому
Код:
 
QHeaderView *pH = tableWidget->horizontalHeader();
 
  connect((QObject*)pH, SIGNAL(sectionClicked (int)), this, SLOT(sortedBy(int)));
 

Это прокатывает, но сортировки все равно нет. Только выделяется столбец.


Дык, я тебе не говорю про ui. Просто привел привер приведения типа. QHeaderView наследован от QObject, поэтому связка должна работать. Действительно, проверь, что возвращает connect.


Название: QT4.0, QTableView и сортировка по столбцу
Отправлено: oktogen от Февраль 15, 2006, 12:43
заработало .
Перекомпалил проект полностью.
Все и завелось.
Спасибо