【问题标题】:PyQt5 set qt_ntfs_permission_lookupPyQt5 设置 qt_ntfs_permission_lookup
【发布时间】:2020-07-30 23:26:08
【问题描述】:

我想使用来自 QFileInfo 的isWritable()。根据docs,您必须以某种方式将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?

【问题讨论】:

    标签: pyqt5 qfileinfo


    【解决方案1】:

    一种可能的解决方案是创建函数,在 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
    • Visual Studio
    • cmake
    git clone https://github.com/eyllanesc/qt_ntfs_permission_lookup.git
    python setup.py install
    

    在 github 操作的帮助下,我已经为某些版本的 Qt 和 python 创建了轮子,所以从 here 下载它,提取 .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()
    

    【讨论】:

      猜你喜欢
      • 2014-08-11
      • 2017-06-30
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      相关资源
      最近更新 更多