Qt 颜色选择器小部件?

8
我有一个继承自QDialog的子类,向用户展示一些选项供其选择。其中一个选项是颜色。我已经看到了QColorDialog,但我需要更简单的东西,也必须是常规小部件,这样我可以将其添加到我的对话框布局中。Qt是否提供此类内容,否则我需要自己制作,最佳策略是什么?
4个回答

11

你看过Qt Solutions中的QtColorPicker吗?

QtColorPicker

QtColorPicker提供了一个小部件,以QComboBox的形式呈现,其中包含一组可自定义的预定义颜色,方便快速地访问。单击...按钮将打开QColorDialog。它在LGPL下授权,因此在动态链接和适当归属的情况下,可以用于商业软件。搜索QtColorPicker,您会找到它。这里是一个托管许多Qt Solutions组件的网站链接:

https://github.com/pothosware/PothosFlow/tree/master/qtcolorpicker


1
这正是我正在寻找的!谢谢。 - Freedom_Ben
链接失效。 - tro
4
链接又失效了。 - z3ntu
链接仍然失效。 - remi

9

有一种非常简单的方法可以使用 QPushButton 来显示当前颜色并在单击时选择:

定义:

#include <QPushButton>
#include <QColor>

class SelectColorButton : public QPushButton
{
    Q_OBJECT
public:
    SelectColorButton( QWidget* parent );

    void setColor( const QColor& color );
    const QColor& getColor() const;

public slots:
    void updateColor();
    void changeColor();

private:
    QColor color;
};

实现:

#include <QColorDialog>

SelectColorButton::SelectColorButton( QWidget* parent )
    : QPushButton(parent)
{
    connect( this, SIGNAL(clicked()), this, SLOT(changeColor()) );
}

void SelectColorButton::updateColor()
{
    setStyleSheet( "background-color: " + color.name() );
}

void SelectColorButton::changeColor()
{
    QColor newColor = QColorDialog::getColor(color, parentWidget());
    if ( newColor != color )
    {
        setColor( newColor );
    }
}

void SelectColorButton::setColor( const QColor& color )
{
    this->color = color;
    updateColor();
}

const QColor& SelectColorButton::getColor() const
{
    return color;
}

这很好。我建议将setColor(const QColor color)更改为setColor(const QColor newColor),这样您就可以避免使用this->color语法。虽然在我的程序中,我更喜欢以“f_…”或“m_…”开头的字段(例如,你可以使用m_color = color代替this->color=color)。在Qt中没有传统引入器,但它可以帮助我避免许多错误。 - Alexis Wilke

6
Qt本身没有比QColorDialog更简单的颜色选择对话框,但在Qt的用户制作小部件wwWidgets中,有几个颜色选择小部件可用(请注意,“wwWidgets”中有一个“w”,而不是“wxWidgets”的“x”)。

谢谢你的建议!wwWidgets看起来很不错。不幸的是,它采用GPLv2授权,所以我不能在工作中使用它。然而,如果许可证问题不存在,它肯定能够解决问题。 - Freedom_Ben

2
我认为QColorDialog最适合你的应用程序。如果你想选择更简单的东西,它将会有所降低功能。我不知道Qt中是否有任何标准小部件提供这样的选项,但是你可以尝试以下内容:
  1. QComboBox,每个条目对应不同的颜色。你甚至可以使用实际颜色的名称来表示颜色。

  2. 一个或多个滑动条来调整色调、饱和度、明度或R、G、B分量。

  3. 针对单独的R、G、B分量,采用QLineEdit字段。您还可以使用信号/插槽机制,在用户更改颜色后,相应地更改向用户显示的颜色。

  4. 你可以使用'+'和'-'符号来增加/减少上述颜色分量值。

我希望以上内容能给你一些想法。

这些是很好的建议,谢谢!我可能会使用类似的东西来实现自己的小部件。 - Freedom_Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接