【问题标题】:Qt Color Picker Widget?Qt 颜色选择器小部件?
【发布时间】:2013-08-17 21:55:41
【问题描述】:

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

【问题讨论】:

    标签: qt dialog qt4 qt5 color-picker


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 这些都是很好的建议,谢谢!我可以用类似的东西实现我自己的小部件
    【解决方案2】:

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

    【讨论】:

    • 感谢您的提示! wwwWidgets 看起来很酷。不幸的是它是 GPLv2,所以我不能在工作中使用它。但是,如果 GPL 不是问题,它肯定会解决问题
    【解决方案3】:

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

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

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

    【讨论】:

    • 这正是我想要的!谢谢
    • 答案中的链接已失效。
    • 链接又失效了。
    • 链接仍然失效
    【解决方案4】:

    有一种非常简单的方法可以实现这一点,使用QPushButton 来显示当前颜色并在单击时拾取颜色:

    定义:

    #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;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-01
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      相关资源
      最近更新 更多