作者:手机用户2502908275 | 来源:互联网 | 2023-08-15 17:16
FileIOImplementationFileIO实现RemembertheFileIOAPIwewanttocreateshouldlooklikethis.记住我们要创
FileIO Implementation
FileIO实现
Remember the FileIO
API we want to create should look like this.
记住我们要创建的FileIO API应该是这样的。
class FileIO : public QObject {...Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)...
public:Q_INVOKABLE void read();Q_INVOKABLE void write();...
}
We will leave out the properties, as they are simple setters and getters.
我们将省略这些属性,因为它们是简单的setter和getter。
The read method opens a file in reading mode and reads the data using a text stream.
read方法以读取模式打开文件,并使用文本流读取数据。
void FileIO::read()
{if(m_source.isEmpty()) {return;}QFile file(m_source.toLocalFile());if(!file.exists()) {qWarning() <<"Does not exist: " <}
When the text is changed it is necessary to inform others about the change using emit textChanged(m_text)
. Otherwise, property binding will not work.
当文本发生更改时&#xff0c;有必要使用emit textChanged&#xff08;m_text&#xff09;通知其他人更改。否则&#xff0c;属性绑定将无法工作。
The write method does the same but opens the file in write mode and uses the stream to write the contents of the text
property.
write方法也会这样做&#xff0c;但会以写入模式打开文件&#xff0c;并使用流写入文本属性text
的内容。
void FileIO::write()
{if(m_source.isEmpty()) {return;}QFile file(m_source.toLocalFile());if(file.open(QIODevice::WriteOnly)) {QTextStream stream(&file);stream <}
To make the type visible to QML, we add the QML_ELEMENT
macro just after the Q_PROPERTY
lines. This tells Qt that the type should be made available to QML. If you want to provide a different name than the C&#43;&#43; class, you can use the QML_NAMED_ELEMENT
macro.
为了使类型对QML可见&#xff0c;我们在Q_PROPERTY
行之后添加QML_ELEMENT
宏。这会告诉Qt应该将该类型提供给QML。如果你想提供一个不同于C&#43;&#43;类的名字&#xff0c;你可以使用QML_NAMED_ELEMENT
宏。
TODO TODO TODO
Do not forget to call make install
at the end. Otherwise, your plugin files will not be copied over to the qml folder and the qml engine will not be able to locate the module.
不要忘记在最后调用make install。否则&#xff0c;插件文件将不会复制到qml文件夹&#xff0c;qml引擎将无法找到该模块。
TODO TODO TODO
TIP
注
As the reading and writing are blocking function calls you should only use this FileIO
for small texts, otherwise, you will block the UI thread of Qt. Be warned!
由于读写操作会阻止函数调用&#xff0c;所以只能将此FileIO用于小文本&#xff0c;否则会阻止Qt的UI线程。小心&#xff01;
示例源码下载