我正在编写一个qt应用程序,其目标是可移植到3个主要操作系统.
我正在使用QFileDialog选择一个文件夹,然后将其添加到QListWidget.但是,即使我在Windows上,文件夹名称也将作为E:/ media返回.我希望它能返回E:\ media
我可以使用简单的字符串替换,但是在Linux/Mac上,使用\ home\user\Documents看起来很奇怪
我的代码如果有帮助:
void LibrariesForm::on_addButton_clicked()
{
QString dir = QFileDialog::getExistingDirectory(this, tr("Select Folder"), "/", QFileDialog::ShowDirsOnly);
if (dir.isNull() == true)
{
return;
}
ui->librariesList->addItem(new QListWidgetItem(dir, ui->librariesList, 0));
}
Run Code Online (Sandbox Code Playgroud) 在Qt,
QFileDialog *dlg = new QFileDialog();
QDir dir = dlg->getExistingDirectory(this, tr("Choose folder"), qgetenv("HOME"));
Run Code Online (Sandbox Code Playgroud)
打开文件夹选择对话框.选择文件夹后(按选择按钮),文件夹不会自动关闭.所以我尝试过:
if(dlg->close() == true) delete(dlg);
Run Code Online (Sandbox Code Playgroud)
当我调试dlg-> close()时返回true并且命中了删除代码(dlg).文件夹选择器对话框仍未关闭.
我正在使用Ubuntu 11.10 64位操作系统.使用存储库中的Qt库.
我的最终目的是显示文件夹选择器对话框,一旦选择了文件夹,对话框应该关闭.之后,处理应该继续.这该怎么做?
提前致谢.
我尝试了以下操作来打开一个文件对话框,该对话框应显示用户主目录:
QString fileName = QFileDialog::getOpenFileName(this,
tr("Select database"), QDir::homePath(),
tr("Database Files (*.db *.sqlite)"));
Run Code Online (Sandbox Code Playgroud)
问题是QFileDialog总是从启动应用程序的目录开始.我有什么想法我做错了吗?
顺便说一句:我在Mac OS X上使用Qt 5.
我有一个小应用程序,需要通过特定文件的路径,该文件将由用户在运行时提供.我所需要的只是路径.我把它想象成某种形式的文件浏览器,用户可以在其中遍历目录树.
有没有办法在Qt中执行此操作,或者我必须调用本机OS实现(如果可行).如果不在Qt中,我该如何使用本地操作系统实现?
(Windows 7 64位,PyCharm 3.4.1 Pro,Python 3.4.0,PySide 1.2.2)
我想用过滤器创建一个文件对话框并预选一个过滤器.
如果我使用静态方法,它可以工作,我可以使用过滤器并预先选择一个过滤器.
dir = self.sourceDir
filters = "Text files (*.txt);;Images (*.png *.xpm *.jpg)"
selected_filter = "Images (*.png *.xpm *.jpg)"
fileObj = QFileDialog.getOpenFileName(self, " File dialog ", dir, filters, selected_filter)
Run Code Online (Sandbox Code Playgroud)
如果我使用一个对象它不起作用,我的过滤器不存在.
file_dialog = QFileDialog(self)
file_dialog.setNameFilters("Text files (*.txt);;Images (*.png *.jpg)")
file_dialog.selectNameFilter("Images (*.png *.jpg)")
file_dialog.getOpenFileName()
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?

我有一段使用 Python3 和 PyQt5 打开 QFileDialog 的代码块:
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog
import sys
class MCVE(QWidget):
def __init__(self):
super().__init__()
self.initialize()
def initialize(self):
self.setWindowTitle('MCVE')
self.setGeometry(50, 50, 400, 200)
btn = QPushButton('Example', self)
btn.clicked.connect(self.clicked)
self.show()
def clicked(self):
filename = QFileDialog.getOpenFileName(
self, "Open Template", "c:\\",
"Templates (*.xml);;All Files (*.*)")
print(filename)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MCVE()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
在使用 PyQt4 的 Python 2 中,按下取消按钮后 print(filename) 语句输出为空字符串。当我使用 PyQt5 在 Python 3 中运行相同的代码时,我得到:
('', '')
注意:引号是单引号
有人能解释一下发生了什么事吗?我在 PyQt4 和 PyQt5 …
QFileDialog()我正在尝试为下面的图像添加默认名称。
这就是我得到的(没有文件名)
这就是我想要实现的目标,而无需手动输入它,我想传递file_name抛出的函数并让该名称显示在那里。

这是我试图使其工作的代码:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import *
import sys
class mainwindowUI(QMainWindow):
def __init__(self):
super(mainwindowUI, self).__init__()
self.exportFiles('test.mp3')
def exportFiles(self,file_name):
filename, _ = QFileDialog.getSaveFileName(self, "Save audio file", "", "Audio Files (*.mp3)")
if filename:
print(filename)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = mainwindowUI()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
我尝试添加选项:
filename, _ = QFileDialog.getSaveFileName(self, "Save audio file", "", "Audio Files (*.mp3)", options=QFileDialog.setLabelText(file_name))
Run Code Online (Sandbox Code Playgroud)
但这是不正确的,我不知道如何让它发挥作用......
有人知道如何在保存文件对话框中添加文件名吗?
我正在尝试为我的文本编辑器编写应用程序菜单,但我不明白为什么信号triggered不起作用.它应该打开一个QFileDialog::getOpenFileName,但它不会发生.为什么?
main.cpp中
#include "mainwindow.h"
#include "centralwidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow *mainWindow = new MainWindow;
CentralWidget *centralWidget = new CentralWidget;
mainWindow->setCentralWidget(centralWidget);
mainWindow->show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>
#include <QAction>
#include <QFileDialog>
#include <QString>
class MainWindow : public QMainWindow
{
public:
MainWindow();
public slots:
void slotFileDialog();
};
#endif // MAINWINDOW_H
Run Code Online (Sandbox Code Playgroud)
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow()
{
QMenu *fileMenu = new …Run Code Online (Sandbox Code Playgroud) 我想按一个按钮,然后打开文件浏览器并在标签中记下所选文件。我有一个在按下按钮时调用的函数:
@Slot()
def browse_folder(self):
self.fname = QtGui.QFileDialog.getOpenFileName()
self.statusLabel.setText(self.fname)
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
TypeError: 'PySide.QtGui.QLabel.setText' called with wrong argument types:
PySide.QtGui.QLabel.setText(unicode, unicode)
Supported signatures:
PySide.QtGui.QLabel.setText(unicode)
Run Code Online (Sandbox Code Playgroud)
如何将self.fname保存选定文件名的 转换为 unicode?
我想使用QFileDialog创建一个文件对话框,以选择要在QMediaPlayer中设置的音频文件,并使用文件扩展名掩码(*.mp3, *.ogg, *.flac)。不幸的是,它不起作用,因为它应该将最后一个扩展作为过滤器属性。
我已经尝试过 PyQt5 和 PySide2,结果是相同的。它在过滤器列表中显示具有最新扩展名的文件,例如仅 *.mp3 或 *.flac
audioFormats = "*.mp3, *.wav, *.ogg, *.wma, *.flac"
print(f"these are formats: {audioFormats}")
self.track, _ = self.getOpenFileName(parent=self, caption="Set track file", filter=f"Audio files ({audioFormats})")
Run Code Online (Sandbox Code Playgroud)
我预计它会显示具有所有这些扩展名的文件。