加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 接受停靠图标上的文件删除

发布时间:2020-12-16 06:50:26 所属栏目:百科 来源:网络整理
导读:我在我的MacOs(10.11)应用程序中使用Qt C,但我无法实现它接受filedrop. 这是Info.plist文件: ?xml version="1.0" encoding="UTF-8"?!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"plist version="
我在我的MacOs(10.11)应用程序中使用Qt C,但我无法实现它接受filedrop.

这是Info.plist文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.1">
<dict>
    <key>NSPrincipalClass</key>
    <string>NSApplication</string>
    <key>CFBundleIconFile</key>
    <string></string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleGetInfoString</key>
    <string>Created by Qt/QMake</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleExecutable</key>
    <string>QParser</string>
    <key>CFBundleIdentifier</key>
    <string>com.yourcompany.QParser</string>
    <key>NOTE</key>
    <string>This file was generated by Qt/QMake.</string>
        <key>CFBundleDocumentTypes</key>
            <array>
                    <dict>
                            <key>CFBundleTypeExtensions</key>
                            <array>
                                <string>csv</string>
                                <string>public.comma-separated-values-text</string>
                                <string>comma-separated-values-text</string>
                                <string>txt</string>
                                <string>text</string>
                            </array>
                            <key>CFBundleTypeRole</key>
                            <string>Editor</string>
                    </dict>
            </array>
  <key>NSPrincipalClass</key>
  <string>NSApplication</string>

</dict>
</plist>

在我的主窗口上,我安装了一个eventFilter,但事件没有被触发(它确实进入了事件过滤器,但没有进入事件QEvent :: FileOpen).

我检查了这些链接,但没有帮助:

> Registering the File Types Your App Supports (Apple Doc)
> mac qt app in the dock does not respond to file drop (forum.qt.io)
> Dropping Files onto Dock Icon in Cocoa
> Qt 4.8.5 Mac Handle file dropping on dock icon

这是我的MainWindows.cpp:

#include <QMessageBox>
#include <QProcess>
#include <QFileOpenEvent>

#include "MainWindow.h"
#include "ui_MainWindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setAcceptDrops(true);
    this->installEventFilter(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_goButton_clicked()
{
    checkFile();
}

bool MainWindow::eventFilter(QObject * sender,QEvent *event)
{
    switch (event->type()) {
    case QEvent::FileOpen:
    {
        event->accept();

        qDebug() << "Event File Open";
        ui->lineEdit->setText(static_cast<QFileOpenEvent*>(event)->file());
        checkFile();

        break;
    }
    case QEvent::DragEnter:
    {
        event->accept();
        qDebug() << "Event DragEnter";
        break;
    }
    case QEvent::Drop:
    {
        event->accept();

        const QMimeData* mimeData = static_cast<QDropEvent *>(event)->mimeData();
        qDebug() << "Event Drop";
        // If there is one file (not more) we open it
        if (mimeData->urls().length() == 1) {
            QString fileName = mimeData->urls().first().toLocalFile();
            qDebug() << fileName;
        }
        break;
    }
    default:
        return false;
    }
    return true;
}
void MainWindow::checkFile()
{
    // Some stuff
}

我应该在哪里挖掘才能使它有效?

解决方法

看起来你正试图在QMainWindow上处理QEvent :: FileOpen事件,但事件被发送到QApplication :: instance(),因此你想要安装事件过滤器.

从Qt documentation:

File open events will be sent to the QApplication::instance() when the operating system requests that a file or URL should be opened.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读