• 8506阅读
  • 10回复

[提问]请问如何设置 QFileDialog 的背景颜色 [复制链接]

上一主题 下一主题
离线dnn_xin
 

只看楼主 倒序阅读 楼主  发表于: 2012-11-07
想修改QFileDialog 的背景颜色,尝试过以下几种方式,都没有效果

QFileDialog file_dialig
<1>    QFileDialog file;
           file_dialig.setStyleSheet("background-color:red;
<2>   QPalette  palette;
         palette.setColor(QPalette::Window, QColor(50,50,50));
         file_dialig.setPalette(palette);
<3>   QPixmap pixmap(":Resources/background.png");
         file_dialig.setMask(pixmap.mask());

想修改QFileDialog  还要进行其他什么设置吗?
求大神帮助
离线jdwx

只看该作者 1楼 发表于: 2012-11-07
  1. QFileDialog dlg;
  2. QPalette pa = dlg.palette();
  3. pa.setColor(QPalette::Window, QColor(200, 200, 200));
  4. dlg.setPalette(pa);
  5. dlg.exec();


发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线XChinux

只看该作者 2楼 发表于: 2012-11-07
可以用CSS改。
用dumpTree()函数将里面它里面的内容结构搞清楚,然后写qt style sheet.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线dnn_xin

只看该作者 3楼 发表于: 2012-11-08
回 1楼(jdwx) 的帖子
非常感谢。
经测试,    
QFileDialog dlg;
    QPalette pa = dlg.palette();
    pa.setColor(QPalette::Window, QColor(200, 200, 200));
    dlg.setPalette(pa);
    dlg.exec();

确实可以改变对话框的背景色,可是如果使用getOpenFileNames/getOpenFileName等函数直接显示对话框,仍不能设置背景色,代码如下:
    QFileDialog dlg;
    QPalette pa = dlg.palette();
    pa.setColor(QPalette::Window, QColor(200, 200, 200));
    dlg.setPalette(pa);
    dlg.getOpenFileNames();
   // dlg.exec();

请问 这是什么原因呢?这种状况下应该如何设置背景色呢?
谢谢
离线dnn_xin

只看该作者 4楼 发表于: 2012-11-08
回 2楼(XChinux) 的帖子
非常谢谢您的解决方案,可是水平有限,不会使用dumpTree 看结构代码。
请问有什么方式可以设置 使用QFileDialog ::getOpenFileNames()函数显示的窗口的背景色吗?
谢谢
离线jdwx

只看该作者 5楼 发表于: 2012-11-08
回 4楼(dnn_xin) 的帖子
那个静态函数是没办法的。
除非改源码。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线XChinux

只看该作者 6楼 发表于: 2012-11-08
QFileDIalog *dlg = new QFileDialog(this);
....... // 设定属性
dlg->dumpObjectTree();


要求debug编译才能正确显示出tree結構來,這樣你就能看到QFileDialog内部的部件构造父子关系和名称了,就能在Qt style sheet里进行设定了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 7楼 发表于: 2012-11-08
同样原理,可以设定QCalendarWidget内部的样式,毕竟这些部件都是由其它button、combobox等组合而成的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线dnn_xin

只看该作者 8楼 发表于: 2012-11-09
回 7楼(XChinux) 的帖子
谢谢,受教了!
离线dnn_xin

只看该作者 9楼 发表于: 2012-11-09
回 5楼(jdwx) 的帖子
确实改了源代码,再编译,才有用,谢谢了
离线dnn_xin

只看该作者 10楼 发表于: 2012-11-09
经试验得出结论:
若直接使用getSaveFileName()等函数显示对话框,且要修改QFileDialog 样式
使用以下写法即可:
QString seiected_filter;
this->setStyleSheet("QFileDialog{background-color:rgb(90,90,90);}");
QString    filename=QFileDialog::getSaveFileName( this,  tr("New project..."),          current_path,"Image(*.JPG*.JPEG)",&seiected_filter,QFileDialog::DontUseNativeDialog);

需要注意的是:QFileDialog::DontUseNativeDialog样式的对话框,再使用getSaveFileName函数获取文件路径和文件名时,不会自动添加后缀名,需手动添加(filename = filename+".JPG")

getOpenFileName()和getOpenFileNames()函数不需要,获取的文件名是带有后缀名的。


感谢“XChinux”和“jdwx”的帮助!


快速回复
限100 字节
 
上一个 下一个