我正在尝试使用 Qt 编写一个简单的 C++ 代码来获取文件夹的路径。
我从这个答案中得到了代码,并对其进行了一些调整以适应我想要的。我的问题是它标记了我的“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();
}
Run Code Online (Sandbox Code Playgroud)
您的代码中有几个错误:
QFileDialog需要 aQWidget或 nullptr 作为第一个参数。tr()是一个 QObject 方法,因为没有,所以必须使用QObject::tr().QString为std::string您必须使用该toStdString()方法。QWidget(如QFileDialog)都需要 aQApplication之前已创建。#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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1925 次 |
| 最近记录: |