玉兔远程控制 0.1.0-bate6
载入中...
搜索中...
未找到
AddressCompleter.h
1// Author: Kang Lin <kl222@126.com>
2
3#pragma once
4
5#include <QLabel>
6#include <QLineEdit>
7#include <QListWidget>
8#include <QVBoxLayout>
9#include <QTimer>
10#include <QSqlDatabase>
11#include <QIcon>
12#include <QPropertyAnimation>
13
18class CAddressCompleterItem : public QWidget
19{
20 Q_OBJECT
21public:
22 explicit CAddressCompleterItem(const QString &title,
23 const QString &url,
24 const QIcon &icon,
25 QWidget *parent = nullptr);
26
27 QString title() const { return m_title; }
28 QString url() const { return m_url; }
29
30private:
31 QString m_title;
32 QString m_url;
33 QLabel *m_iconLabel;
34 QLabel *m_titleLabel;
35 QLabel *m_urlLabel;
36};
37
38class CAddressCompleter : public QWidget
39{
40 Q_OBJECT
41public:
42 explicit CAddressCompleter(QWidget *parent = nullptr);
44
45 void attachToLineEdit(QLineEdit *lineEdit);
46 void setMaxVisibleItems(int count);
47
48signals:
49 void urlSelected(const QString &url);
50 void searchRequested(const QString &keyword);
51 void sigCommand(const QString& szCmd);
52
53protected:
54 bool eventFilter(QObject *watched, QEvent *event) override;
55 void showEvent(QShowEvent *event) override;
56 void hideEvent(QHideEvent *event) override;
57
58private Q_SLOTS:
59 void onTextChanged(const QString &text);
60 void onItemClicked(QListWidgetItem *item);
61 virtual void performSearch();
62 void moveToNextItem();
63 void moveToPreviousItem();
64 void selectCurrentItem();
65
66private:
67 void setupUI();
68 void showCompleter();
69 void hideCompleter();
70 void updateCompleterPosition();
71 QIcon getIconForUrl(const QString &url);
72 void addSearchSuggestions(const QString &keyword);
73
74 struct Command
75 {
76 QString title;
77 QString cmd;
78 QIcon icon;
79 };
80
81private:
82 QLineEdit *m_pLineEdit;
83 QString m_szEnter;
84 QString m_szOldLineEditToolTip;
85 QString m_szLineEditToolTip;
86 QString m_szLineEditToolTipShow;
87 QString m_szListWidgetToolTip;
88 QListWidget *m_pListWidget;
89 QTimer *m_pSearchTimer;
90 QPropertyAnimation *m_pShowAnimation;
91 QPropertyAnimation *m_pHideAnimation;
92 int m_currentSelectedIndex;
93 int m_maxVisibleItems;
94 bool m_isCompleterVisible;
95};
浏览器的地址栏自动完成功能