- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个 QFileDialog
设置为 QFileDialog::AnyFile
其中文件名是固定的(但位置可以更改)。
到目前为止,我发现了问题 QFileDialog - Saving a file with specified file name ,没有回答。
有直接选择目录的伪答案,这是我迄今为止在我的项目中所做的。然而,通过人们测试该程序,发现这令人困惑,因此不是一个可接受的答案。
到目前为止,我尝试的是导出 QFileDialog
然后强制执行,但我不知道该尝试什么了。当点击不同的文件时,我设法通过对适当的信号使用react来重置文件名:
FixedFileDialog::FixedFileDialog(QWidget* parent) : QFileDialog(parent)
{
connect(this, SIGNAL(currentUrlChanged(const QString&)), this, SLOT(current_changed(const QString&)));
}
void FixedFileDialog::current_changed(const QString&)
{
selectFile(_filename);
}
(
_filename
是一开始就设置的成员。)
QLineEdit
小部件本身禁用它,但我不知道如何。我试过
QLineEdit* line_edit = dialog.d_func()->lineEdit();
(
dialog
属于派生类。)
d_func()
在
QFileDialog
中是私有(private)的.
最佳答案
我必须承认,我想到的是一个肮脏的黑客。另一方面,OP对我来说似乎有些绝望。所以,我把它贴出来(带着一些疑问)。
由于OP的声明,我提出了我的想法:
QLineEdit* line_edit = dialog.d_func()->lineEdit();
(With dialog being of the derived class.)
This does not work, as
d_func()
is private inQFileDialog
.
d_func()
是私有(private)的,Qt 小部件提供了一种后门,因为它们的所有权管理可以被利用:
QObject
提供其子项的列表。所以,这个子树的简单遍历应该通过
QLineEdit
in quest(这是我在 Qt 5.13 中的
QFileDialog
当前实现中唯一的一个)。
/ Qt header:
#include <QtWidgets>
QLineEdit* findFirstQLineEdit(QWidget *pQWidget)
{
//qDebug() << "Inspect" << pQWidget;
const QObjectList pQObjs = pQWidget->children();
for (QObject *pQObj : pQObjs) {
if (QLineEdit *pQLineEdit = dynamic_cast<QLineEdit*>(pQObj)) {
qDebug() << "Found:" << pQLineEdit;
return pQLineEdit;
} else if (QWidget *pQWidget = dynamic_cast<QWidget*>(pQObj)) {
if (QLineEdit *pQLineEdit = findFirstQLineEdit(pQWidget)) {
return pQLineEdit;
}
}
}
return nullptr;
}
// main application
int main(int argc, char **argv)
{
qDebug() << "Qt Version:" << QT_VERSION_STR;
QApplication app(argc, argv);
// setup GUI
QFileDialog qFileDlg(nullptr,
QString::fromUtf8("Choose Dir. to Save File"),
QDir::currentPath());
qFileDlg.show();
// manipulate the file name input
qFileDlg.selectFile("CMakeLists.txt");
QLineEdit *const pQEdit = findFirstQLineEdit(&qFileDlg);
pQEdit->setReadOnly(true);
// runtime loop
return app.exec();
}
输出:
findFirstQLineEdit()
在从
QFileDialog
派生的类的构造函数中.这没有用!调试输出证明
QFileDialog
建成后没有 child 。我得出的结论是
QFileDialog
的 child 稍后创建——但肯定必须在
show()
之后创建.
QFileDialog::showEvent()
的覆盖中进行操作可能就足够了。 . (我没有测试它。)
关于c++ - QFileDialog : force file name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62693736/
我正在尝试为必须对给定文件执行某些操作的程序编写 GUI。它的逻辑是: 1) 程序从创建一个文本字段和一个按钮开始。 2) 如果我点击按钮,我可以选择一些.exe 文件。如果选择文件,其路径将设置为与
我是 QT 的新手。目前在我的项目中我实现了 QFileDialog . 在我的用例中:每当用户选择一个文本文件时,它都会执行 functionA .但是,我发现如果在文件对话框中单击取消,funct
我尝试了以下操作来打开一个应该显示用户主目录的文件对话框: QString fileName = QFileDialog::getOpenFileName(this,
我试图在我的 PySide2 应用程序中打开一个文件,但文件对话框总是在主窗口下方打开,并在启动器中显示为另一个应用程序。应用程序的名称是“门户”。 我看到other answers其中解决方案是将主
我想创建一个 QFileDialog 的子类,它将用于仅打开具有某些特定内容的目录。我可以设置我自己的代理模型来处理文件列表的行为,但是如何禁用/启用确定按钮? 我必须创建自己的小部件吗? 最佳答案
1)我想获取文件夹监控应用程序的文件夹名称.. 有没有办法可以过滤掉使用 QFileDialog 显示的特定文件夹(例如,我不希望我的文档显示在文件对话框中)。 2)我不希望用户选择驱动器。默认情况下
我想建立一个类似于 QFileDialog::getExistingDirectory() 的对话框仅当所选目录包含某些文件时才启用确定按钮。 我知道我无法通过 QFileDialog 实现这一目标,
我使用下面的代码来构建文件名的 qstringlist: QStringList filenames = QFileDialog::getOpenFileNames(this,"",QDir::cur
QFileDialog 在我的代码中使用如下: QFileDialog fileDlg; fileDlg.setFileMode(QFileDialog::AnyFile); fileDlg.setV
我想打开一个包含所有支持的图像格式的 QFileDialog.getOpenFileName(我可以用来实例化 QIcon 的所有文件类型) 我已经知道我可以使用 QImageReader.suppo
关闭 QFileDialog.getSaveFileName 时遇到问题。如果我选择取消而不继续保存文件,我的程序就会崩溃。 我知道该语句将始终为 True,因为 getSaveFileName()
我想将选定文件的位置存储为 Python 中的字符串。我正在尝试使用 QFileDialog 来完成此任务,我有: self.filedialog = QtGui.QFileDialog(self)
我遇到了一个问题,当我选择不保存文件并单击系统窗口上的“取消”时,程序将崩溃。这是我收到的错误: Traceback (most recent call last): File "BasicEmail
我有一个 QFileDialog 对象,我需要用户在其中选择一个目录 QFileDialog dlg(this, tr("Select directory")); dlg.setDirectory(c
我同时使用 QFileDialog getOpenFileName 和 getSaveFileName。我在网络上有一个文件(连接速度慢),我使用 getOpenFileName 加载它。然后,如果我
我在 Qt 中有一个用于保存文件的 QFileDialog。 它不是 smmiting 信号。我通过连接它 QFileDialog diag(this); ... connect( d
我正在开发一个项目,我正在使用 Python 和 PyQT4 进行开发。我偶然发现了 QFileDialog 的一个有点奇怪的行为,在我的 IDE (Eclipse) 中运行项目时不会发生这种行为。
我想使用 QFileDialog 获取新目录的名称,我将在其中创建几个配置文件。 如果目录名不包含扩展部分就好了。我如何强制用户不提供带有 filename.extension 的 QFileDial
我在 Qt 5.2 中使用 QFileDialog 时遇到一点问题。当我打开对话框时,对话框会出现,但不会将任何选定的文件发回给我。在下面的代码示例中,“selectedFiles.at(0)”没有提
我正在尝试使用 QFileDialog 获取文件路径,编译很顺利,但是当我从应用程序打开对话框时,会弹出此窗口: 看起来路径中缺少字母“á”。 即使我尝试从快速访问中打开桌面,它也会弹出(顺便说一句。
我是一名优秀的程序员,十分优秀!