1

我正在编写一个应用程序来创建 MTP 设备的 FS 的文件浏览器。我已经完成了第一个版本,但我认为我可以将其设计得更好。

目前,我写了一个 mtp_wrapper.cpp,它提供了一个类 mtp,里面有不同的方法来获取文件、获取文件夹、删除文件......

例如,我的主窗口类包含:

void MainWindow::DisplayTree(uint32_t index, uint32_t parent)
{
    LIBMTP_file_t *files;
    LIBMTP_file_t *file;

    MyTree->clear();

  //  files = m_device.GetFileAndFolder(index);
    if(files == NULL)
        return;

    file = files;
    while(file != NULL && file->parent_id == parent) {
        LIBMTP_file_t *oldfile;

        QTreeWidgetItem* item = new QTreeWidgetItem();
        if(strcmp(file->filename,"Android") == 0)
            item->setText(0,"AneedA");
        else
            item->setText(0,file->filename);

        if (file->filetype == LIBMTP_FILETYPE_FOLDER) {
            item->setText(1, "--");
            item->setText(2, "--");
            DisplaySubTree(item, file->item_id);
        }
        else {
            const QDateTime dt = QDateTime::fromTime_t(file->modificationdate);
            const QString textdate = dt.toString( Qt::TextDate );
            item->setText(1,textdate);
            item->setText(2, QString::number(file->filesize));
        }
        MyTree->addTopLevelItem(item);
        oldfile = file;
        file = file->next;
#if 0
        m_device.DestroyFile(oldfile);
#endif
    }
}

第一个调用是使用 (0,0) 作为参数来显示整个树。但我认为这还不够聪明。DisplayTree 方法应该只调用一个列表,不需要调用 mtp_api。

我知道 gtk 有一些方法来存储列表、设置列表和重用它,但我目前在 Qt 和 C++ 下

任何想法,我可以断开主窗口与 mtp 的连接吗?最好的办法是让 mtp 部分提交列表/模型。我创建了一个用于扫描 mtp 设备的方法,并且通过树方法的主窗口将重用此列表/模型来显示数据。

4

0 回答 0