MTP デバイスの FS のファイル ブラウザーを作成するアプリを作成しています。最初のバージョンを作成しましたが、より良いデザインにすることができると思います。
現在、ファイルを取得し、フォルダーを取得し、ファイルを削除するために内部で異なるメソッドを備えたクラス mtp を提供する mtp_wrapper.cpp を作成しました...
たとえば、私のメインウィンドウ クラスには以下が含まれます。
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にはstore_list、set_list、およびそれを再利用するメソッドがあることは知っていますが、現在QtとC ++を使用しています
メインウィンドウを mtp から切断できますか? 最良の方法は、リスト/モデルを mtp 部分で提出することです。mtp デバイスをスキャンするために使用されるメソッドを作成しました。ツリー メソッドを介してメインウィンドウは、このリスト/モデルを再利用してデータを表示します。