c++ - 尝试使用 Qt 打开文件对话框
问题描述
我正在尝试使用 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();
}
解决方案
您的代码中有几个错误:
QFileDialog
需要 aQWidget
或 nullptr 作为第一个参数。tr()
是一个 QObject 方法,因为没有,所以必须使用QObject::tr()
.- 要转换
QString
为std::string
您必须使用该toStdString()
方法。 - Any
QWidget
(likeQFileDialog
) 要求 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;
}
推荐阅读
- google-cloud-storage - 我可以在控制台中递归搜索谷歌云存储桶吗?
- c++ - 登录屏幕上的 Mac 密钥注入
- kubernetes - 如何将 Rancher Kubernetes 集群与 Sysdig 检查集成
- sql - 将具有不同过滤器的列组合在一起
- ios - Continuous Sine Wave From AKMIDISampler when AKMicrophone is Present
- java - Recycling methods that need certain objects in Java
- java - Finding a list of related objects by ID
- javascript - Javascript - 并行调用两个异步函数并将两个结果传递给第三个
- vue.js - Vuex - 如何跨不同选项卡持久存储更新?
- powershell - 从 .net 核心配置 powershell 核心以配置一个驱动器