Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vol4enok от Март 02, 2009, 15:58



Название: обращение в отдельному полю в QListView [qt3]
Отправлено: vol4enok от Март 02, 2009, 15:58
Здравствуйте
Возникла такая проблема, не могу связать коннектом нажатие на конкретную строку в QListView. Есть List с тремя строками (QListViewItem) и надо, в зависимости от строки, выполнять различные действия. А в сигналах есть только нажание на List в целом. Или я чего-то торможу...


Название: Re: обращение в отдельному полю в QListView [qt3]
Отправлено: pastor от Март 02, 2009, 16:17
QListView Class Reference

Цитировать
Signals
void selectionChanged ( QListViewItem * )
void currentChanged ( QListViewItem * )
void clicked ( QListViewItem * item )
void clicked ( QListViewItem * item, const QPoint & pnt, int c )
void pressed ( QListViewItem * item )
void pressed ( QListViewItem * item, const QPoint & pnt, int c )
void doubleClicked ( QListViewItem * item )
void doubleClicked ( QListViewItem *, const QPoint &, int )
void returnPressed ( QListViewItem * )
void spacePressed ( QListViewItem * )
void rightButtonClicked ( QListViewItem *, const QPoint &, int )
void rightButtonPressed ( QListViewItem *, const QPoint &, int )
void mouseButtonPressed ( int button, QListViewItem * item, const QPoint & pos, int c )
void mouseButtonClicked ( int button, QListViewItem * item, const QPoint & pos, int c )


Выбирай что нужно :)


Название: Re: обращение в отдельному полю в QListView [qt3]
Отправлено: vol4enok от Март 02, 2009, 16:23
Значит просто торможу...
я делаю вот так
 
Код:
QObject::connect( listView1, SIGNAL(clicked(QListViewItem *)), bDialog, SLOT(show()) );
но оно срабатывает на нажатие на listView вообще, а как вместо (QListViewItem *) задать нужный мне item...  ???


Название: Re: обращение в отдельному полю в QListView [qt3]
Отправлено: BaltikS от Март 02, 2009, 16:45
1) Прочитать ассистент
2) Посмотреть примеры
3) Создать слот....
4) в слоте обрабатывать твою строку...
Например в h-файле
Код
C++ (Qt)
...
private slots:
     void on_listView1_clicked(QListViewItem *);
...
 
В СРР-файле:
Код
C++ (Qt)
....
QObject::connect( listView1, SIGNAL(clicked(QListViewItem *)), this, SLOT(on_listView1_clicked(QListViewItem *)) );
....
void MyClass::on_listView1_clicked(QListViewItem *item)
{
   QMessageBox::information, this,"", item->text(0);      // вывод первой колонки item-а, по которому кликнули
}
 

5) Грамотно задать вопрос


Название: Re: обращение в отдельному полю в QListView [qt3]
Отправлено: kuzulis от Март 02, 2009, 16:45
может нужно сначала проверить что за QListViewItem * (типа по ID-у и т.п.), а потом уже диалог показывать? не?


Название: Re: обращение в отдельному полю в QListView [qt3]
Отправлено: vol4enok от Март 03, 2009, 14:38
Спасибо, все получилось  :)


Название: Re: обращение в отдельному полю в QListView [qt3]
Отправлено: vol4enok от Март 03, 2009, 16:50
как оказалось не совсем...
Создание слота помогло решить  основную задачу, но если теперь нажать на пустое пространство в QListView (которое не относится ни к одному QListViewItem) программа вылетает с Segmentation fault...


Название: Re: обращение в отдельному полю в QListView [qt3]
Отправлено: spirit от Март 03, 2009, 16:58
сделайте проверку указателя, типа
Код
C++ (Qt)
...
if (!item)
  return;
...
 


Название: Re: обращение в отдельному полю в QListView [qt3]
Отправлено: vol4enok от Март 03, 2009, 17:07
Огромное спасибо, все работает  :)