1

我将文件夹中的所有文本文件加载到 Qt 应用程序的 MainMenu 中。

void MainWindow::loadFilesToMainMenu() {
  QString pathToDir("/myfiles");

  QDirIterator it(pathToDir, QStringList() << "*.txt", QDir::Files, QDirIterator::Subdirectories);
  while (it.hasNext()) {
    QString curPathName = it.next();

    QStringList fileSegments = curPathName.split('/');
    QString curFileName = fileSegments.at(fileSegments.size() - 1);

    QAction* action = new QAction(tr(curFileName.toStdString().c_str()), this);

    action->setStatusTip(tr(curPathName.toStdString().c_str()));
    ui->menuFileList->addAction(action);

    // if new style selected?
    connect(action, SIGNAL(triggered()), this, SLOT(onLoadFile()));
  }
}

在那里,我为我的文件夹“myfiles”中的所有文件创建 QActions,并将这些操作中的每一个连接到 SLOT onLoadfile():

void MainWindow::onLoadFile() {
  QAction *action = qobject_cast<QAction *>(sender());
  if (action)
  {
    qDebug() << " onLoadFile " << action->data().toString();
  }
}

因此,每次我在 MainMenu 中选择其中一个文件时,都会触发此 SLOt,但我的调试消息显示:

加载文件 ""

例如,当我选择 /myfiles/file1.txt

onLoadFile "/myfiles/file1.txt"

我错过了什么?提前感谢

4

1 回答 1

0

@ms 的回答很好地解决了我的问题...

您应该在尝试读取数据之前使用 QAction::setData() – ms

于 2015-07-24T06:39:52.423 回答