1

我想isWritable()从 QFileInfo 使用。根据文档,您必须以某种方式设置qt_ntfs_permission_lookup为 1 才能在 Windows 上获得有意义的结果。用于此的 C++ 代码是

extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
qt_ntfs_permission_lookup++; // turn checking on
qt_ntfs_permission_lookup--; // turn it off again

如何将 extern 语句“翻译”成 Python?

4

1 回答 1

2

一种可能的解决方案是创建函数,在 C++ 中更改该变量的状态并将其导出到 python。要将 C++ 函数导出到 python,有 pybind11、SWIG、sip、shiboken2 等选项。

在这种情况下,使用 pybind11 实现一个小库

#include <pybind11/pybind11.h>
#include <pybind11/stl.h>

namespace py = pybind11;

#ifdef Q_OS_WIN
QT_BEGIN_NAMESPACE
extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
QT_END_NAMESPACE
#endif

PYBIND11_MODULE(qt_ntfs_permission, m) {

    m.def("enable", [](){
#ifdef Q_OS_WIN
        qt_ntfs_permission_lookup = 1;
#endif
    });      
    m.def("disable", [](){
#ifdef Q_OS_WIN
        qt_ntfs_permission_lookup = 0;
#endif
    });      

#ifdef VERSION_INFO
    m.attr("__version__") = VERSION_INFO;
#else
    m.attr("__version__") = "dev";
#endif
}

您可以按照以下步骤安装它:

要求:

  • Qt5
  • 视觉工作室
  • 制作
git clone https://github.com/eyllanesc/qt_ntfs_permission_lookup.git
python setup.py install

另外在 github 操作的帮助下,我为某些版本的 Qt 和 python 创建了轮子,所以从这里下载它,提取 .whl 并运行:

python -m pip install qt_ntfs_permission-0.1.0-cp38-cp38-win_amd64.whl

然后你运行它:

from PyQt5.QtCore import QFileInfo

import qt_ntfs_permission

qt_ntfs_permission.enable()
qt_ntfs_permission.disable()
于 2020-07-31T02:58:12.493 回答