Название: QAbstractItemModel : клик на текущей строке Отправлено: core от Январь 26, 2011, 21:24 Есть QAbstractItemModel обьект с 5 столбцов и N строк. При клике на строку нужно передать значение 1-ого столбца строки а котоую сделан двойной клик. Тоисть:
(http://i.piccy.info/i5/11/17/1011711/Image_11.png) при клике например на строку с ID 93 - нужно получить 93 Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: alexman от Январь 26, 2011, 21:56 QVariant QAbstractItemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: core от Январь 26, 2011, 22:15 и как привязать к двойному клику на строку?
Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: serg_hd от Январь 26, 2011, 23:56 Знаю, что способ весьма костыльный, но лучше не придумал - не нашёл на что можно цеплять event filter, подходящего Role тоже нету (а вообще наверняка есть более "нативный" метод), всё-таки, наверное, лучше чем ничего.
Создаём фильтр событий: Код
Для каждой ячейки вьюхи ставим виджет лейбла - он растянется на всю ячейку и не будет перекрывать содержимое - для того, чтобы принимать события двойного клика (или просто QWidget, но с ним не пробовал): Код
Заполнять конечно в цикле - с этим никаких проблем не будет. Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: Fat-Zer от Январь 27, 2011, 03:19 сигнал QAbstractItemView:
void doubleClicked ( const QModelIndex & index ) Не оно? Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: serg_hd от Январь 27, 2011, 03:31 сигнал QAbstractItemView: да, оч. удачный сигнал. Перед использованием можно создать ассоциативный массив номер_строки=id, затем методом QModelIndex::row() определять номер, этим и получая id. Действительно удобно, а я тупанул, сигналы забыл у представления глянуть ;D Хотя в более оптимальном решении даже не сомневалсяvoid doubleClicked ( const QModelIndex & index ) Не оно? Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: core от Январь 27, 2011, 03:49 как раз только-что просматривал слоты и увидел doublecliicked. Но всеравно спасибо за помощь.
Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: core от Январь 27, 2011, 16:37 Двойной клик оказался вовсе не проблемой. Но как получить даные с первого столбца? QTreeview нет item за координатами. Получается у меня есть строка, на которую нажали, но столбцы определяются отдельно. ВАриат асоциативного масива не подходит, так как данны после добавления фильтруются (ето предназначение класа) и сортируются. Тоисть после обработки строки не будут отвечат ИД. Нужен вариант определения ID в момент двойного клика
Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: Kolobok от Январь 27, 2011, 16:56 QModelIndex QModelIndex::sibling ( int row, int column ) const
Чтение документации сильно облегчает жизнь. Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: shirushizo от Январь 27, 2011, 17:58 Двойной клик оказался вовсе не проблемой. Но как получить даные с первого столбца? QTreeview нет item за координатами. Получается у меня есть строка, на которую нажали, но столбцы определяются отдельно. ВАриат асоциативного масива не подходит, так как данны после добавления фильтруются (ето предназначение класа) и сортируются. Тоисть после обработки строки не будут отвечат ИД. Нужен вариант определения ID в момент двойного клика 1.Если у вас QTreeView почему в первом посте таблица?2.Текст модели неплохо бы показать. 3. Если древовидная модель реализована правильно, то Код: connect(view,SIGNAL(doubleClicked(QModelIndex)),SLOT(onClick(QModelIndex))) Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: core от Январь 27, 2011, 18:37 Цитировать QAbstractItemModel* MainWindow::createRecordModel(QObject *parent){ QStandardItemModel *model = new QStandardItemModel(0, 4, parent); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("windows-1251")); model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID")); model->setHeaderData(1, Qt::Horizontal, ("Назва")); model->setHeaderData(2, Qt::Horizontal, ("Виконавець")); model->setHeaderData(3, Qt::Horizontal, ("Альбом")); int size=ui->tableWidget->rowCount(); for (int i=size-1;i>=0;i--){ addRecord(model,ui->tableWidget->item(i,0)->text(),ui->tableWidget->item(i,1)->text(), ui->tableWidget->item(i,2)->text(),ui->tableWidget->item(i,3)->text()); } return model; } QTreeView чтоб показать данные. потом создаю QTreeView proxyView; proxyModel = new QSortFilterProxyModel; proxyModel->setSourceModel(model); proxyView->setModel(proxyModel); Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: core от Январь 27, 2011, 19:38 Спасибо Kolobok
proxyView->currentIndex().sibling(proxyView->currentIndex().row(),0).data().toString(); и все отлично работает. Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: core от Январь 27, 2011, 23:10 Вообщем остался самый нубский вопрос...Как отправить ето номер назад на главную форму? Тоисть...есть MainWindow. С него запускается етот виджет, о ктором шла речь.
Код: WideSearch* wWideSearch=new WideSearch; Название: Re: QAbstractItemModel : клик на текущей строке Отправлено: core от Январь 28, 2011, 02:15 Есть у кого идеи как передать етот ID на главную форму?
|