Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT4] QtableView выделение всей строки, и получение текущей позиции курсора  
:(
    Опции темы
Programister0
Дата 2.12.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



вот и весь вопрос !
PM MAIL WWW ICQ Skype   Вверх
JackYF
Дата 2.12.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Насчёт выделения строки копай в setSelectionModel().

Получение текущей позиции курсора - modelIndex()


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Programister0
Дата 2.12.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



спасибо вроде с выделением строк разобрался:
setSelectionBehavior( QAbstractItemView::SelectRows );

а вот с определением позиции курсора нет,
надо определять позицию при её изменении 
методы: activated, entered, pressed, clicked - неподходят - они срабатывают на enter или click а надо на реагировать на перемещение курсора. 
PM MAIL WWW ICQ Skype   Вверх
JackYF
Дата 2.12.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(Programister0 @  2.12.2007,  16:01 Найти цитируемый пост)
они срабатывают на enter или click а надо на реагировать на перемещение курсора.  

похоже, действительно, что встроенного события на "просто перемещение" с клавиатуры нет. Попробуй на всякий случай половить "entered", если нет, тогда, наверное, придётся самому ловить события клавиатуры влево-вправо/вверх-вниз.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Programister0
Дата 2.12.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Цитата

наверное, придётся самому ловить события клавиатуры 

все keyPressEvent ( QKeyEvent * event )  в секции и [virtual protected] 
как можно ещё отловить эти события?
PM MAIL WWW ICQ Skype   Вверх
JackYF
Дата 2.12.2007, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(Programister0 @  2.12.2007,  18:23 Найти цитируемый пост)
все keyPressEvent ( QKeyEvent * event )  в секции и [virtual protected] 
как можно ещё отловить эти события? 

а зачем "ещё"? так и лови.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Programister0
Дата 2.12.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



блин для этого придется создавать свой класс от QTableView, можно как нибудь по другому?


Это сообщение отредактировал(а) Programister0 - 2.12.2007, 20:08
PM MAIL WWW ICQ Skype   Вверх
archimed7592
Дата 2.12.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Гхм, Programister0, а чем не подходят слоты selectionChanged и currentChanged? Местоположения курсора можно изменить многими способами(в т.ч. вообще программно) и, мне кажется, что лучше не использовать такие ограниченные решения, как перехват "всех" возможных способов изменения.

Добавлено через 2 минуты и 5 секунд
Цитата(Programister0 @  2.12.2007,  20:08 Найти цитируемый пост)
можно как нибудь по другому

Можно создать свой класс, унаследованный от QTableView, вывести наружу сигналы, и потом пользоваться им как-будто ничего для него писать и не приходилось smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Любитель
Дата 2.12.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Наследуемся от QTableView, переопределяем void QAbstractItemView::currentChanged (const QModelIndex & current, const QModelIndex & previous) (протектед слот).


--------------------
PM MAIL ICQ Skype   Вверх
Programister0
Дата 2.12.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



да варианты с selectionChanged и currentChanged намного привлекательнее, но все равно требуют написания своего класса от QTableView, это накладно и неудобно, было-бы проще что-то что не требует создания класса
PM MAIL WWW ICQ Skype   Вверх
archimed7592
Дата 2.12.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Код

class MyTableView
    :    public QTableView
{
    Q_OBJECT
public:
    MyTableView(QWidget *parent = 0)
        :    QTableView(parent)
    { }
    
signals:
    void currentChanged( const QModelIndex & current, const QModelIndex & previous );

protected slots:
    void currentChanged( const QModelIndex & current, const QModelIndex & previous )
    { QTableView::currentChanged(current, previous); emit currentChanged(current, previous); }
};
Гхм, чё тут накладного то?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Programister0
Дата 3.12.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



спасибо, все работает 
но, тот вариант который вы написали моему компилятору непонравился:
Цитата

ui_Test.h:38: error: `void MyTableView::currentChanged(const QModelIndex&, const QModelIndex&)' and `void MyTableView::currentChanged(const QModelIndex&, const QModelIndex&)' cannot be overloaded

но после удаления строк:
Код

    void currentChanged( const QModelIndex & current, const QModelIndex & previous )
    { QTableView::currentChanged(current, previous); emit currentChanged(current, previous); }

все пошло как по часам, 
я соединил сигнал и свою функцию:
Код

connect(MyTable,
          SIGNAL( currentChanged( const QModelIndex &, const QModelIndex &) ),
          this,
          SLOT( itemChange ( const QModelIndex &, const QModelIndex &) )
          );

теперь itemChange вызывается всегда когда курсор меняет положение,

но теперь я непонимаю как и откуда это все берется?
ведь сигнал currentChanged нигде не описан, только в Protected Slots;
 и где можно узнать какие ещё функции можно записать в signals?

PM MAIL WWW ICQ Skype   Вверх
JackYF
Дата 3.12.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(Programister0 @  3.12.2007,  11:03 Найти цитируемый пост)
сигнал currentChanged нигде не описан, только в Protected Slots;

так это слот, а не сигнал smile его, значит, вызывает сама QT.
Цитата(Programister0 @  3.12.2007,  11:03 Найти цитируемый пост)
и где можно узнать какие ещё функции можно записать в signals?

ты сам можешь создавать сигналы


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
SABROG
Дата 3.12.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(Programister0 @  3.12.2007,  11:03 Найти цитируемый пост)
 и где можно узнать какие ещё функции можно записать в signals?


В Qt Assistant, обычно раздел называется "List of All Members for [имя_класса]". Для твоего: "List of All Members for QTableWidget". Обычно в описании каждого класса есть ссылка типа "List of all members, including inherited members". А вообще currentChanged слот унаследованного класса QAbstractItemView и этот класс используется не только в QTableWidget. Т.ч. можно спокойно ничего не наследовать и использовать простой вариант, скажем для model based контролов:
Код

connect(
            myTreeView->selectionModel(), 
            SIGNAL(currentChanged(const QModelIndex &,const QModelIndex &)),
            this, 
            SLOT(myTreeView_currentChanged(const QModelIndex &,const QModelIndex &))); 



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
archimed7592
Дата 4.12.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Цитата(Programister0 @  3.12.2007,  11:03 Найти цитируемый пост)
но после удаления строк:

Ну, да, не надо было с одним и тем же именем делать... Одного я правда не понял:
т.е. после удаления ключевых строк у тебя всё заработало? smile 

Кто-нибудь из знатоков Qt может объяснить это(к сожалению, сейчас нет времени разбираться)?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0808 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.