【问题标题】:Getting full path from QListWidget从 QListWidget 获取完整路径
【发布时间】:2015-12-15 06:19:26
【问题描述】:

我有 2 个 listwidget,我们称它们为 listwidgetinput 和 listwidgetoutput。我在 listwidgetinput 上有很多文件(只有文件名)。在将文件名添加到 listwidgetinput 之前,我会修剪文件名,例如it.fileName()。我将选定的文件传输到 listdigetoutput,例如:

QList <QListWidgetItem*> items=ui->listWidgetinput->selectedItems();
for(int j=0;j<items.count();j++)
{
list= items.at(j)->text();
ui->listWidgetOutput->insertItem(j,list);

传输文件后,我可以获得所有文件的路径吗?如果是,如何?

编辑:整个路径可用的代码。

QString Dir, Type;
QStringList Files;
Qlistwidget wid

if (index==0)
  {
    Dir.append(C:\desktop....);
    type.append(".txt")
    wid = ui->listwidgetinput_txt;
    }
if (index ==1)
  {
    Dir.append(C:\desktop....);
    type.append(".doc")
    wid = ui->listwidgetinput_doc
    }
QDirIterator it(Dir, QStringList() << Type, QDir::Files, QDirIterator::Subdirectories);
while (it.hasNext())
    {
        it.next();
        
        Files.append(it.fileName());
      }
wid->additems(Files);

【问题讨论】:

  • 请添加更多代码...尤其是您仍然拥有完整路径的那段代码。
  • 像你问的那样添加。 @hyde

标签: c++ qt qlistwidget


【解决方案1】:

在创建项目时使用QListWidgetItem::setData() 传递额外的“不可见”属性,例如完整路径:

auto item = new QListWidgetItem;
item->setText(fileInfo.fileName());
item->setData(Qt::UserRole, fileInfo.absoluteFilePath());
...

稍后您可以通过QListWidgetItem::data()检索它:

const auto fullPath = item->data(Qt::UserRole).toString();

【讨论】:

  • 为什么不能更改wid-&gt;additems(Files);周围的代码?这是一个纯 UI 的东西,后端跟它有什么关系?
  • 我试了一下,对不起,我只是一个初学者。所以这是你要求我做的吗? QDirIterator it(myDir, QStringList() &lt;&lt; myType, QDir::Files, QDirIterator::Subdirectories);&lt;br/&gt; auto item = new QListWidgetItem; &lt;br/&gt; while (it.hasNext()){ &lt;br/&gt; it.next();&lt;br/&gt; item-&gt;setText(it.fileName()); &lt;br/&gt; item-&gt;setData(Qt::UserRole, it.filePath()); &lt;br/&gt; myWidget-&gt;addItems(item);
  • 您需要在循环内创建项目(每次迭代一个项目)并使用 addItem,而不是 addItems。但除此之外,是的,这就是我的想法。
  • 谢谢,我仍然停留在路径提取部分。为什么我必须使用 const auto ?
  • 你不必使用 auto,如果你更喜欢的话,你也可以直接输入 QString。 (或者你不能使用 C++11)。
猜你喜欢
  • 2011-12-11
  • 2014-12-08
  • 2010-10-14
  • 2018-08-13
  • 2017-03-16
  • 1970-01-01
  • 2018-04-13
  • 2013-06-13
相关资源
最近更新 更多