c – 接受停靠图标上的文件删除
我在我的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) 这是我的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:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |