Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QtableView как отследить изменение тек.строки


Автор: Divine111 11.10.2011, 23:15
Здравствуйте, возникла необходимость отловить изменение текущего элемента QtableView (когда курсорсор перемещается не мышью, а клавой...) 
На сколько понял, то для QtableView нет сигнала currentChanged... или все же есть?
на
 connect(ui->tableView->selectionModel(), SIGNAL(currentChanged(const QModelIndex& , const QModelIndex&)), this, SLOT(inf_c()));
- такая ошибка

QObject::connect: Cannot connect (null)::currentChanged(const QModelIndex& , const QModelIndex&) to Kitot::inf_c()
может есть более просто способ?

Автор: newbee 12.10.2011, 04:24
Ты б внимательно смотрел, что тебе программа пишет:
Цитата
QObject::connect: Cannot connect (null)::currentChanged(const QModelIndex& , const QModelIndex&) to Kitot::inf_c()
То есть selectionModel у тебя не установлен. В твоем случае должно быть достаточно соединить сигнал activated(QModelIndex const&) cамого tableView.

Автор: Divine111 12.10.2011, 08:59
 Я  пробовал activated(QModelIndex index), но не помогает... мне нужно что бы отлавливало нажатие кнопок Up i Down...

Автор: newbee 12.10.2011, 09:12
Сорри. Значит ты вызываешь connect перед установкой модели, нужно после, так как selectionModel переустанавливается всякий раз, когда устанавливаешь новую модель.

Добавлено через 1 минуту и 12 секунд
view->setModel(new myCrazyModel);
connect(view->selectionModel(),....);

Автор: Divine111 12.10.2011, 15:45
Если честно, то не очень понимаю... ну на сколько понял...
 ui->tableView->setModel(new QFileSystemModel(this));
connect(ui->tableView->selectionModel(), SIGNAL(currentChanged(const QModelIndex& , const QModelIndex&)), this, SLOT(inf_c()));
но это не правильно...

Автор: newbee 12.10.2011, 16:04
Divine111, ну не знаю, я перед тем, как второй раз написать, специально проверила, у меня все работало.

Автор: Divine111 12.10.2011, 17:52
a ты с QtableView и на currentChanged  проверял?

Автор: newbee 12.10.2011, 19:40
Цитата
a ты с QtableView и на currentChanged  проверял?
Проверяла, говорю же!

Код

class test:public QObject{
 Q_OBJECT
 
public slots:
 void push(){qDebug()<<"bullshit";}
 
};


 QTableView *view=new QTableView;
 QFileSystemModel *model=new QFileSystemModel;
 model->setRootPath("/");
 view->setModel(model);
 view->setRootIndex(model->index(QDir::currentPath()));
 QObject::connect(view->selectionModel(),SIGNAL(currentChanged(QModelIndex const&,QModelIndex const&)),new test,SLOT(push()));

У меня все решительно работает. Qt 4.7.4.

Автор: Divine111 12.10.2011, 20:15
Newbee, cпасибо тебе большое.. разобрался... получилось так:
Код

    QString sPath;

    filemodel = new QFileSystemModel(this);
    filemodel->setFilter(QDir::Files| QDir::AllDirs|QDir::Drives|QDir::NoDotAndDotDot|QDir::AllEntries);//|QDir::Hidden|QDir::System);
    filemodel->setRootPath(sPath);
    ui->tableView->setModel(filemodel);
    QObject::connect(ui->tableView->selectionModel(),SIGNAL(currentChanged(QModelIndex const&,QModelIndex const&)),this,SLOT(inf_c()));

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)