QFileDialog unicode目录不可用

时间:2017-03-08 19:47:49

标签: c++ qt unicode qfiledialog

我正在尝试使用QFileDialog获取文件路径,编译很顺利,但是当我从应用程序打开对话框时,弹出这个窗口:

enter image description here

看起来它缺少路径上的字母“á”。

即使我尝试从快速访问中打开桌面,它也会弹出(顺便说一下。我使用的是Windows 10 64位)

Qt版本:5.7.0

编译器:Microsoft Visual C ++编译器14.0(amd64)

有人可以帮我解决一下吗?

这是我的代码:

// Header:
#include <QMainWindow>
#include <QLineEdit>
#include <QFileDialog>

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_actionOpen_triggered()
{
    QString file = QFileDialog::getOpenFileName(this, tr("Open ui file"), "c://", tr("Qt UI Files (*.ui)"));
    ui->lineEdit->setText(file);
}

1 个答案:

答案 0 :(得分:2)

我同意您最后的陈述,即系统设置中的某些内容可能有误。

我使用以下小样本应用程序进行测试:

// standard C++ header:
#include <iostream>
#include <string>

// Qt header:
#include <QApplication>
#include <QFileDialog>
#include <QGridLayout>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QMainWindow>
#include <QPushButton>

using namespace std;

int main(int argc, char **argv)
{
  cout << QT_VERSION_STR << endl;
  // main application
#undef qApp // undef macro qApp out of the way
  QApplication qApp(argc, argv);
  // setup GUI
  QMainWindow qWin;
  QGroupBox qBox;
  QGridLayout qGrid;
  QPushButton qBtn(QString::fromLatin1("File Dialog"));
  qGrid.addWidget(&qBtn, 0, 0, 1, 2);
  QLabel qLbl(QString::fromLatin1("File:"));
  qGrid.addWidget(&qLbl, 1, 0);
  QLineEdit qTxt;
  qGrid.addWidget(&qTxt, 1, 1);
  qBox.setLayout(&qGrid);
  qWin.setCentralWidget(&qBox);
  qWin.show();
  // install signal handlers
  QObject::connect(&qBtn, &QPushButton::clicked,
    [&qTxt](bool) {
#if 0 // how I do it usually...
    string file = QFileDialog::getOpenFileName(&qTxt,
      QString::fromUtf8("Open File"),
      QString(),
      QString::fromUtf8("Text File (*.txt);;All Files (*)")
      ).toUtf8();
    qTxt.setText(QString::fromUtf8(file.c_str()));
#else // using QString only...
    QString file = QFileDialog::getOpenFileName(&qTxt,
      QString::fromUtf8("Open File"),
      QString(),
      QString::fromUtf8("Text File (*.txt);;All Files (*)")
      );
    qTxt.setText(file);
#endif
    });
  return qApp.exec();
}

我在Windows 10(64位)上使用VS2013,Qt 5.6版进行了编译。

我在我的软件std::string中使用UTF-8编码。 (因此,字符串可以在库中使用而不依赖于Qt或任何其他GUI。)但是,我使用QString进行了相同的测试。

Snapshot of testQFileDialog.exe