7

我有一个QDialog子类,它向用户提供一些选项供他们选择。其中一个选项是颜色。我已经看到了QColorDialog,我需要一些更简单的东西,这也是一个常规小部件,因此我可以将其作为对话框的一部分添加到我的布局中。Qt 是否提供类似的功能,还是我必须自己制作?如果是后者,最好的策略是什么?

4

4 回答 4

10

你看过 QtColorPicker,Qt 解决方案的一部分吗?

Qt颜色选择器

QtColorPicker 以 a 的形式提供了一个小部件,其中包含一组可QComboBox自定义的预定义颜色,以便轻松快速地访问。单击该...按钮将打开QColorDialog. 它在 LGPL 下获得许可,因此通过动态链接和适当的归属,它可以在商业软件中使用。搜索 QtColorPicker,你会找到它。这是一个链接,指向一个托管许多 Qt 解决方案组件的站点:

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

于 2014-03-25T18:48:59.540 回答
6

有一种非常简单的方法来实现它,使用 aQPushButton来显示当前颜色并在单击时拾取一个:

定义:

#include <QPushButton>
#include <QColor>

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

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

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

private:
    QColor color;
};

执行:

#include <QColorDialog>

SelectColorButton::SelectColorButton( QWidget* 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()
{
    return color;
}
于 2017-05-09T13:37:56.653 回答
5

Qt 本身没有提供比 QColorDialog 更简单的东西,但是作为wwWidgets的一部分,有几个颜色选择小部件,用户为 Qt 制作了一组小部件(请注意,这是带有“w”的“wwWidgets”而不是带有“wxWidgets”的一个“x”)。

于 2013-08-15T19:51:47.683 回答
2

我认为 QColorDialog 最适合您的应用程序。如果你想要更简单的东西,它会减少功能。我不知道 Qt 中有任何标准小部件提供这样的选项,但您可以尝试以下方法:

  1. QCombobox 每个条目对应不同的颜色。您甚至可以将名称的颜色设为实际颜色。

  2. 一个或多个滑块用于调整色调、饱和度、val 或 R、G、B 分量。

  3. 单个 R、G、B 组件的 QLineEdit 字段。您还可以使用信号/插槽机制,其中一旦用户更改颜色,显示给用户的颜色也会相应更改。

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

希望以上内容能给大家一些思路。

于 2013-08-15T16:50:08.223 回答