如何从Qt中的MainMenu中选择文件?

时间:2015-07-23 12:19:32

标签: qt qt5 signals-slots qt5.4 qaction

我将文件夹中的所有文本文件加载到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()));
  }
}

在那里,我为我的文件夹中的所有文件创建了QActions&#39; myfiles&#39;我将这些中的每一个连接到SLOT onLoadfile():

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

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

  

onLoadFile&#34;&#34;

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

  

onLoadFile&#34; /myfiles/file1.txt"

我错过了吗? Thanx提前

1 个答案:

答案 0 :(得分:0)

@ m.s的答案。很好地解决了我的问题......

  

在尝试读取数据之前,您应该使用QAction :: setData() - m.s