0

基本的にそれが表す色の長方形になるシンプルなボタン(QPushButtonまたはQToolButtonのいずれかが機能する)を設計しようとしています。クリックすると QColorDialog が開き、その中で色を選択するとボタンが再描画されます。

したがって、基本的には、次のいずれかのようになります。

ここに画像の説明を入力

私はいくつかの試みをしましたが、どれも私が望む機能をもたらしませんでした.

スロット:

void MainWindow::OnButtonColorClick()
{
    QColor initialColor = ui->buttonColor->palette().color(QPalette::Background);

    QColor colorSelected = QColorDialog::getColor(initialColor, this);

    if(colorSelected.isValid())
    {
        ui->buttonColor->setPalette(QPalette(colorSelected));
        ui->buttonColor->setAutoFillBackground(true);
    }
}

試み #1:

コンストラクターでパレットを設定します。

ui->buttonCoulor->setPalette(QPalette(Qt::black));

結果: クリック前の通常のボタン、選択後の薄い色の輪郭。

ここに画像の説明を入力


試み #2:

スタイルシートを追加:

background-color: rgb(0, 0, 0);

結果: クリック前の黒い四角形、選択後の黒い四角形。

ここに画像の説明を入力


排水溝を回っている感じです。基本的に、どうすれば達成できますか:

ここに画像の説明を入力

?

4

4 に答える 4

3

目的の効果を実現する方法の 1 つを次に示します。

// Slot for the button
void MainWindow::on_button()
{
    QColor color = QColorDialog::getColor();

    QString s("background: #"
                          + QString(color.red() < 16? "0" : "") + QString::number(color.red(),16)
                          + QString(color.green() < 16? "0" : "") + QString::number(color.green(),16)
                          + QString(color.blue() < 16? "0" : "") + QString::number(color.blue(),16) + ";");
    button->setStyleSheet(s);
    button->update();
}

それが役立つことを願っています。

于 2013-02-26T04:09:07.987 に答える
1

このスタイル シートで setStyleSheet を使用します。

border: 1px solid black;
background-color: #XXXXXX;

ここで、XXXXXX は、によって返される値です。QString::number(myColor.rgb(), 16).toUpper();

ボタンに他のプロパティを設定する必要はありません。それらをすべてデフォルトのままにしておくと、これが機能します。

于 2013-02-26T18:04:47.747 に答える
0

phyatt's answer のフォローアップとして、XML 形式のカラー文字列を生成するショートカットがあります。

QString s("background: " + color.name + ";");
button->setStyleSheet(s);
于 2016-12-25T17:53:10.030 に答える
0

これは私にとってはうまくいっているようです:

if(colorSelected.isValid())
{
    ui->buttonColor->setPalette(QPalette(colorSelected));
}
于 2013-02-26T08:41:25.093 に答える