From 71e6c6896a091abbca3f24d4b12741404dd193c0 Mon Sep 17 00:00:00 2001 From: Mouse Zhang Date: Thu, 8 Apr 2021 14:23:18 +0800 Subject: [PATCH 1/3] Fix potential problems. --- libsearch/index/first-index.cpp | 6 +++--- libsearch/index/first-index.h | 4 ++-- libsearch/index/inotify-index.cpp | 2 +- libsearch/index/inotify-index.h | 4 ++-- libsearch/index/traverse_bfs.cpp | 1 + 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libsearch/index/first-index.cpp b/libsearch/index/first-index.cpp index 3463439..878593b 100644 --- a/libsearch/index/first-index.cpp +++ b/libsearch/index/first-index.cpp @@ -35,8 +35,8 @@ FirstIndex::FirstIndex(const QString& path) : Traverse_BFS(path) qDebug() << "contentIndexDataBaseStatus: " << contentIndexDataBaseStatus; qDebug() << "inotifyIndexStatus: " << inotifyIndexStatus; - - if (indexDataBaseStatus == "" || contentIndexDataBaseStatus == ""){ + /* || contentIndexDataBaseStatus == ""*/ + if (indexDataBaseStatus == ""){ this->bool_dataBaseExist = false; } else{ @@ -75,7 +75,7 @@ FirstIndex::~FirstIndex() void FirstIndex::DoSomething(const QFileInfo& fileInfo){ // qDebug() << "there are some shit here"<q_index->enqueue(QVector() << fileInfo.fileName() << fileInfo.absoluteFilePath() << QString((fileInfo.isDir() && (!fileInfo.isSymLink())) ? "1" : "0")); - if ((!fileInfo.fileName().split(".").isEmpty()) && (true == targetFileTypeMap[fileInfo.fileName().split(".").last()])){ + if ((fileInfo.fileName().split(".", QString::SkipEmptyParts).length() > 1) && (true == targetFileTypeMap[fileInfo.fileName().split(".").last()])){ this->q_content_index->enqueue(fileInfo.absoluteFilePath()); } } diff --git a/libsearch/index/first-index.h b/libsearch/index/first-index.h index d3368fb..2dd7efb 100644 --- a/libsearch/index/first-index.h +++ b/libsearch/index/first-index.h @@ -67,9 +67,9 @@ private: std::map::value_type("doc", true), std::map::value_type("docx", true), std::map::value_type("ppt", true), -// std::map::value_type(".pptx", true), +// std::map::value_type("pptx", true), std::map::value_type("xls", true), -// std::map::value_type(".xlsx", true), +// std::map::value_type("xlsx", true), std::map::value_type("txt", true), std::map::value_type("dot", true), std::map::value_type("wps", true), diff --git a/libsearch/index/inotify-index.cpp b/libsearch/index/inotify-index.cpp index b0367f3..fa7ae2b 100644 --- a/libsearch/index/inotify-index.cpp +++ b/libsearch/index/inotify-index.cpp @@ -93,7 +93,7 @@ void InotifyIndex::DoSomething(const QFileInfo& fileInfo){ QQueue > tempFile; tempFile.enqueue(QVector() << fileInfo.fileName() << fileInfo.absoluteFilePath() << QString((fileInfo.isDir() && (!fileInfo.isSymLink())) ? "1" : "0")); IndexGenerator::getInstance()->creatAllIndex(&tempFile); - if ((!fileInfo.fileName().split(".").isEmpty()) && (true == targetFileTypeMap[fileInfo.fileName().split(".").last()])){ + if ((fileInfo.fileName().split(".", QString::SkipEmptyParts).length() > 1) && (true == targetFileTypeMap[fileInfo.fileName().split(".").last()])){ QQueue tmp; tmp.enqueue(fileInfo.absoluteFilePath()); IndexGenerator::getInstance()->creatAllIndex(&tmp); diff --git a/libsearch/index/inotify-index.h b/libsearch/index/inotify-index.h index fb2c4ad..7c5ebe7 100644 --- a/libsearch/index/inotify-index.h +++ b/libsearch/index/inotify-index.h @@ -65,9 +65,9 @@ private: std::map::value_type("doc", true), std::map::value_type("docx", true), std::map::value_type("ppt", true), -// std::map::value_type(".pptx", true), +// std::map::value_type("pptx", true), std::map::value_type("xls", true), -// std::map::value_type(".xlsx", true), +// std::map::value_type("xlsx", true), std::map::value_type("txt", true), std::map::value_type("dot", true), std::map::value_type("wps", true), diff --git a/libsearch/index/traverse_bfs.cpp b/libsearch/index/traverse_bfs.cpp index 67d811a..bf0cb71 100644 --- a/libsearch/index/traverse_bfs.cpp +++ b/libsearch/index/traverse_bfs.cpp @@ -30,6 +30,7 @@ void Traverse_BFS::Traverse(){ bfs.enqueue(this->path); QFileInfoList list; QDir dir; + // QDir::Hidden dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); dir.setSorting(QDir::DirsFirst); while (!bfs.empty()) { From dbb3c6661d81da4db688c9effa5122a0b4cf92d7 Mon Sep 17 00:00:00 2001 From: zhangjiaping Date: Fri, 9 Apr 2021 18:06:50 +0800 Subject: [PATCH 2/3] =?UTF-8?q?Feature(frontend):Add=20double=20click=20ev?= =?UTF-8?q?ent=20to=20search=20list=20view.=20=E6=96=B0=E5=A2=9E=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E7=BB=93=E6=9E=9C=E5=88=97=E8=A1=A8=E5=8F=8C=E5=87=BB?= =?UTF-8?q?=E6=89=93=E5=BC=80=E5=8A=9F=E8=83=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content-widget.cpp | 21 +++++++++++++++++++++ src/control/search-detail-view.cpp | 19 +++++++++++++++++++ src/control/search-detail-view.h | 1 + src/control/search-list-view.cpp | 6 ++++++ src/control/search-list-view.h | 2 ++ 5 files changed, 49 insertions(+) diff --git a/src/content-widget.cpp b/src/content-widget.cpp index ba351eb..5fabaae 100644 --- a/src/content-widget.cpp +++ b/src/content-widget.cpp @@ -305,6 +305,27 @@ void ContentWidget::setupConnect(SearchListView * listview) { m_resultListArea->ensureVisible(pos.x(),pos.y()); }); connect(listview,&SearchListView::mousePressed,this,&ContentWidget::mousePressed); + connect(listview, &SearchListView::onRowDoubleClicked, [ = ](const int& type, const QString& path) { + qDebug()<<"A row has been double clicked.Type = "<doubleClickAction(SearchListView::ResType::App, m_appList.at(0)); + } else { + m_detailView->doubleClickAction(SearchListView::ResType::App, m_appPathList.at(0)); + } + } else if (type == SearchItem::SearchType::Apps) { + int index = listview->currentIndex().row(); + if (m_appPathList.at(index) == "" || m_appPathList.at(index).isEmpty()){ + m_detailView->doubleClickAction(SearchListView::ResType::App, m_appList.at(index)); + } else { + m_detailView->doubleClickAction(SearchListView::ResType::App, m_appPathList.at(index)); + } + } else { + m_detailView->doubleClickAction(type, path); + } + }); } /** diff --git a/src/control/search-detail-view.cpp b/src/control/search-detail-view.cpp index b2fc872..05f197b 100644 --- a/src/control/search-detail-view.cpp +++ b/src/control/search-detail-view.cpp @@ -243,6 +243,25 @@ void SearchDetailView::closeWebWidget() // } } +/** + * @brief SearchDetailView::doubleClickAction 处理搜索结果列表选项双击事件 + * @param type + * @param path + * @return + */ +bool SearchDetailView::doubleClickAction(const int &type, const QString &path) +{ + if (type == SearchListView::ResType::App) { + if (path.contains(".desktop")) { + return openAction(type, path); + } else { + return installAppAction(path.mid(path.indexOf("/") + 1)); + } + } else { + return openAction(type, path); + } +} + QString SearchDetailView::getHtmlText(const QString & text, const QString & keyword) { QString htmlString; bool boldOpenned = false; diff --git a/src/control/search-detail-view.h b/src/control/search-detail-view.h index cbf89b5..33785f6 100644 --- a/src/control/search-detail-view.h +++ b/src/control/search-detail-view.h @@ -46,6 +46,7 @@ public: void setWebWidget(const QString&); void setAppWidget(const QString &name, const QString &path, const QString &icon, const QString &description); void closeWebWidget(); + bool doubleClickAction(const int&, const QString&); protected: void paintEvent(QPaintEvent *); diff --git a/src/control/search-list-view.cpp b/src/control/search-list-view.cpp index 530ee39..0b6bc5f 100644 --- a/src/control/search-list-view.cpp +++ b/src/control/search-list-view.cpp @@ -161,6 +161,12 @@ void SearchListView::mousePressEvent(QMouseEvent *event) QTreeView::mousePressEvent(event); } +void SearchListView::mouseDoubleClickEvent(QMouseEvent *event) +{ + Q_EMIT this->onRowDoubleClicked(getCurrentType(), m_item->m_pathlist.at(this->currentIndex().row())); + QTreeView::mouseDoubleClickEvent(event); +} + //获取当前选项所属搜索类型 int SearchListView::getCurrentType() { switch (m_type) { diff --git a/src/control/search-list-view.h b/src/control/search-list-view.h index 86902db..fb913fa 100644 --- a/src/control/search-list-view.h +++ b/src/control/search-list-view.h @@ -63,6 +63,7 @@ public: bool isHidden = false; protected: void mousePressEvent(QMouseEvent *event) override; + void mouseDoubleClickEvent(QMouseEvent *event) override; private: SearchItemModel * m_model = nullptr; SearchItem * m_item = nullptr; @@ -74,6 +75,7 @@ private: Q_SIGNALS: void currentRowChanged(const int&, const QString&); + void onRowDoubleClicked(const int&, const QString&); void currentSelectPos(QPoint pos); void mousePressed(); From 7a74b1e4fb24eba7775ce762eee6359be7e74caf Mon Sep 17 00:00:00 2001 From: zhangjiaping Date: Tue, 13 Apr 2021 10:02:16 +0800 Subject: [PATCH 3/3] Optimize code. --- src/content-widget.cpp | 124 ++++++++++++++++------------- src/content-widget.h | 2 + src/control/home-page-item.cpp | 55 +++++++------ src/control/home-page-item.h | 5 +- src/control/search-detail-view.cpp | 12 +-- src/control/search-list-view.cpp | 12 +-- src/control/search-list-view.h | 5 +- 7 files changed, 114 insertions(+), 101 deletions(-) diff --git a/src/content-widget.cpp b/src/content-widget.cpp index 5fabaae..9d50717 100644 --- a/src/content-widget.cpp +++ b/src/content-widget.cpp @@ -260,39 +260,6 @@ void ContentWidget::hideListView() * @param listview */ void ContentWidget::setupConnect(SearchListView * listview) { - connect(listview, &SearchListView::currentRowChanged, this, [ = ](const int& type, const QString& path) { - if(type == SearchItem::SearchType::Contents && !m_contentDetailList.isEmpty()) { - m_detailView->isContent = true; - m_detailView->setContent(m_contentDetailList.at(listview->currentIndex().row()), m_keyword); - } else if (type == SearchItem::SearchType::Best && !m_bestContent.isEmpty() && listview->currentIndex().row() == listview->getLength() - 1) { - m_detailView->setContent(m_bestContent, m_keyword); - m_detailView->isContent = true; - m_detailView->setupWidget(SearchItem::SearchType::Contents, path); - listview->is_current_list = true; - Q_EMIT this->currentItemChanged(); - listview->is_current_list = false; - return; - } else { - m_detailView->isContent = false; - } - if (type == SearchItem::SearchType::Web) { - m_detailView->setWebWidget(this->m_keyword); - } else if (type == SearchItem::SearchType::Apps) { - int index = listview->currentIndex().row(); - m_detailView->setAppWidget(m_appList.at(index), m_appPathList.at(index), m_appIconList.at(index), m_appDescList.at(index)); - } else if (type == SearchItem::SearchType::Best) { - if (m_bestList.at(listview->currentIndex().row()).first == SearchItem::SearchType::Apps) { - m_detailView->setAppWidget(m_appList.at(0), m_appPathList.at(0), m_appIconList.at(0), m_appDescList.at(0)); - } else { - m_detailView->setupWidget(m_bestList.at(listview->currentIndex().row()).first, m_bestList.at(listview->currentIndex().row()).second); - } - } else { - m_detailView->setupWidget(type, path); - } - listview->is_current_list = true; - Q_EMIT this->currentItemChanged(); - listview->is_current_list = false; - }); connect(this, &ContentWidget::currentItemChanged, listview, [ = ]() { if (! listview->is_current_list) { @@ -305,27 +272,8 @@ void ContentWidget::setupConnect(SearchListView * listview) { m_resultListArea->ensureVisible(pos.x(),pos.y()); }); connect(listview,&SearchListView::mousePressed,this,&ContentWidget::mousePressed); - connect(listview, &SearchListView::onRowDoubleClicked, [ = ](const int& type, const QString& path) { - qDebug()<<"A row has been double clicked.Type = "<doubleClickAction(SearchListView::ResType::App, m_appList.at(0)); - } else { - m_detailView->doubleClickAction(SearchListView::ResType::App, m_appPathList.at(0)); - } - } else if (type == SearchItem::SearchType::Apps) { - int index = listview->currentIndex().row(); - if (m_appPathList.at(index) == "" || m_appPathList.at(index).isEmpty()){ - m_detailView->doubleClickAction(SearchListView::ResType::App, m_appList.at(index)); - } else { - m_detailView->doubleClickAction(SearchListView::ResType::App, m_appPathList.at(index)); - } - } else { - m_detailView->doubleClickAction(type, path); - } - }); + connect(listview, SIGNAL(currentRowChanged(SearchListView *,const int&, const QString&)), this, SLOT(onListViewRowChanged(SearchListView *, const int&, const QString&))); + connect(listview, SIGNAL(onRowDoubleClicked(SearchListView *,const int&, const QString&)), this, SLOT(onListViewRowDoubleClicked(SearchListView *, const int&, const QString&))); } /** @@ -752,6 +700,74 @@ void ContentWidget::clearLayout(QLayout * layout) { child = NULL; } +/** + * @brief ContentWidget::onListViewRowChanged 点击某列表某一行的槽函数 + * @param type + * @param path + */ +void ContentWidget::onListViewRowChanged(SearchListView * listview, const int &type, const QString &path) +{ + if(type == SearchItem::SearchType::Contents && !m_contentDetailList.isEmpty()) { + m_detailView->isContent = true; + m_detailView->setContent(m_contentDetailList.at(listview->currentIndex().row()), m_keyword); + } else if (type == SearchItem::SearchType::Best && !m_bestContent.isEmpty() && listview->currentIndex().row() == listview->getLength() - 1) { + m_detailView->setContent(m_bestContent, m_keyword); + m_detailView->isContent = true; + m_detailView->setupWidget(SearchItem::SearchType::Contents, path); + listview->is_current_list = true; + Q_EMIT this->currentItemChanged(); + listview->is_current_list = false; + return; + } else { + m_detailView->isContent = false; + } + if (type == SearchItem::SearchType::Web) { + m_detailView->setWebWidget(this->m_keyword); + } else if (type == SearchItem::SearchType::Apps) { + int index = listview->currentIndex().row(); + m_detailView->setAppWidget(m_appList.at(index), m_appPathList.at(index), m_appIconList.at(index), m_appDescList.at(index)); + } else if (type == SearchItem::SearchType::Best) { + if (m_bestList.at(listview->currentIndex().row()).first == SearchItem::SearchType::Apps) { + m_detailView->setAppWidget(m_appList.at(0), m_appPathList.at(0), m_appIconList.at(0), m_appDescList.at(0)); + } else { + m_detailView->setupWidget(m_bestList.at(listview->currentIndex().row()).first, m_bestList.at(listview->currentIndex().row()).second); + } + } else { + m_detailView->setupWidget(type, path); + } + listview->is_current_list = true; + Q_EMIT this->currentItemChanged(); + listview->is_current_list = false; +} + +/** + * @brief ContentWidget::onListViewRowDoubleClicked 双击某列表某一行的槽函数 + * @param type + * @param path + */ +void ContentWidget::onListViewRowDoubleClicked(SearchListView * listview, const int &type, const QString &path) +{ + qDebug()<<"A row has been double clicked.Type = "<doubleClickAction(SearchListView::ResType::App, m_appList.at(0)); + } else { + m_detailView->doubleClickAction(SearchListView::ResType::App, m_appPathList.at(0)); + } + } else if (type == SearchItem::SearchType::Apps) { + int index = listview->currentIndex().row(); + if (m_appPathList.at(index) == "" || m_appPathList.at(index).isEmpty()){ + m_detailView->doubleClickAction(SearchListView::ResType::App, m_appList.at(index)); + } else { + m_detailView->doubleClickAction(SearchListView::ResType::App, m_appPathList.at(index)); + } + } else { + m_detailView->doubleClickAction(type, path); + } +} + /** * @brief ContentWidget::setContentList 文本内容搜索结果列表(包含所有文本段) diff --git a/src/content-widget.h b/src/content-widget.h index 143873a..9c7a528 100644 --- a/src/content-widget.h +++ b/src/content-widget.h @@ -113,6 +113,8 @@ Q_SIGNALS: private Q_SLOTS: void clearLayout(QLayout *); + void onListViewRowChanged(SearchListView * listview, const int& type, const QString& path); + void onListViewRowDoubleClicked(SearchListView * listview, const int& type, const QString& path); }; #endif // CONTENTWIDGET_H diff --git a/src/control/home-page-item.cpp b/src/control/home-page-item.cpp index 5fcee60..7ee8c35 100644 --- a/src/control/home-page-item.cpp +++ b/src/control/home-page-item.cpp @@ -50,35 +50,11 @@ HomePageItem::~HomePageItem() * @param path 路径 */ void HomePageItem::setupUi(const int& type, const QString& path) { + m_path = path; m_widget = new QWidget(this); m_widget->setObjectName("MainWidget"); // m_widget->setStyleSheet("QWidget#MainWidget{background: rgba(0, 0, 0, 0.05); border-radius: 4px;}"); m_widget->installEventFilter(this); - connect(this, &HomePageItem::onItemClicked, this, [ = ]() { - switch (SearchListView::getResType(path)) { - case SearchListView::ResType::App: { - GDesktopAppInfo * desktopAppInfo = g_desktop_app_info_new_from_filename(path.toLocal8Bit().data()); - g_app_info_launch(G_APP_INFO(desktopAppInfo),nullptr, nullptr, nullptr); - g_object_unref(desktopAppInfo); - break; - } - case SearchListView::ResType::Best: - case SearchListView::ResType::Content: - case SearchListView::ResType::Dir: - case SearchListView::ResType::File: { - QDesktopServices::openUrl(QUrl::fromLocalFile(path)); - break; - } - case SearchListView::ResType::Setting: { - //打开控制面板对应页面 - QProcess process; - process.startDetached(QString("ukui-control-center --%1").arg(path.left(path.indexOf("/")).toLower())); - break; - } - default: - break; - } - }); m_iconlabel = new QLabel(m_widget); m_namelabel = new QLabel(m_widget); if (type == ItemType::Recent) { @@ -150,6 +126,33 @@ void HomePageItem::setupUi(const int& type, const QString& path) { m_vlayout->addWidget(m_namelabel); } +void HomePageItem::onItemClicked() +{ + switch (SearchListView::getResType(m_path)) { + case SearchListView::ResType::App: { + GDesktopAppInfo * desktopAppInfo = g_desktop_app_info_new_from_filename(m_path.toLocal8Bit().data()); + g_app_info_launch(G_APP_INFO(desktopAppInfo),nullptr, nullptr, nullptr); + g_object_unref(desktopAppInfo); + break; + } + case SearchListView::ResType::Best: + case SearchListView::ResType::Content: + case SearchListView::ResType::Dir: + case SearchListView::ResType::File: { + QDesktopServices::openUrl(QUrl::fromLocalFile(m_path)); + break; + } + case SearchListView::ResType::Setting: { + //打开控制面板对应页面 + QProcess process; + process.startDetached(QString("ukui-control-center --%1").arg(m_path.left(m_path.indexOf("/")).toLower())); + break; + } + default: + break; + } +} + bool HomePageItem::eventFilter(QObject *watched, QEvent *event){ if (watched == m_widget){ if (event->type() == QEvent::MouseButtonPress) { @@ -157,7 +160,7 @@ bool HomePageItem::eventFilter(QObject *watched, QEvent *event){ this->update(); return true; } else if (event->type() == QEvent::MouseButtonRelease) { - Q_EMIT this->onItemClicked(); + this->onItemClicked(); m_transparency = 0.06; this->update(); return true; diff --git a/src/control/home-page-item.h b/src/control/home-page-item.h index 84fa765..1c8fa61 100644 --- a/src/control/home-page-item.h +++ b/src/control/home-page-item.h @@ -47,6 +47,7 @@ protected: private: void setupUi(const int&, const QString&); + void onItemClicked(); QWidget * m_widget = nullptr; QHBoxLayout * m_hlayout = nullptr; @@ -54,9 +55,7 @@ private: QLabel * m_iconlabel = nullptr; QLabel * m_namelabel = nullptr; double m_transparency = 0; - -Q_SIGNALS: - void onItemClicked(); + QString m_path; }; #endif // HOMEPAGEITEM_H diff --git a/src/control/search-detail-view.cpp b/src/control/search-detail-view.cpp index 05f197b..11d4a13 100644 --- a/src/control/search-detail-view.cpp +++ b/src/control/search-detail-view.cpp @@ -251,14 +251,14 @@ void SearchDetailView::closeWebWidget() */ bool SearchDetailView::doubleClickAction(const int &type, const QString &path) { - if (type == SearchListView::ResType::App) { - if (path.contains(".desktop")) { - return openAction(type, path); - } else { + if (type == SearchListView::ResType::App && !path.contains(".desktop")) { return installAppAction(path.mid(path.indexOf("/") + 1)); - } } else { - return openAction(type, path); + if (openAction(type, path)) { + writeConfigFile(path); + return true; + } + return false; } } diff --git a/src/control/search-list-view.cpp b/src/control/search-list-view.cpp index 0b6bc5f..5fcca26 100644 --- a/src/control/search-list-view.cpp +++ b/src/control/search-list-view.cpp @@ -46,7 +46,7 @@ SearchListView::SearchListView(QWidget * parent, const QStringList& list, const m_type = type; connect(this->selectionModel(), &QItemSelectionModel::selectionChanged, this, [ = ](const QItemSelection &selected, const QItemSelection &deselected) { - Q_EMIT this->currentRowChanged(getCurrentType(), m_item->m_pathlist.at(this->currentIndex().row())); + Q_EMIT this->currentRowChanged(this, getCurrentType(), m_item->m_pathlist.at(this->currentIndex().row())); m_isSelected = true; if(!selected.isEmpty()) { @@ -56,8 +56,8 @@ SearchListView::SearchListView(QWidget * parent, const QStringList& list, const } }); - connect(this, &SearchListView::doubleClicked, this, [ = ](const QModelIndex& index) { - + connect(this, &SearchListView::activated, this, [ = ](const QModelIndex& index) { + Q_EMIT this->onRowDoubleClicked(this, getCurrentType(), m_item->m_pathlist.at(index.row())); }); } @@ -161,12 +161,6 @@ void SearchListView::mousePressEvent(QMouseEvent *event) QTreeView::mousePressEvent(event); } -void SearchListView::mouseDoubleClickEvent(QMouseEvent *event) -{ - Q_EMIT this->onRowDoubleClicked(getCurrentType(), m_item->m_pathlist.at(this->currentIndex().row())); - QTreeView::mouseDoubleClickEvent(event); -} - //获取当前选项所属搜索类型 int SearchListView::getCurrentType() { switch (m_type) { diff --git a/src/control/search-list-view.h b/src/control/search-list-view.h index fb913fa..df6f642 100644 --- a/src/control/search-list-view.h +++ b/src/control/search-list-view.h @@ -63,7 +63,6 @@ public: bool isHidden = false; protected: void mousePressEvent(QMouseEvent *event) override; - void mouseDoubleClickEvent(QMouseEvent *event) override; private: SearchItemModel * m_model = nullptr; SearchItem * m_item = nullptr; @@ -74,8 +73,8 @@ private: int m_type; Q_SIGNALS: - void currentRowChanged(const int&, const QString&); - void onRowDoubleClicked(const int&, const QString&); + void currentRowChanged(SearchListView *,const int&, const QString&); + void onRowDoubleClicked(SearchListView *, const int&, const QString&); void currentSelectPos(QPoint pos); void mousePressed();