Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: thechicho от Февраль 08, 2014, 19:59



Название: [Решено] QCompleter динамически удалить элемент из списка
Отправлено: thechicho от Февраль 08, 2014, 19:59
есть QCompleter и QLineEdit;
сделал динамическое добавление в список, его сохранение и восстановление из QSettings.
хотел сделать удаление элемента из списка по клику правой мышкой, но не получилось просто разобраться.
как можно отловить клик правой мышки именно по элементу списка QCompleter?

или как это все можно проще реализовать? нужно чтобы при клике в QLineEdit появлялся список записей, которые были когда-либо туда введены (сохранение макс 10 записей, при добавлении больше 10, старая запись из 10 уже существующих удаляется (нижняя), новая добавляется (верхняя)). при клике правой мышкой на любую запись - происходит ее удаление из списка.


Название: Re: QCompleter динамически удалить элемент из списка
Отправлено: thechicho от Февраль 09, 2014, 13:09
Код
C++ (Qt)
class ListView : public QListView
{
   Q_OBJECT
 
signals:
   void removeRow(int);
 
protected:
   void mouseReleaseEvent(QMouseEvent *event) {
       QListView::mouseReleaseEvent(event);
       if (event->button() == Qt::RightButton) {
           emit removeRow(this->selectionModel()->selectedRows().first().row());
       }
   }
};
Код
C++ (Qt)
   QCompleter *completer = new QCompleter(completerWords, this);
   ListView *listView = new ListView;
   connect(listView, SIGNAL(removeRow(int)), this, SLOT(removeRow(int)));
   completer->setPopup(listView);
   completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
   completer->setMaxVisibleItems(10);
   ui->lineEdit->setCompleter(completer);
 
void Gui::removeRow(int row)
{
   ui->lineEdit->completer()->model()->removeRow(row);
   ui->lineEdit->completer()->complete();
}