QFileDialog 个性化定制

【目的】

改变 QFileDialog 窗口的样式/风格,不让系统或者主界面的样式影响QFileDialog窗口。

主要是因为window和linux下切换窗口样式的设置不稳定

【解析】

QFileDialog的基类就是QDialog ,所以通过stylesheet 可以改变窗口样式。

1. QFileDialog.ui 解析

可以得到对应的每个控件的名字,这样通过QSS就可以直接设置他的颜色

2. QFileDialog.h 解析

a. option 官网说了 这个属性,应该在窗口属性改变和窗口显示之前设置。

DontUseNativeDialog: 表示不使用操作系统自带的窗口样式

    enum Option
    {
        ShowDirsOnly                = 0x00000001,
        DontResolveSymlinks         = 0x00000002,
        DontConfirmOverwrite        = 0x00000004,
#if QT_DEPRECATED_SINCE(5, 14)
        DontUseSheet Q_DECL_ENUMERATOR_DEPRECATED = 0x00000008,
#endif
        DontUseNativeDialog         = 0x00000010,
        ReadOnly                    = 0x00000020,
        HideNameFilterDetails       = 0x00000040,
        DontUseCustomDirectoryIcons = 0x00000080
    };

【样式设置】

const QString g_FileDialogQSS =
    " .QFileDialog                                    "
    " {                                              "
    "       background-color: #151515;              "
    "       color: #FFFFFF;                         "
    " }                                              "
    " .QListView                                      "
    " {                                              "
    "       background-color: #151515;               "
    "       color: #FFFFFF;                          "
    " }                                              "
    " .QListView::item                               "
    " {                                              "
    "       background-color: #151515;               "
    "       color: #FFFFFF;                          "
    " }                                              "
    " .QComboBox QAbstractItemView                   "
    " {                                              "
    "       background-color: #151515;               "
    "       color: #FFFFFF;                          "
    " }                                              "
    " .QComboBox                                     "
    " {                                              "
    "       background-color: #151515;              "
    "       color: #FFFFFF;                          "
    " }                                              "
    " .QComboBox QAbstractItemView ::item            "
    " {                                              "
    "       background-color: #151515;              "
    "       color: #FFFFFF;                          "
    " }                                              "
    " .QLineEdit                                     "
    " {                                              "
    "       background-color: #151515;              "
    "       color: #FFFFFF;                          "
    " }                                              "
    " .QFrame                                         "
    " {                                              "
    "       background-color: #151515;               "
    "       color: #FFFFFF;                          "
    " }                                              "
    " .QSidebar                                      "
    " {                                              "
    "       background-color: #151515;               "
    "       color: #FFFFFF;                          "
    " }                                              "
    " .QLabel                                         "
    " {                                              "
    "       background-color: #151515;               "
    "       color: #FFFFFF;                          "
    " }                                              "
    " .QTreeView#treeView                             "
    " {                                              "
    "       background-color: #151515;              "
    "       color: #FFFFFF;                          "
    " }                                              "
    " .QPushButton                                   "
    " {                                              "
    "       background-color: #151515;               "
    "       border: 1px solid #414141;               "
    "       border-radius: 3px;                      "
    "       color: #FFFFFF;                          "
    " }                                              ";

【窗口的使用】

  QFileDialog fileDiag;
  fileDiag.setParent(qSlicerApplication::application()->mainWindow());
  fileDiag.setOption(QFileDialog::DontUseNativeDialog, true);
  fileDiag.setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);
  fileDiag.setStyleSheet(g_FileDialogQSS);
  fileDiag.setAcceptMode(QFileDialog::AcceptSave);
  fileDiag.setLabelText(QFileDialog::Accept, tr("Save"));   // 设置对应控件的文字
  fileDiag.setWindowTitle(QString(u8"save"));
  fileDiag.setNameFilter(tr(u8"file(*.jpg)"));

  // 显示对话框
  if (fileDiag.exec() != QDialog::Accepted)
  {
    return;
  }

【结果】

 【原窗口】window下的默认窗口

 

 

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值