crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Поведение grid в QTableView, Пропадает курсор после нажатия Enter
mva
  опции профиля:
сообщение 17.3.2009, 8:46
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Добрый день всем!

Редактирую табличку с помощью связки QSqlTableModel и QTableView. После изменения элемента таблички после нажания на Enter пропадает курсор (указатель текущего элемента Grid) вместо того, чтобы перейти на следующий справа элемент. Конечно, мышкой можно вернуть курсор на место, но это немного не то, что хотелось... Почему пропадает курсор?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.3.2009, 14:34
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(mva @ 17.3.2009, 11:46) *
После изменения элемента таблички после нажания на Enter пропадает курсор
а каковы настройки поведения модели и представления? приведи код.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mva
  опции профиля:
сообщение 17.3.2009, 19:49
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


код
class Form: public QDialog {
    Q_OBJECT
public:
    Form(QWidget* pwgt = 0);
    void Show() { DoShow(); }
    bool Selected() { return lSelected; }
public slots:
    void cmdOk() { DoCmdOk(); }
protected:
    bool lSelected;
    QHBoxLayout* pcmdButtonLayout;
    QVBoxLayout* pvbxLayout;
    virtual void DoShow();
    virtual void DoCmdOk();
    };

class FormGrid : public Form {
public:
    FormGrid();
private:
    QTableView pgrdTable;
    QSqlTableModel model;
};

FormGrid::FormGrid() {
    model.setTable("адрес");
    model.setEditStrategy(QSqlTableModel::OnRowChange);
    model.select();
    model.setHeaderData(0, Qt::Horizontal, tr("Код"));
    model.setHeaderData(1, Qt::Horizontal, tr("Имя"));
    pgrdTable.setModel(&model);
    pgrdTable.sortByColumn(0, Qt::AscendingOrder);
    pvbxLayout->insertWidget(0, &pgrdTable);
}


.....
    FormGrid form;
    form.Show();
.....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.3.2009, 20:26
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


первое, что бросается в глаза
Цитата(mva @ 17.3.2009, 22:49) *
QTableView pgrdTable;
QSqlTableModel model;
используй динамическое создание объектов.

А вот и причина такого поведения:
Цитата(mva @ 17.3.2009, 22:49) *
model.setEditStrategy(QSqlTableModel::OnRowChange);
при такой стратегии всегда будет себя так вести. Так как представление постоянно перезагружеатся.
Цитата(mva @ 17.3.2009, 11:46) *
вместо того, чтобы перейти на следующий справа элемент.
а такого поведения в Qt вообще нет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 17.3.2009, 23:39
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Цитата(Litkevich Yuriy @ 17.3.2009, 20:26) *
.
Цитата(mva @ 17.3.2009, 11:46) *
вместо того, чтобы перейти на следующий справа элемент.
а такого поведения в Qt вообще нет.

Но его можно легко сделать самому :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mva
  опции профиля:
сообщение 18.3.2009, 8:11
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 17.3.2009, 20:26) *
А вот и причина такого поведения:
Цитата(mva @ 17.3.2009, 22:49) *
model.setEditStrategy(QSqlTableModel::OnRowChange);
при такой стратегии всегда будет себя так вести. Так как представление постоянно перезагружеатся.


А можно ли сделать так, чтобы изменения строки отсылались на сервер в фоновом режиме, а представление не перезагружалось? Я пришел в Qt из Visual FoxPro. Там представления работают именно так, очень удобно, особенно при медленных каналах связи...



Цитата(Kagami @ 17.3.2009, 23:39) *
Цитата(Litkevich Yuriy @ 17.3.2009, 20:26) *
.
Цитата(mva @ 17.3.2009, 11:46) *
вместо того, чтобы перейти на следующий справа элемент.
а такого поведения в Qt вообще нет.

Но его можно легко сделать самому :)


Не могу найти в документации, как управлять навигацией по таблице... Все же английский язык не родной... Не подскажите, где смотреть? Заранее благодарен...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 18.3.2009, 10:37
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
Не могу найти в документации, как управлять навигацией по таблице... Все же английский язык не родной... Не подскажите, где смотреть? Заранее благодарен...

http://www.doc.crossplatform.ru/qt/4.4.3/m...-selection.html
Цитата
А можно ли сделать так, чтобы изменения строки отсылались на сервер в фоновом режиме, а представление не перезагружалось? Я пришел в Qt из Visual FoxPro. Там представления работают именно так, очень удобно, особенно при медленных каналах связи...

Можно вообще отправлять данные самому. В тот момент, когда нужно тебе.
Смотри функцию model.setEditStrategy
Только небольшой неприятный ньюанс... Когда удаляешь строки, они не удаляются пока не сделаешь субмит :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.3.2009, 12:20
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(LE0N @ 18.3.2009, 13:37) *
Когда удаляешь строки, они не удаляются пока не сделаешь субмит
ну это ручной режим, и при добавлениии и при изменении данных.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.6.2019, 10:53