0
我試圖自動向QLineEdit
中的有效文件路徑添加反斜槓,該路徑用於顯示QFileSystemModel
的當前路徑。QLineEdit:自動將反斜槓添加到目錄名稱
的代碼如下:
fileSystem = new QFileSystemModel;
fileSystem->setRootPath(QObject::tr("C:\\"));
QCompleter* fileSystemCompleter = new QCompleter(fileSystem);
fileSystemCompleter->setCaseSensitivity(Qt::CaseInsensitive);
fileTree = new QDeselectableTreeView();
fileTree->setModel(fileSystem);
fileTree->setRootIndex(fileSystem->index(fileSystem->rootPath()));
connect(fileTree, &QTreeView::clicked, [&] (QModelIndex index)
{
QString toAppend("");
if (fileSystem->isDir(index))
{
toAppend = '/';
}
fileSystemPathEdit->setText(fileSystem->filePath(index)+toAppend);
});
// path line edit
fileSystemPathEdit = new QLineEdit(fileSystem->rootPath());
fileSystemPathEdit->setPlaceholderText("Path...");
fileSystemPathEdit->setCompleter(fileSystemCompleter);
connect(fileSystemPathEdit, &QLineEdit::editingFinished, [&]()
{
// jump to that location
qDebug() << fileSystemPathEdit->text();
QModelIndex index = fileSystem->index(fileSystemPathEdit->text());
qDebug() << index;
fileTree->setExpanded(index,true);
fileTree->setCurrentIndex(index);
// CLOSE IF EMPTY
if (fileSystemPathEdit->text().isEmpty())
{
fileTree->collapseAll();
fileSystemPathEdit->setText(fileSystem->rootPath());
}
// append slashes to dirs
else if (fileSystem->isDir(index) && index.isValid())
{
qDebug() << "it's a dir";
if (!fileSystemPathEdit->text().endsWith('/',Qt::CaseInsensitive))
{
qDebug() << "added slash";
fileSystemPathEdit->setText(fileSystemPathEdit->text().append('/'));
qDebug() << fileSystemPathEdit->text();
}
}
this->update();
});
運行的代碼時,我得到以下輸出:
"C:/export/home"
QModelIndex(0,0,0x3adb840,QFileSystemModel(0x1d9b7c0))
it's a dir
added slash
"C:/export/home/"
,當我推從lineEdit內輸入關鍵,這工程確定,但如果文本是由QCompleter
設置的,我仍然得到相同的調試輸出,顯示文本已被更改,但斜線未出現在lineEdit中。 QCompleter
以某種方式取消設置文本?
如果完成後按Enter鍵會怎麼樣?那麼會附加斜線嗎? – Ezee 2014-10-02 08:13:42
對不起,我知道這是不相關的,但是你真的需要在最終的應用程序中翻譯「C:\\」嗎? Windows根路徑與用戶的語言無關。 – Antwane 2014-10-02 08:32:37
不,這只是我編寫qt代碼時的一種習慣。無論如何,C盤只是一個佔位符,在最終的應用程序中將是一個配置設置。 – 2014-10-02 10:34:23