crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Не работает слот selectRow класса QQtableView
dima154
  опции профиля:
сообщение 12.11.2009, 16:07
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 10.10.2009
Пользователь №: 1148

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




Репутация:   0  


Я определил свой класс :

class UsersDictionaryTableView : public QTableView{
    Q_OBJECT
public:
    UsersDictionaryTableView(QWidget * parent /* = 0 */);
private slots:
    void selectRow(int);
};


Переопределил слот :

void UsersDictionaryTableView::selectRow(int row){
    qDebug()<<row;
}


Но при выделении строки в виджете, слот не вызывается, а мне надо обрабатывать это выделение.
Как я понимаю, надо присоединить этот слот к какому-то сигналу, но в QTableView и его родительских классах я похожих сигналов не нашел.
Как решить данную проблему?
Заранее спасибо всем ответившим!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.11.2009, 16:20
Сообщение #2


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

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

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




Репутация:   94  


Цитата(dima154 @ 12.11.2009, 19:07) *
Но при выделении строки в виджете, слот не вызывается
прочитай в документации для чего предназначен void QTableView::selectRow ( int row ) [slot]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 13.11.2009, 8:46
Сообщение #3


Участник
**

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 12.11.2009, 15:20) *
Цитата(dima154 @ 12.11.2009, 19:07) *
Но при выделении строки в виджете, слот не вызывается
прочитай в документации для чего предназначен void QTableView::selectRow ( int row ) [slot]

Тоесть поиграйся с параметрами
SelectionMode and SelectionBehavior
у твоего QTableView. Нужно установить что то типа SelectRows and SingleSelection. Если этот вариант не прокатит, то создавай свой слот который будет обрабатывать сигнал
void clicked ( const QModelIndex & index )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.11.2009, 10:57
Сообщение #4


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

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

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




Репутация:   94  


DIMEDROLL, при выделении строки этот слот (selectRow) не вызывается, для этого я сказал, чтобы он прочитал документацию
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 13.11.2009, 11:10
Сообщение #5


Участник
**

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 13.11.2009, 9:57) *
DIMEDROLL, при выделении строки этот слот (selectRow) не вызывается, для этого я сказал, чтобы он прочитал документацию

В доке написано:
Selects the given row in the table view if the current SelectionMode and SelectionBehavior allows rows to be selected.
Насколько я понимаю - этот слот помечает данную строку в table view, если текущие флаги разрешают.
Когда же он вызывается тогда?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.11.2009, 11:13
Сообщение #6


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

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

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




Репутация:   94  


Цитата(DIMEDROLL @ 13.11.2009, 14:10) *
Когда же он вызывается тогда?
когда захочешь выделить строку, тогда вызываешь, и он делает визуальное выделение. А dima154 хочет, чтобы при выделении мышкой что-то происходило. Для этого нужно не слот звать, а соединиться с каким-либо сигналом
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 13.11.2009, 11:26
Сообщение #7


Участник
**

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 13.11.2009, 10:13) *
Цитата(DIMEDROLL @ 13.11.2009, 14:10) *
Когда же он вызывается тогда?
когда захочешь выделить строку, тогда вызываешь, и он делает визуальное выделение. А dima154 хочет, чтобы при выделении мышкой что-то происходило. Для этого нужно не слот звать, а соединиться с каким-либо сигналом

Странно, зачем тогда selectRow() делать слотом, а не паблик методом?
Хорошо, значит нужно обрабатывать сигнал
void clicked ( const QModelIndex & index )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.11.2009, 12:19
Сообщение #8


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

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

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




Репутация:   94  


Цитата(DIMEDROLL @ 13.11.2009, 14:26) *
Странно, зачем тогда selectRow() делать слотом, а не паблик методом?
чтобы можно было соединять с сигналами
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dima154
  опции профиля:
сообщение 13.11.2009, 15:29
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 10.10.2009
Пользователь №: 1148

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




Репутация:   0  


Разобрался с проблемой.
Обрабатываю сигнал clicked(const QModelIndex&) c установленым флагом QAbstractItemView::SelectRows и из selectionModel вытаскиваю содержимое строки.
CODE
void MyTableView::slActivated(const QModelIndex &index){
index.row();
//Получили модель выбора
QItemSelectionModel* selection = this->selectionModel();
//Получили модельные индексы модели выбора
QModelIndexList indexes = selection->selectedIndexes();
//Выводим модельные индексы
foreach(QModelIndex index,indexes){
qDebug()<<index.row()<<","<<index.column()<<"\t"<<index.data(Qt::DisplayRole).toString()<<"\n";
}
}

Ввел в заблуждение тот факт, что функция void selectRow ( int row ) была описана как [slot].
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.11.2009, 16:13
Сообщение #10


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

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

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




Репутация:   94  


Цитата(dima154 @ 13.11.2009, 18:29) *
Ввел в заблуждение тот факт, что функция void selectRow ( int row ) была описана как [slot].
она так и должна быть написана, онаже не помечена как [signal]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 25.12.2024, 5:05