Russian Qt Forum
Ноябрь 23, 2024, 08:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT4.0, QTableView и сортировка по столбцу  (Прочитано 14225 раз)
oktogen
Гость
« : Февраль 11, 2006, 11:12 »

QT-4.0
Есть QTableView .
В него ставлю QSqlQueryModel
Надо сортировать данные по определенному столбцу
Код:

tableView->sortByColumn(i);

Почему-то не проходит.
Кто этим занимался?
Записан
crocus
Гость
« Ответ #1 : Февраль 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);

Добавил обработчики и теперь и сортировка и фильтра пашут как надо!!!
Записан
oktogen
Гость
« Ответ #2 : Февраль 13, 2006, 10:15 »

Я это обошел заменой QSqlQueryModel на QSqlTableModel.
Дурацкий вопрос.  А как обработать клик на хедере?
Чего-то не нашел сигналов в QtableView , а по ссылке на горизонтальный хедер
ничего не работает.
Как вы это сделали? Спасибо.
Записан
Steven_Orko
Гость
« Ответ #3 : Февраль 13, 2006, 11:58 »

Цитата: "oktogen"
Я это обошел заменой QSqlQueryModel на QSqlTableModel.
Дурацкий вопрос.  А как обработать клик на хедере?
Чего-то не нашел сигналов в QtableView , а по ссылке на горизонтальный хедер
ничего не работает.
Как вы это сделали? Спасибо.

В данном случае я тебе просто предлагаю сделать виджет Qt на основе модели и вида. Конкретно не скажу, как делается. Посмотри исходник QTableWidget. Я сам создавал такой объект, но не для отображения результатов SQL-запросов. Просто мне нужен был свой QTableWidgetItem и особое его отображение. Мог бы код выложить, да не могу его найти, наверно, утерял в процессе перемены компа и установки новой систему.
Записан
Dendy
Гость
« Ответ #4 : Февраль 13, 2006, 13:56 »

Цитата: "oktogen"
А как обработать клик на хедере?


Код:
QHeaderView * horizontalHeader () const;
QHeaderView * verticalHeader () const;
Записан
burunduk
Гость
« Ответ #5 : Февраль 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);
  }
};

Записан
oktogen
Гость
« Ответ #6 : Февраль 13, 2006, 23:13 »

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

Пишет, что ошибка.
Типа нельзя обращаться к QHeaderView как к QObject.
Пробовал по разному, одна и таже байда с коннектом.
Можно кусочек кода?(где происходит коннект  клика по хедеру к местному слоту.)
Записан
Steven_Orko
Гость
« Ответ #7 : Февраль 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)));
Записан
oktogen
Гость
« Ответ #8 : Февраль 14, 2006, 10:33 »

нет, не работает.
Я не пользуюсь ui в проекте.
поэтому
Код:
 
QHeaderView *pH = tableWidget->horizontalHeader();
 
  connect((QObject*)pH, SIGNAL(sectionClicked (int)), this, SLOT(sortedBy(int)));
 

Это прокатывает, но сортировки все равно нет. Только выделяется столбец.
Записан
Dendy
Гость
« Ответ #9 : Февраль 14, 2006, 13:57 »

Проверь что возвращает connect(). Произошло ли вообще соединение.
Записан
Steven_Orko
Гость
« Ответ #10 : Февраль 15, 2006, 01:50 »

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

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


Дык, я тебе не говорю про ui. Просто привел привер приведения типа. QHeaderView наследован от QObject, поэтому связка должна работать. Действительно, проверь, что возвращает connect.
Записан
oktogen
Гость
« Ответ #11 : Февраль 15, 2006, 12:43 »

заработало .
Перекомпалил проект полностью.
Все и завелось.
Спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.062 секунд. Запросов: 21.