QTreeView和QTreewidget的区别

QTreeView和QTreewidget的区别,第1张

都可以的呀。你看看帮助就知道了。

这个是应用了模型/视图的编程方法,将数据和显示分开了。

QTreeView是一个视图类,你需要手动给其指定模型类,才能够显示数据。

QTreewidget是提供了一个默认模型的部件,比较方便。

就灵活性来讲,QTreeView要灵活些。

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相结合,完成一些列的拖放 *** 作。本例大致需求是:将叶子节点拖放到不同组织下。整个源码如下:

//CMyTreeh

#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;

};

登录后复制

//CMyTreecpp

#include "CMyTreeh"

#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 = localIndexdata(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 = localIndexdata(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);

}

登录后复制

//CMyApph

#pragma once

#include <QtWidgets/QWidget>

#include <QStandardItemModel>

#include "ui_CMyApph"

class CMyApp : public QWidget

{

Q_OBJECT

public:

CMyApp(QWidget parent = Q_NULLPTR);

void InitUI();

private:

Ui::CMyAppClass ui;

QStandardItemModel m_pModel;

};

登录后复制

//CMyAppcpp

#include "CMyApph"

#include <QStandardItem>

CMyApp::CMyApp(QWidget parent)

: QWidget(parent)

{

uisetupUi(this);

m_pModel = new QStandardItemModel(uitreeView);

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);

uitreeView->setModel(m_pModel);

}

登录后复制

//maincpp

#include "CMyApph"

#include <QtWidgets/QApplication>

int main(int argc, char argv[])

{

QApplication a(argc, argv);

CMyApp w;

wshow();

return aexec();

}

怎么将一个资料夹里面的exe档案

exe档案是可执行档案,简单讲将档案打包为exe档案,是没有意义的。

普通的任意档案,比如mp3档案或者txt文字档案,只记录有资料,没有可以执行的程式码,显然不可能直接转换成exe可执行档案的。

唯一常用的,就是用winrar将若干档案打包为自解压的压缩档案,其型别确实是exe,但是双击只是执行解压 *** 作而已。

怎么杀尽资料夹变EXE病毒,但要保留资料夹里面的档案,

手工清除方法1、结束病毒程序。开启超级巡警,选择程序管理功能,终止程序XP-290F2C69EXE(后8位随机),winvcregexe,2080exe(随机名)。

2、删除病毒在System32生成的以下档案:

run dp1fne eAPIfne interfne krnlnfnr ogdll ogedt RegExfnr fne specfne uldll XP-290F2C69EXE winvcregexe 2080EXE(随机名)

3、删除病毒的启动项,删除以下启动项:

“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”里的XP-290F2C69EXE(后8位随机);

“C:\Documents and Settings\Administrator\「开始」选单\程式\启动” 里的“ lnk”。

4、点选“开始”---“执行”----输入“cmd” ,进入命令提示符,然后进入你U盘所在的根目录,具体 *** 作如下,比如你的U盘碟符位G,那么依次执行如下命令(第一行的“G:”为你的U盘碟符):

cd /d G:

for /f "delims=" %a in ('dir /b /ad') do (del /a /f /q "%aexe")

for /f "delims=" %a in ('dir /b /adh') do (attrib -s -h -r "%a")

最简单的方法 装个360 安全卫士 杀一下毒 就可以 了

jdk里面的bin资料夹里面的exe档案是用什么语言编写的?

不是纯java的 还有C

QT treewideget怎么实现显示一个档案及资料夹里面的子资料夹

这个可以使用QTreeview和QFileSystemModel:官方文件例子如下:

It is simple to construct a tree view displaying data from a model In the following example, the contents of a directory are supplied by a QFileSystemModel and displayed as a tree:

QFileSystemModel model = new QFileSystemModel;

model->setRootPath(QDir::currentPath());

QTreeView tree = new QTreeView(splitter);

tree->setModel(model);

如果要使用QTreeWidget 就要使用QFileInfo对资料夹进行遍历,挨个新增到QTreeWidget中。有关QFileInfo请参考帮助文件::qt-project/doc/qt-48/qfileinfo

如何将一个资料夹里面的档案统一另存为txt文件

如果想把网上CHM、Html格式的电子书转换成TXT图书,要借助一下工具软体,如eTextWizard(下载地址::qwerks/download/4616/etexizardexe)。假设要把一本CHM格式的电子书转换成TXT格式,在eTextWizard中选择“反编译CHM”选项,设定好反编译CHM文件的来源和编译后的储存路径,选择“开始反编译CHM”文件。完成后CHM文件原有的各个章节被分割并单独储存为几个Html格式的档案,此时在“文字转换器”选项介面找到编译后的这几个Html格式的档案,在右边的格式转换型别中选择“Html2Txt”,即可把Html文件转换成TXT格式。

提示:如果是Html档案转换为TXT文件,则省去反编译的步骤。

转换后的TXT也是根据章节分成了多个文件,使用文件合并工具ReadBook(下载地址::readbook/homepage/rb_downloadhtm)可以把多个Html和TXT文件合并成一个TXT。在ReadBook中选择“档案”选单下的“合并档案”开启“档案列表”对话方块,从中挑选要合并的TXT或者Html档案,就可以把多个文件合并成一个TXT, *** 作很方便。

提示:用ReadBook工具合并Html档案为TXT文字时,可以省略Html转换TXT的步骤。

怎么在DOS里面找到资料夹里所有的EXE档案

在DOS里进入该资料夹,输入以下命令:dir exe

如果档案多,则使用:dir exe /p

winzip将资料夹打包,资料夹里有很多资料夹,怎样将里面的资料夹去掉,只剩档案

进我的电脑定位到那个资料夹,然后按F3调出搜寻,在搜寻内容上填上"",引号里面的东西选中"高阶选项"里面的搜寻子资料夹和搜寻隐藏档案然后点搜寻这样会把所有档案都搜寻出来,就选中除了资料夹之外的档案,就可以打包了

win7使用者资料夹里面多出一个我的文件 这个资料夹里面和使用者资料夹里面的档案一样 求去掉

从开始选单点 文件 进去,新建个资料夹,然后把两个我的文件里面没有那个新建的资料夹的那个我的文件删掉,以后就没事了应该

怎样把资料夹里面的资料夹移出来?

游标移动到 音乐 资料夹 选项 按钮 移动 然后进入到你要放的资料夹或者根目录 选项 贴上

逆战资料夹里面的DirectX这个资料夹在哪

那是声音档案 可以去官网下载里找到重新下载

以上就是关于QTreeView和QTreewidget的区别全部的内容,包括:QTreeView和QTreewidget的区别、qt鼠标悬浮拖拽、怎么将一个资料夹里面的exe档案等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10217292.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存