Qt 小例子学习48 - 在combobox内部拖放带listwidget

2024-04-13 15:08

本文主要是介绍Qt 小例子学习48 - 在combobox内部拖放带listwidget,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qt 小例子学习48 - 在combobox内部拖放带listwidget

ListWidget.h

#ifndef LISTWIDGET_H
#define LISTWIDGET_H#include <QListWidget>class ListWidget : public QListWidget
{Q_OBJECT
public:ListWidget(QWidget *parent = 0);void dropEvent(QDropEvent *event);protected:void mouseMoveEvent(QMouseEvent *event);
};
#endif // LISTWIDGET_H

ListWidget.cpp

#include "listwidget.h"#include <QComboBox>
#include <QDropEvent>ListWidget::ListWidget(QWidget *parent) : QListWidget(parent)
{setDragEnabled(true);setAcceptDrops(true);setDropIndicatorShown(true);setDefaultDropAction(Qt::MoveAction);
}void ListWidget::dropEvent(QDropEvent *event)
{if (event->dropAction() == Qt::MoveAction && event->source()){ListWidget *listWidget = qobject_cast<ListWidget *>(event->source());if (!listWidget)return;QList<QPersistentModelIndex> pIndexes;for (QModelIndex index : listWidget->selectedIndexes()){pIndexes << QPersistentModelIndex(index);}std::sort(pIndexes.begin(), pIndexes.end());QListWidgetItem *item = itemAt(event->pos());int rowStart = item ? row(item) : count();for (QPersistentModelIndex pindex : pIndexes){int r = QModelIndex(pindex).row();QComboBox *input = qobject_cast<QComboBox *>(listWidget->itemWidget(listWidget->item(r)));QComboBox *output;if (input){// move data to QComboBoxoutput = new QComboBox;for (int i = 0; i < input->count(); i++){output->addItem(input->itemText(i));output->setCurrentText(input->currentText());}}QListWidgetItem *it = listWidget->takeItem(r);insertItem(rowStart, it);if (input)setItemWidget(it, output);}setState(QAbstractItemView::NoState);}
}void ListWidget::mouseMoveEvent(QMouseEvent *event)
{setState(QAbstractItemView::DraggingState);QListWidget::mouseMoveEvent(event);
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QComboBox>
#include <QDir>
#include <QDirIterator>
#include <QFileInfoList>
#include <QListWidget>#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QDir dir(":/icons");QFileInfoList fileInfoList =dir.entryInfoList(QDir::AllEntries | QDir::Dirs | QDir::NoDotAndDotDot);for (const QFileInfo &finfo : fileInfoList){QIcon icon;icon.addFile(finfo.absoluteFilePath(), QSize(), QIcon::Normal, QIcon::Off);QListWidgetItem *item = new QListWidgetItem;item->setIcon(icon);ui->listwidget1->insertItem(ui->listwidget1->count(), item);QComboBox *box = new QComboBox;box->addItems(QStringList{finfo.baseName(), "item1", "item2", "item3"});ui->listwidget1->setItemWidget(item, box);QSize size = item->sizeHint();size.setHeight(box->sizeHint().height());item->setSizeHint(size);}
}MainWindow::~MainWindow() { delete ui; }

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui
{
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

在这里插入图片描述

这篇关于Qt 小例子学习48 - 在combobox内部拖放带listwidget的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900478

相关文章

Qt 中 isHidden 和 isVisible 的区别与使用小结

《Qt中isHidden和isVisible的区别与使用小结》Qt中的isHidden()和isVisible()方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操... 目录1. 基础概念2. 区别清见3. 实际案例4. 注意事项5. 总结1. 基础概念Qt 中的 isHidd

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要