我正在尝试使用 Qt 编写一个简单的 C++ 代码来获取文件夹的路径。
我从 this 得到代码回答并稍微调整一下以适应我想要的。我的问题是它标记了我的“this”声明,说我的类与“QWidget *”参数类型不兼容。
#include <iostream>
#include <qt5/QtWidgets/qfiledialog.h>
using namespace std;
class TCC {
public:
string openFile();
};
string TCC::openFile()
{
QFileDialog::getOpenFileName(this, tr("Open Document"), QDir::currentPath(), tr("Document files (*.doc *.rtf);;All files (*.*)"), 0, QFileDialog::DontUseNativeDialog);
QString filename = QFileDialog::getOpenFileName(
this,
tr("Open Document"),
QDir::currentPath(),
tr("Document files (*.doc *.rtf);;All files (*.*)"));
if (!filename.isNull())
{
qDebug(filename.toUtf8());
}
return filename.toUtf8().constData();
}
int main()
{
TCC tcc;
cout << tcc.openFile();
}
最佳答案
您的代码中有几个错误:
QFileDialog
需要一个QWidget
或一个 nullptr 作为第一个参数。tr()
是一个 QObject 方法,既然没有,你必须使用QObject::tr()
。- 要将
QString
转换为std::string
,您必须使用toStdString()
方法。 - 任何
QWidget
(如QFileDialog
)都需要一个QApplication
之前已经创建。
#include <QApplication>
#include <QFileDialog>
#include <iostream>
class TCC {
public:
std::string openFile();
};
std::string TCC::openFile()
{
QString filename = QFileDialog::getOpenFileName(
nullptr,
QObject::tr("Open Document"),
QDir::currentPath(),
QObject::tr("Document files (*.doc *.rtf);;All files (*.*)"));
return filename.toStdString();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TCC tcc;
std::cout << tcc.openFile()<< std::endl;
return EXIT_SUCCESS;
}
关于c++ - 尝试用 Qt 打开文件对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68968316/