treewidget을 기반으로하는 앱에 기능을 추가하는 데 사용됩니다.Char * 값을 가져 오려고 할 때 손상됨/설정
항목을 마우스 오른쪽 버튼으로 클릭하면 USB를 통해 FS에서 폴더를 만들 수 있습니다.
주로 TreeWidget에서 항목을 선택할 때 그 이름을 가져 와서 폴더인지 확인합니다. 그렇다면 자식을 만들고 새 폴더를 추가하고 파일을 저장합니다.
, 나는이를 사용하고있어 FS에서 수행 폴더를 생성합니다 클릭 동작을 떠날 때이 코드가 CONNECT에 연결되어
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()));
}
및 폴더를 선택 추가합니다.
이름을 바꿀 때 대화 상자를 사용하지 않기 위해이 작업을 수행했습니다. 새 폴더라는 항목을 추가 할 때 편집중인 항목을 추가하고 사용자가 변경할 수 있도록합니다. 사용자가 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);
저의 문제는 부모에게 엄밀함 이름이 포함되어 있지 않습니다.
내가
setParentFolder(parent_folder_name);
을 사용하고의 getParent를 사용하는 경우
void TreeView::setParentFolder(char *name) {
this->ParentFolder = name;
}
char *TreeView::getParentFolder() {
return this->ParentFolder;
}
아래로
getParentFolder();
두
이 선언되고 사용하여 다시 얻을 onAddFolderAction에서을을 backuping있어의 값 반환이 올바르지 않습니다. 그러나 가치가 더 일찍 손상된 것으로 보인다. 단계별 setParentFolder, "XFZV"이상한 caracters에 PARENT_FOLDER_NAME 변화에 이동할 때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"를 포함하지만 : AddFolderACtion에의
는(), 내가했다.왜 그런가? 코드
else {
QString str = item[0]->text(0);
QByteArray latin_str = str.toLatin1();
parent_folder_name = latin_str.data();
}
setParentFolder(parent_folder_name);
변수 latin_str
에서
디버거를 사용해 보셨습니까? – user657267
1 단계, [문서] (http://qt-project.org/doc/qt-4.8/qbytearray.html#data)를 읽으십시오 : "포인터는 바이트 배열이 재 할당되거나 소멸되지 않는 한 유효합니다 . " – molbdnilo