27TopicChooser::TopicChooser(QWidget *parent,
const QString &keyword, QList<QHelpLink> docs)
29 , m_filterModel(
new QSortFilterProxyModel(
this))
36 setFocusProxy(ui.lineEdit);
37 ui.lineEdit->installEventFilter(
this);
38 ui.lineEdit->setPlaceholderText(tr(
"Filter"));
39 ui.label->setText(tr(
"Choose a topic for <b>%1</b>:").arg(keyword));
41 QStandardItemModel *model =
new QStandardItemModel(
this);
42 m_filterModel->setSourceModel(model);
43 m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
45 for (
const auto &doc : docs) {
46 m_links.append(doc.url);
47 QStandardItem *item =
new QStandardItem(doc.title);
48 item->setToolTip(doc.url.toString());
49 model->appendRow(item);
52 ui.listWidget->setModel(m_filterModel);
53 ui.listWidget->setUniformItemSizes(
true);
54 ui.listWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
56 if (m_filterModel->rowCount() != 0)
57 ui.listWidget->setCurrentIndex(m_filterModel->index(0, 0));
59 connect(ui.buttonCancel, &QAbstractButton::clicked,
60 this, &QDialog::reject);
61 connect(ui.buttonDisplay, &QAbstractButton::clicked,
62 this, &TopicChooser::acceptDialog);
63 connect(ui.lineEdit, &QLineEdit::textChanged,
64 this, &TopicChooser::setFilter);
65 connect(ui.listWidget, &QAbstractItemView::activated,
66 this, &TopicChooser::activated);
111 if (object == ui.lineEdit && event->type() == QEvent::KeyPress) {
112 QKeyEvent *keyEvent =
static_cast<QKeyEvent*>(event);
113 switch (keyEvent->key()) {
117 case Qt::Key_PageDown:
118 QCoreApplication::sendEvent(ui.listWidget, event);
121 }
else if (ui.lineEdit && event->type() == QEvent::FocusIn
122 &&
static_cast<QFocusEvent *>(event)->reason() != Qt::MouseFocusReason) {
123 ui.lineEdit->selectAll();
124 ui.lineEdit->setFocus();
126 return QDialog::eventFilter(object, event);