2017-04-15 9 views
1

OS(プラットフォーム)ごとにqssスタイルシートの一部を有効/無効にする方法はありますか?私はMacOS用に1つのフォントを、Windows用にもう1つのフォントを有効にすることができます。OSごとにqssスタイルシートを有効にする方法はありますか?

私は特定のウィジェット

this->setProperty("qsysKernelType", QSysInfo::kernelType()); 
this->setProperty("qsysCurrentCpuArchitecture", QSysInfo::currentCpuArchitecture()); 
this->setProperty("qsysBuildCpuArchitecture", QSysInfo::buildCpuArchitecture()); 
this->setProperty("qsysProductType", QSysInfo::productType()); 

の動的プロパティを設定することができますが、それは唯一のウィジェットではなく、階層全体で動作します。

答えて

1

私はこれのための標準的な簡単な方法があるとは思わない。

しかし、あなたはいつものように、それをロードするために、さまざまな異なるファイルでプラットフォーム、および使用ifdefsのためにあなたのCSSのリソースを保持することができます

this->setStyleSheet(QFile(
#ifdef Q_OS_WIN 
":/style/win.css" 
#else // add more, if you need 
":/style/mac.css" 
#endif 
).readAll()); 

それとも単にifdefsを持つ2つのハードコードされた文字列を使用しています。

+0

私の '.qss'ファイルでプリコンパイラを直接使用できるかどうかは疑問です。 –

+0

私はあなたが何を意味するかによって異なります。私は.qssファイルで、私の例のように ":/style/win.css"のような意味があると思いますか?簡単な答え - いいえ。 ifdefsはc/C++コード(ヘッダー/ソース)にのみ入れることができます。代わりに、いくつかのリソースファイルを作成して、プラットフォームに応じて.proファイルにそのうちの1つのみを含めることができます。 – Youw

+0

そして、もしあなたが望むなら - .qssファイルの一部を変更するだけで、.qssファイルをいくつかに分割することを検討してください。すべてのプラットフォームで共通の部分と、異なる部分です。そして、あなたの中の部品をマージします。私は同様の必要性を持っていました。 – Youw

0

実際には、Youwの答えと質問に記載されているアプローチの組み合わせを使用しています。

条件付きqssの場合、特定のウィジェットまたはウィジェットツリーのプロパティを設定します。

void CStyleSheetUtility::setQSysInfoProperties(QWidget *widget, bool withChildWidgets) 
{ 
    Q_ASSERT_X(widget, Q_FUNC_INFO, "Missing widget"); 
    if (!widget->property("qsysKernelType").isValid()) 
    { 
     widget->setProperty("qsysKernelType", QSysInfo::kernelType()); 
     widget->setProperty("qsysCurrentCpuArchitecture", QSysInfo::currentCpuArchitecture()); 
     widget->setProperty("qsysBuildCpuArchitecture", QSysInfo::buildCpuArchitecture()); 
     widget->setProperty("qsysProductType", QSysInfo::productType()); 
    } 

    if (withChildWidgets) 
    { 
     for (QWidget *w : widget->findChildren<QWidget *>(QString(), Qt::FindDirectChildrenOnly)) 
     { 
      CStyleSheetUtility::setQSysInfoProperties(w, true); 
     } 
    } 
} 
関連する問題