以前は、treewidget に基づいてアプリに機能を追加していました。
アイテムを右クリックすると、FS over USB を使用してフォルダーを作成できます。
主に、TreeWidget で項目を選択すると、その名前を取得し、それがフォルダーかどうかを確認し、そうであれば、子を作成して新しいフォルダーを追加し、その名前をファイルします。
FSでフォルダーの作成を行うには、これを使用しています:
void TreeView::onAddFolderAction() {
char *parent_folder_name;
QList<QTreeWidgetItem *> item;
bool isFolder;
item = this->selectedItems();
if (item.empty())
parent_folder_name = NULL;
else {
QString str = item[0]->text(0);
QByteArray latin_str = str.toLatin1();
parent_folder_name = latin_str.data();
}
setParentFolder(parent_folder_name);
if(!item.empty())
isFolder = m_device.isParentFolder(parent_folder_name);
if(isFolder == false)
return;
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0, "New Folder");
child->setText(1, "--");
child->setText(2, "--");
child->setFlags(child->flags() | Qt::ItemIsEditable);
if(!item.empty()) {
item[0]->addChild(child);
item[0]->setExpanded(true);
}
else
addTopLevelItem(child);
this->editItem(child);
this->setCurrentItem(child);
connect(this, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(onTreeItemChanged()));
}
このコードは、アクションを左クリックしてフォルダーの追加を選択すると、CONNECT に接続されます。
名前を変更するときにダイアログ ボックスの使用を避けるためにこれを行いました。私がやっていることは、新しいフォルダーという名前のアイテムを追加し、編集可能にして、ユーザーが変更できるようにすることです。ユーザーが Enter キーを押すと、itemChanged シグナルがトリガーされ、onTreeItemChanged が開始されます。
QList<QTreeWidgetItem *> items;
bool isFolderCreated;
items = this->selectedItems();
QString str = items[0]->text(0);
QByteArray latin_str = str.toLatin1();
char *newFolder = latin_str.data();
char *parent = getParentFolder();
isFolderCreated = m_device.CreateFolder(newFolder, parent);
私の問題は、親に権利の名前が含まれていないことです。
を使用してonAddFolderActionでバックアップしています
setParentFolder(parent_folder_name);
を使用して元に戻します
getParentFolder();
どちらも以下のように宣言されています
void TreeView::setParentFolder(char *name) {
this->ParentFolder = name;
}
char *TreeView::getParentFolder() {
return this->ParentFolder;
}
getParent を使用すると、返される値が正しくありません。しかし、値が以前に破損しているようです。
AddFolderACtion() で、私は持っていました:
else {
QString str = item[0]->text(0);
QByteArray latin_str = str.toLatin1();
parent_folder_name = latin_str.data();
}
setParentFolder(parent_folder_name);
parent_folder_name には「BLABLA」が含まれていますが、setParentFolder で段階的に移動すると、parent_folder_name が「XFZV」という奇妙な文字に変わります。
理由はありますか?