當前位置:首頁 » 操作系統 » 懸浮球源碼

懸浮球源碼

發布時間: 2023-09-05 21:36:07

1. 如何實現android炫酷懸浮球菜單

谷歌地圖應該是沒法實現離線地圖導航的把,畢竟谷歌地圖到現在也沒出離線地圖包下載,只是支持區域地圖下載緩存,導航的話,離線導航的話肯定要下載大范圍的地圖才行啊。 在一點,說下離線導航,離線導航也就意味這你要講所有的導航數據存儲到你手機本機,然後使用GPS來實現。但這有個問題,離線導航的數據肯定是很大的(我知道的離線地圖包最小的老虎地圖全國離線地圖包也要208兆呢,這還是壓縮包的大小),還有各種分類信息數據,這就要求你手機有很大的內存才行,但這對於手機而言並不劃算的,畢竟用手機導航的次數應該不多的--如果你天天用那麼建議你購買專門的導航儀吧,智能手機開啟GPS以及屏幕常量是非常耗電的,Android手機更甚。 以上我建議你還是放棄離線地圖導航的想法吧。下載個其他的手機地圖軟體,比如我上面說的老虎地圖,離線地圖包小,而且定位使用流量耗費也不大的。還有使用離線地圖+在線服務這種模式的手機地圖每次查詢都是最新的數據,畢竟你出行、無論公交、或者大樓大廈、餐廳之類的都可能有變動,這也是使用在線服務的一大優勢。這方面個人感覺老虎地圖做的也不錯,信息也比較全面了。 就是老虎地圖的導航不怎麼樣,不過也基本能用,呵呵,以上你可以給你的客戶講嘛,不用客戶說什麼就說什麼,你說可以留著最大的存儲存歌曲啊、存視頻之類的,比導航有更適用。還有要強調他買的是手機,不是導航儀。對了,老虎地圖說是可以離線定位,就是說沒有網路的情況下,在空曠的地方可以GPS定位--不在空曠的地方沒有GPS信號的 以上希望我的回答可幫助到你!!

2. qt滑鼠懸浮拖拽

1. 首先,需要設置自己的控制項是支持拖放操作的,按照如下設置即可:

setDragEnabled(true); //允許拖拽
setAcceptDrops(true); //允許放置
登錄後復制
2. 其次,我這個拖放操作是基於QTreeView來完成的,因此繼承這個QTeeView之後還需要實現startDrag()這個函數。它可以被理解成是拖放操作的入口函數。

//開始拖拽事件
virtual void stratDrag(Qt::DropActions supportedAxtions);

//這個函數可以理解為拖放操作的入口函數。當拖放開始進行時,就會發現斷點會進到這里。
void CMyTree::stratDrag(Qt::DropActions supportedAxtions)
{
QDrag* pDrag = new QDrag(this);
QMimeData* pMimeData = new QMimeData;
QModelIndex index = currentIndex();

if (pDrag && pMimeData)
{
pDrag->setMimeData(pMimeData);
pDrag->exec(Qt::MoveAction);
}
}
登錄後復制

3. 接下來,拖放操作肯定是離不開滑鼠的按壓與移動的。因此還需要實現以下幾個虛函數。

//滑鼠點擊事件
virtual void mousePressEvent(QMouseEvent *event);
//拖拽進入事件
virtual void dragEnterEvent(QDragEnterEvent* event);
//拖拽移動事件
virtual void dragMoveEvent(QDragMoveEvent* event);
//拖放事件
virtual void dropEvent(QDropEvent *event);
//滑鼠松開事件
virtual void mouseReleaseEvent(QMouseEvent *event);
//滑鼠移動事件
virtual void mouseMoveEvent(QMouseEvent *event);
//滑鼠懸停事件
virtual bool viewportEvent(QEvent *event);
登錄後復制

當一切准備工作完成後,再通過QTreeView與QStandardItemModel相結合,完成一些列的拖放操作。本例大致需求是:將葉子節點拖放到不同組織下。整個源碼如下:

//CMyTree.h
#pragma once
#include <QTreeView>
#include <QStandardItem>

class CMyTree :
public QTreeView
{
public:
CMyTree(QWidget* parent = nullptr);
protected:
//開始拖拽事件
virtual void stratDrag(Qt::DropActions supportedAxtions);
//滑鼠點擊事件
virtual void mousePressEvent(QMouseEvent *event);
//拖拽進入事件
virtual void dragEnterEvent(QDragEnterEvent* event);
//拖拽移動事件
virtual void dragMoveEvent(QDragMoveEvent* event);
//拖放事件
virtual void dropEvent(QDropEvent *event);
//滑鼠松開事件
virtual void mouseReleaseEvent(QMouseEvent *event);
//滑鼠移動事件
virtual void mouseMoveEvent(QMouseEvent *event);
//滑鼠懸停事件
virtual bool viewportEvent(QEvent *event);
private:
QStandardItem* m_pDragItem;
QStandardItem* m_pDropItem;
};
登錄後復制

//CMyTree.cpp
#include "CMyTree.h"
#include <QDrag>
#include <QMimeData>
#include <QStandardItemModel>
#include <QMouseEvent>

CMyTree::CMyTree(QWidget* parent /* = nullptr */)
: QTreeView(parent)
, m_pDragItem(nullptr)
, m_pDropItem(nullptr)
{
setDropIndicatorShown(true);
setHeaderHidden(true); //隱藏表頭
setDragEnabled(true); //允許拖拽
setAcceptDrops(true); //允許放置
}

void CMyTree::stratDrag(Qt::DropActions supportedAxtions)
{
QDrag* pDrag = new QDrag(this);
QMimeData* pMimeData = new QMimeData;
QModelIndex index = currentIndex();

if (pDrag && pMimeData)
{
pDrag->setMimeData(pMimeData);
pDrag->exec(Qt::MoveAction);
}
}

void CMyTree::mousePressEvent(QMouseEvent *event)
{
if (Qt::RightButton == event->button())
{
setDragEnabled(false);
}
else if (Qt::LeftButton == event->button())
{
setDragEnabled(true);
}
QTreeView::mousePressEvent(event);
}

void CMyTree::dragEnterEvent(QDragEnterEvent* event)
{
if (event->mimeData())
{
QStandardItemModel* pModel = (QStandardItemModel*)(this->model());
QPoint mousePos = event->pos();
QModelIndex localIndex = indexAt(mousePos);
m_pDragItem = pModel->itemFromIndex(localIndex);
QString strData = localIndex.data(Qt::DisplayRole).toString();
QRect rect = visualRect(localIndex);
event->accept();
}
}

void CMyTree::dragMoveEvent(QDragMoveEvent* event)
{
if (event->mimeData())
{
update();
event->accept();
}
}

void CMyTree::dropEvent(QDropEvent *event)
{
QStandardItemModel* pModel = (QStandardItemModel*)(this->model());
QPoint mousePos = event->pos();
QModelIndex localIndex = indexAt(mousePos);
m_pDropItem = pModel->itemFromIndex(localIndex);
QString strData = localIndex.data(Qt::DisplayRole).toString();
QRect rect = visualRect(localIndex);

//同組織下釋放沒效果
QStandardItem* pDragItemParent = m_pDragItem->parent();
QStandardItem* pDropItemParent = m_pDropItem->parent();
if (pDragItemParent == pDropItemParent)
{
return;
}
else if (pDragItemParent && pDropItemParent)
{
QStandardItem* pItem = new QStandardItem(m_pDragItem->data(Qt::DisplayRole).toString());
pDropItemParent->appendRow(pItem);
}
update();
}

void CMyTree::mouseReleaseEvent(QMouseEvent *event)
{
QTreeView::mouseReleaseEvent(event);
}

void CMyTree::mouseMoveEvent(QMouseEvent *event)
{
QTreeView::mouseMoveEvent(event);
}

bool CMyTree::viewportEvent(QEvent *event)
{
return QTreeView::viewportEvent(event);
}
登錄後復制

//CMyApp.h
#pragma once

#include <QtWidgets/QWidget>
#include <QStandardItemModel>
#include "ui_CMyApp.h"

class CMyApp : public QWidget
{
Q_OBJECT

public:
CMyApp(QWidget *parent = Q_NULLPTR);
void InitUI();

private:
Ui::CMyAppClass ui;
QStandardItemModel* m_pModel;
};
登錄後復制

//CMyApp.cpp
#include "CMyApp.h"
#include <QStandardItem>

CMyApp::CMyApp(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
m_pModel = new QStandardItemModel(ui.treeView);
InitUI();
}

void CMyApp::InitUI()
{
QStandardItem* pItem1 = new QStandardItem(QStringLiteral("法師"));
m_pModel->appendRow(pItem1);
QStandardItem* pItem1_1 = new QStandardItem(QStringLiteral("妲己"));
QStandardItem* pItem1_2 = new QStandardItem(QStringLiteral("小喬"));
QStandardItem* pItem1_3 = new QStandardItem(QStringLiteral("西施"));
pItem1->appendRow(pItem1_1);
pItem1->appendRow(pItem1_2);
pItem1->appendRow(pItem1_3);

QStandardItem* pItem2 = new QStandardItem(QStringLiteral("法刺"));
m_pModel->appendRow(pItem2);
QStandardItem* pItem2_1 = new QStandardItem(QStringLiteral("不知火舞"));
QStandardItem* pItem2_2 = new QStandardItem(QStringLiteral("貂蟬"));
QStandardItem* pItem2_3 = new QStandardItem(QStringLiteral("上官婉兒"));
pItem2->appendRow(pItem2_1);
pItem2->appendRow(pItem2_2);
pItem2->appendRow(pItem2_3);

ui.treeView->setModel(m_pModel);
}

登錄後復制

//main.cpp
#include "CMyApp.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
CMyApp w;
w.show();
return a.exec();
}

熱點內容
編程一刻 發布:2025-01-31 13:36:44 瀏覽:585
編程小草出土 發布:2025-01-31 13:33:27 瀏覽:579
如何設置伺服器屏蔽你的ip 發布:2025-01-31 13:25:58 瀏覽:243
扣扣的獨立密碼是什麼密碼 發布:2025-01-31 13:23:42 瀏覽:132
pythonlist的用法 發布:2025-01-31 12:56:15 瀏覽:130
搭建美國節點伺服器 發布:2025-01-31 12:55:27 瀏覽:858
對韓java 發布:2025-01-31 12:50:44 瀏覽:96
訪問四平 發布:2025-01-31 12:50:36 瀏覽:667
英雄聯盟伺服器廣東地址 發布:2025-01-31 12:41:49 瀏覽:382
開封愛編程 發布:2025-01-31 12:33:27 瀏覽:294