0

以前は、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」という奇妙な文字に変わります。

理由はありますか?

4

1 に答える 1