QFileDialog保存文件时,如何弹文件已存在的提示?

oldmtn 2014-12-13 04:59:18
我们都知道,windows下面的notepad,当你保存文件时.
当你输入文件名为"1" 或者"1.txt"
那么实际保存的文件名为1.txt

此时若1.txt已存在,则会弹出文件已存在的提示。

对于Qt中的QFileDialog,当输入"1.txt"时会给出”文件已存在的提示“,但是当输入"1"时,却不会给出文件已存在的提示。
下面是本人的代码,如果有谁做过,请不吝赐教。
void QTest_QStandardDialog::on_pushButton_qfiledialog_save_clicked()
{
QString strPicPath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);

{
QFileDialog dialog(this);
dialog.setAcceptMode(QFileDialog::AcceptSave);
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setDefaultSuffix("png");
dialog.setNameFilter(QString(tr("Images (*.png *.xpm *.jpg)")));
dialog.setViewMode(QFileDialog::Detail);
dialog.setDirectory(strPicPath);
dialog.setOptions(dialog.options() | QFileDialog::DontConfirmOverwrite);

if( QFileDialog::Accepted == dialog.exec() ) {
QString s1 = dialog.selectedNameFilter();
QString strFile;
dialog.fileSelected(strFile);

QStringList strList = dialog.selectedFiles();
QString strFiles;
for(int i=0; i < strList.size(); i ++) {
strFiles += QString("[") + strList.at(i) + QString("]");
}
}
}
...全文
904 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mei399904775 2016-03-30
  • 打赏
  • 举报
回复
请问,楼主怎么解决
limilie 2015-12-11
  • 打赏
  • 举报
回复
请问,楼主怎么解决
oldmtn 2014-12-20
  • 打赏
  • 举报
回复
经过我研究,搞定。
oldmtn 2014-12-17
  • 打赏
  • 举报
回复
引用 6 楼 liuyuanmei 的回复:
将QFileDialog继承一下,自己去实现那个功能,很简单的
你做过?
liuyuanmei 2014-12-17
  • 打赏
  • 举报
回复
将QFileDialog继承一下,自己去实现那个功能,很简单的
ibm123 2014-12-16
  • 打赏
  • 举报
回复
可能与操作系统有关,我用WIN7是没有问题的。
oldmtn 2014-12-16
  • 打赏
  • 举报
回复
引用 4 楼 IBM123 的回复:
可能与操作系统有关,我用WIN7是没有问题的。
的确是这样的。。。 我跟踪了下代码发现 当Qt使用系统对话框时,实际使用的是Gtk,然后我单独使用Gtk的代码

void Gtk_FileDialog::on_pushButton_gtk_filedialog_save_clicked()
{
    /* 这个函数在所有的 GTK 程序都要调用。参数由命令行中解析出来并且送到该程序中*/
    gtk_init(0, 0);

    GtkWidget *gtkWidget;
    gtkWidget = gtk_file_chooser_dialog_new("", 0,
                                            GTK_FILE_CHOOSER_ACTION_SAVE,
                                            GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                            GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);

    GtkDialog* gtkDailog = (GtkDialog *)gtkWidget;

    gtk_window_set_title(GTK_WINDOW(gtkDailog), "gtkwindow's title");
    gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(gtkDailog), 1);

    //
    GtkWidget *acceptButton = gtk_dialog_get_widget_for_response(gtkDailog, GTK_RESPONSE_OK);
    GtkWidget *rejectButton = gtk_dialog_get_widget_for_response(gtkDailog, GTK_RESPONSE_CANCEL);

    // Images (*.html *.jpg)

    // 文件过滤
    GtkFileFilter *gtkFilter = gtk_file_filter_new();
    gtk_file_filter_set_name(gtkFilter, "Filter_png (*.png)");
    gtk_file_filter_add_pattern(gtkFilter, "*.png");
    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(gtkDailog), gtkFilter);

    gtkFilter = gtk_file_filter_new();
    gtk_file_filter_set_name(gtkFilter, "Filter_png (*.jpg)");
    gtk_file_filter_add_pattern(gtkFilter, "*.jpg");
    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(gtkDailog), gtkFilter);

    //
    gboolean confirmOverwrite = 1;
    gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(gtkDailog), confirmOverwrite);


    g_signal_connect_swapped(G_OBJECT(gtkDailog), "response", G_CALLBACK(onResponse), this);
    //g_signal_connect(GTK_OBJECT(acceptButton), "clicked", G_CALLBACK(file_ok_sel), gtkDailog);

    gtk_button_set_label(GTK_BUTTON(acceptButton), GTK_STOCK_SAVE);
    gtk_button_set_label(GTK_BUTTON(rejectButton), GTK_STOCK_CANCEL);
    //gtk_file_selection_set_filename(GTK_FILE_SELECTION(gtkWidget), "1111.png");

    gtk_dialog_run(gtkDailog);
}
发现,也没有办法弹出“文件存在的提示“。
oldmtn 2014-12-15
  • 打赏
  • 举报
回复
引用 1 楼 IBM123 的回复:
是你自己不让它提示吧:QFileDialog::DontConfirmOverwrite,

经过研究,现在发现问题了,但是还未找到解决的办法。
原因如下:
QFileDialog::DontUseNativeDialog 0x00000010 Don't use the native file dialog. By default, the native file dialog is used unless you use a subclass of QFileDialog that contains the Q_OBJECT macro, or the platform does not have a native dialog of the type that you require.

因为我们使用的本地对话框,当输入全称"1.png",会弹出"文件已存在的提示"; 当输入"1"时,并未弹出提示.
但是使用Qt自带的对话框时,2中输入方式都会弹出提示。
下面是Qt文件对话框和系统对话框的区别。





oldmtn 2014-12-13
  • 打赏
  • 举报
回复
引用 1 楼 IBM123 的回复:
是你自己不让它提示吧:QFileDialog::DontConfirmOverwrite,
bus 不是的 那个我没加也不出现提示 那个只是我为了调试加上去的.
ibm123 2014-12-13
  • 打赏
  • 举报
回复
是你自己不让它提示吧:QFileDialog::DontConfirmOverwrite,

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧