Просмотр исходного кода

COMP: QFileDialog::Options is not a meta-type, it can't be directly used in ctkDirectoryButton

When using QFileDialog::Options directly, the following output is generated by Qt Designer:
QMetaProperty::read: Unable to handle unregistered datatype 'QFileDialog::Options' for property 'ctkDirectoryButton::options'
As we can't declare it as a meta-type, we need to create our own type ctkDirectoryButton::Options.
Hopefully Qt will fix it in one of its future release...
Julien Finet лет назад: 15
Родитель
Сommit
e9d9ac9041
2 измененных файлов с 28 добавлено и 10 удалено
  1. 7 7
      Libs/Widgets/ctkDirectoryButton.cpp
  2. 21 3
      Libs/Widgets/ctkDirectoryButton.h

+ 7 - 7
Libs/Widgets/ctkDirectoryButton.cpp

@@ -31,13 +31,13 @@ public:
   ctkDirectoryButtonPrivate();
   void init();
   QString Caption;
-  QFileDialog::Options Options;
+  ctkDirectoryButton::Options _Options;
 };
 
 //-----------------------------------------------------------------------------
 ctkDirectoryButtonPrivate::ctkDirectoryButtonPrivate()
 {
-  this->Options = QFileDialog::ShowDirsOnly;
+  this->_Options = ctkDirectoryButton::ShowDirsOnly;
 }
 
 //-----------------------------------------------------------------------------
@@ -89,17 +89,17 @@ const QString& ctkDirectoryButton::caption()const
 }
 
 //-----------------------------------------------------------------------------
-void ctkDirectoryButton::ctkDirectoryButton::setOptions(const QFileDialog::Options& dialogOptions)
+void ctkDirectoryButton::ctkDirectoryButton::setOptions(const Options& dialogOptions)
 {
   CTK_D(ctkDirectoryButton);
-  d->Options = dialogOptions;
+  d->_Options = dialogOptions;
 }
 
 //-----------------------------------------------------------------------------
-const QFileDialog::Options& ctkDirectoryButton::options()const
+const ctkDirectoryButton::Options& ctkDirectoryButton::options()const
 {
   CTK_D(const ctkDirectoryButton);
-  return d->Options;
+  return d->_Options;
 }
 
 //-----------------------------------------------------------------------------
@@ -111,7 +111,7 @@ void ctkDirectoryButton::browse()
       this, 
       d->Caption.isEmpty() ? this->toolTip() : d->Caption, 
       this->text(), 
-      d->Options);
+      QFlags<QFileDialog::Option>(int(d->_Options)));
   if (directory.isEmpty())
     {
     return;

+ 21 - 3
Libs/Widgets/ctkDirectoryButton.h

@@ -34,8 +34,24 @@ class CTK_WIDGETS_EXPORT ctkDirectoryButton: public QPushButton
 {
   Q_OBJECT
   Q_PROPERTY(QString caption READ caption WRITE setCaption)
-  Q_PROPERTY(QFileDialog::Options options READ options WRITE setOptions)
+  Q_PROPERTY(Options options READ options WRITE setOptions)
+  // QFileDialog::Options is not a meta-type, we need to create our own.
+  Q_FLAGS(Option Options);
+
 public: 
+  // QFileDialog::Options is not a meta-type, we need to create our own.
+  enum Option
+    {
+      ShowDirsOnly          = 0x00000001,
+      DontResolveSymlinks   = 0x00000002,
+      DontConfirmOverwrite  = 0x00000004,
+      DontUseSheet          = 0x00000008,
+      DontUseNativeDialog   = 0x00000010,
+      ReadOnly              = 0x00000020,
+      HideNameFilterDetails = 0x00000040
+    };
+  Q_DECLARE_FLAGS(Options, Option)
+    
   ctkDirectoryButton(QWidget * parent = 0);
   ctkDirectoryButton(const QString & text, QWidget * parent = 0);
   ctkDirectoryButton(const QIcon & icon, const QString & text, QWidget * parent = 0);
@@ -43,8 +59,8 @@ public:
   void setCaption(const QString& caption);
   const QString& caption()const;
   
-  void setOptions(const QFileDialog::Options& options);
-  const QFileDialog::Options& options()const;
+  void setOptions(const Options& options);
+  const Options& options()const;
 
 public slots:
   void browse();
@@ -56,4 +72,6 @@ private:
   CTK_DECLARE_PRIVATE(ctkDirectoryButton);
 };
 
+Q_DECLARE_OPERATORS_FOR_FLAGS(ctkDirectoryButton::Options);
+
 #endif