色の選択についてユーザーにフィードバックを与える最良の方法は何ですか?
をポップする「色の選択」プッシュボタンのあるダイアログがありますQColorDialog。選択が行われた後、選択した色をユーザーに表示したいと思います。
通常、これを行うQLabelには、パレットの背景色を使用して変更します。この方法は面倒で、あまり移植性がないと思います。
これを行う標準的な方法はありますか?
色の選択についてユーザーにフィードバックを与える最良の方法は何ですか?
をポップする「色の選択」プッシュボタンのあるダイアログがありますQColorDialog。選択が行われた後、選択した色をユーザーに表示したいと思います。
通常、これを行うQLabelには、パレットの背景色を使用して変更します。この方法は面倒で、あまり移植性がないと思います。
これを行う標準的な方法はありますか?
私がやっている方法は次のとおりです。
ユーザーの選択を反映するために、実際にボタンの色を変更します。これを行うために、移植性を確保する Qt スタイル シートを使用しています。
const QString COLOR_STYLE("QPushButton { background-color : %1; color : %2; }");
QColor ChosenColor; // Color chosen by the user with QColorDialog
QColor IdealTextColor = getIdealTextColor(ChosenColor);
btnChooseColor->setStyleSheet(COLOR_STYLE.arg(ChosenColor.name()).arg(IdealTextColor.name()));
ボタンのラベルが常に読み取り可能であることを確認するために、メソッド getIdealTextColor() を呼び出しています。これは、codeproject の記事から見つけたメソッドです。
//==============================================================================
// Nom : getIdealTextColor
//! @return an ideal label color, based on the given background color.
//! Based on http://www.codeproject.com/cs/media/IdealTextColor.asp
//==============================================================================
QColor JSPreferencesDlg::getIdealTextColor(const QColor& rBackgroundColor) const
{
const int THRESHOLD = 105;
int BackgroundDelta = (rBackgroundColor.red() * 0.299) + (rBackgroundColor.green() * 0.587) + (rBackgroundColor.blue() * 0.114);
return QColor((255- BackgroundDelta < THRESHOLD) ? Qt::black : Qt::white);
}
QColor chosenColor = QColorDialog::getColor(); //return the color chosen by user
setColorButton->setBackgroundColor(chosenColor);
setColorButton->setAutoFillBackground(true);
setColorButton->setFlat(true);
これはどう?
Shihe Zhangは、私の実装ではQPushButtonにbackgroundColorプロパティがないことを除いて、私のために機能します。ボタンの色を設定するには:
QPalette p;
p.setColor(QPalette::Button, color);
gColorButton->setPalette(p);
あなたが使用している方法は扱いにくいですが、移植性がないと考える理由は何ですか? Qtが動作する場所ならどこでも動作するはずです。
それに加えて、ジェロームの答えと同様に、何とか色で塗りつぶされたボタンを作成しようとしましたが、おそらくそれを行う専用のボタンを作成し、パレットをいじりました。