QT 拖动文件导入到qtableview的表格中的代码实例
时间: 2024-09-20 21:11:21 浏览: 76
在Qt中,使用QTableWidget接收用户通过拖放操作导入文件是一个常见的功能。以下是一个简单的代码示例,展示了如何在`mainwindow.ui`文件中有QTableWidget,并在`MainWindow`类中处理拖放事件:
首先,在`.ui`文件里设置好QTableWidget,添加一个`dropEvent()`信号连接到槽函数:
```xml
<!-- .ui 文件 -->
<TableWidget ...>
<item name="drop" row="0" column="0">
<InputMethodHints method="draganddrop"/>
</item>
</TableWidget>
```
然后在`mainwindow.h`中声明一个信号和槽:
```cpp
// mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_dropEvent(QDropEvent *event); // 拖放事件槽函数
};
```
接着在`mainwindow.cpp`中实现`on_dropEvent()`函数:
```cpp
// mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
ui->tableView->setAcceptDrops(true); // 设置QTableView接受拖放
}
void MainWindow::on_dropEvent(QDropEvent *event)
{
if (event->source() == this && event->mimeData()->hasUrls()) {
foreach (QUrl url, event->mimeData()->urls()) {
QFile file(url.toLocalFile());
if (file.exists()) {
QTableWidgetItem *item = new QTableWidgetItem(file.fileName());
item->setData(Qt::UserRole, QVariant::fromValue(file)); // 存储额外信息如文件
ui->tableView->insertRow(ui->tableView->rowCount(), item);
}
}
event->acceptProposedAction(); // 接受拖放动作
} else {
event->ignore(); // 如果不是从这个窗口拖来的,忽略
}
}
```
在这个例子中,当用户拖动文件到QTableWidget上时,会创建一个TableWidgetItem并将其名字作为文本插入到表中,同时存储了原始文件对象。注意,这里假设你已经设置了窗体的`drop`区域来触发`on_dropEvent()`。
阅读全文