- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Qt之自定义检索框
1、效果展示
今天这篇文章主要讲解的是自定义搜索框,不仅仅支持搜索,而且可以支持搜索预览,具体请看效果图1。网上也有一些比较简单明了的自定义搜索框,比如Qt之自定义搜索框 ,讲的也比较详细,不过本文的侧重点不仅仅是搜索,而且包括了检索功能。有兴趣的小伙伴可以看下步骤3的思路讲解。
2、功能分析
这个自定义搜索框支持输入一定的数据源,然后通过检索窗口进行搜索数据,匹配到的数据会优先展示到预览下拉框,预览窗口支持hover高亮整行。仔细阅读demo源码的同学可能就会发现其实这个搜搜框的左侧又一个按钮是可以点击的,但是目前还没有添加具体的点击功能。了解了这个控件的功能之后,如果觉得对你有用,那么就可以接着继续往下看实现流程。
回到顶部
3、思路讲解
问题分析:
1、数据源存储在哪儿?怎么实现检索
2、弹出式下拉框显示和隐藏控制?位置同步?
3、鼠标hover状态的颜色设置?
首先在讲解源码之前,我抛出了3个问题,有精力的同学可以先思考下这几个问题,然后在接着往下看,下边我也会逐一说明这个些问题。
源码讲解:
1、使用到的类:
StockSortFilterProxyModel:过滤数据源,该model上的数据索引直接供视图展示
StockTableView:自定义视图,用于显示预览数据
StockListWidget:自定义搜索框
StockItemDelegate:自定义委托,提供自定义绘图
上边4个类是完成自定义搜索框的自定义类,当然除了上述4个类以外,还用到了qt自带的一些类,更好的理解这些类,那么这个自定义控件的思路也就显得异常好理解。
2、头文件说明
委托:负责视图绘制
复制代码
1 class IView;
2
3 struct StockItemDelegatePrivate
4 {
5 int column = 1;//进度条所在列,下标从0开始
6 QTableView * parent = nullptr;
7 IView * view = nullptr;
8 };
9
10 class StockItemDelegate : public QStyledItemDelegate
11 {
12 Q_OBJECT
13
14 public:
15 StockItemDelegate(QTableView * parent = nullptr);
16 ~StockItemDelegate(){};
17
18 public:
19 void setView(IView * view);
20
21 protected:
22 virtual void paint(QPainter * painter
23 , const QStyleOptionViewItem option
24 , const QModelIndex index) const Q_DECL_OVERRIDE;
25
26 virtual QSize sizeHint(const QStyleOptionViewItem option,
27 const QModelIndex index) const Q_DECL_OVERRIDE;
28
29 private:
30 QScopedPointerStockItemDelegatePrivate d_ptr;
31 };
复制代码
窗口布局:StockTableView是专门用来展示检索后的数据,StockListWidget是窗口布局
复制代码
1 class IView
2 {
3 public:
4 virtual void SetMouseOver(int) = 0;
5 };
6
7 class StockTableView : public QTableView, public IView
8 {
9 Q_OBJECT
10 public:
11 StockTableView(QStandardItemModel * model, QWidget * parent = 0);
12
13 public:
14 void SetMouseOver(int);
15
16 protected:
17 virtual void mouseMoveEvent(QMouseEvent * event) override;
18 virtual void leaveEvent(QEvent
您可能关注的文档
- 2016年高考满分作文及妈妈回信(现成文档)教案.doc
- 2016年高三政治政治生活答题模板教案.docx
- 光伏电站验收标准教案.doc
- 光伏发电工程厂区电气设备安装工程作业指导书教案.docx
- 2016年广东省电子商务员试题及答案教案.docx
- 电大《水土保持技术》复习(排序)教案.docx
- 2016年广西公务员网络培训“十三五”规划总体思路解读(95分)教案.docx
- 电大2015形考解剖学01任务001_0001教案.doc
- 2016年广西公务员网络培训新发展理念公务员读本试题和答案96分教案.docx
- 2016年海南省职业院校技能大赛(中职组)“楼宇智能化系统安装与调试”项目竞赛规程教案.doc
文档评论(0)