Russian Qt Forum
Ноябрь 05, 2024, 22:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: обращение в отдельному полю в QListView [qt3]  (Прочитано 5653 раз)
vol4enok
Гость
« : Март 02, 2009, 15:58 »

Здравствуйте
Возникла такая проблема, не могу связать коннектом нажатие на конкретную строку в QListView. Есть List с тремя строками (QListViewItem) и надо, в зависимости от строки, выполнять различные действия. А в сигналах есть только нажание на List в целом. Или я чего-то торможу...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Март 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 )


Выбирай что нужно Улыбающийся
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
vol4enok
Гость
« Ответ #2 : Март 02, 2009, 16:23 »

Значит просто торможу...
я делаю вот так
 
Код:
QObject::connect( listView1, SIGNAL(clicked(QListViewItem *)), bDialog, SLOT(show()) );
но оно срабатывает на нажатие на listView вообще, а как вместо (QListViewItem *) задать нужный мне item...  Непонимающий
Записан
BaltikS
Гость
« Ответ #3 : Март 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) Грамотно задать вопрос
« Последнее редактирование: Март 02, 2009, 16:47 от BaltikS » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Март 02, 2009, 16:45 »

может нужно сначала проверить что за QListViewItem * (типа по ID-у и т.п.), а потом уже диалог показывать? не?
Записан

ArchLinux x86_64 / Win10 64 bit
vol4enok
Гость
« Ответ #5 : Март 03, 2009, 14:38 »

Спасибо, все получилось  Улыбающийся
Записан
vol4enok
Гость
« Ответ #6 : Март 03, 2009, 16:50 »

как оказалось не совсем...
Создание слота помогло решить  основную задачу, но если теперь нажать на пустое пространство в QListView (которое не относится ни к одному QListViewItem) программа вылетает с Segmentation fault...
Записан
spirit
Гость
« Ответ #7 : Март 03, 2009, 16:58 »

сделайте проверку указателя, типа
Код
C++ (Qt)
...
if (!item)
  return;
...
 
Записан
vol4enok
Гость
« Ответ #8 : Март 03, 2009, 17:07 »

Огромное спасибо, все работает  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.259 секунд. Запросов: 23.