QFileOpenEvent 类

QFileOpenEvent 类提供当请求打开文件或 URL 时将被发送的事件。更多...

头文件 #include <QFileOpenEvent>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
继承自 QEvent

公共函数

QStringfile() const
QUrlurl() const

详细描述

当操作系统请求打开一个文件或 URL 时,文件打开事件将被发送到 QApplication::instance()。这是一个高级事件,它可能由用户的不同桌面环境中的不同用户操作引发;例如,在 macOS 的 Finder 中双击文件图标。

此事件仅用于通知应用程序请求。它可以安全地忽略。

注意:此类目前仅支持 macOS。

macOS 示例

为了在 macOS 上触发事件,应用程序必须配置为使操作系统知道它应该对哪些类型的文件做出响应。

例如,以下 Info.plist 文件声明,该应用程序可以作为 PNG 扩展的文件的查看器

<?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.0">
<dict>
    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>png</string>
            </array>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
        </dict>
    </array>
</dict>
</plist>

以下 QApplication 子类实现展示了如何处理 QFileOpenEvent 以打开文件,例如,在应用程序的 Dock 图标上拖放。

#include <QApplication>
#include <QDebug>
#include <QFileOpenEvent>
#include <QPushButton>

class MyApplication : public QApplication
{
public:
    MyApplication(int &argc, char **argv)
        : QApplication(argc, argv)
    {
    }

    bool event(QEvent *event) override
    {
        if (event->type() == QEvent::FileOpen) {
            QFileOpenEvent *openEvent = static_cast<QFileOpenEvent *>(event);
            const QUrl url = openEvent->url();
            if (url.isLocalFile()) {
                QFile localFile(url.toLocalFile());
                // read from local file
            } else if (url.isValid()) {
                // process according to the URL's schema
            } else {
                // parse openEvent->file()
            }
        }

        return QApplication::event(event);
    }
};

请注意,QFileOpenEvent::file() 不保证是以可用 QFile 打开的本地文件的名字。字符串内容取决于源应用程序。

成员函数文档

QString QFileOpenEvent::file() const

返回应用程序应打开的文件名。

这不一定是一个本地文件的路径。

QUrl QFileOpenEvent::url() const

返回应用程序应打开的 URL。

© 2024 The Qt Company Ltd. 本文档中包含的文档贡献归各自所有者所有。本提供的文档在GNU自由文档许可版本1.3的条款下获得许可,由自由软件基金会发布。Qt及其相关标志是芬兰及全世界其他国家的The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。