QT-从组合框中选择颜色并绘制矩形

时间:2016-12-15 19:44:05

标签: c++ qt combobox

我想从下拉列表中选择颜色,并根据我想在窗口上绘制矩形的颜色。 我可以绘制一个预定义颜色的矩形,但不知道如何从组合框中传递颜色。 窗口上只绘制了一个矩形,我想在窗口上绘制多个矩形。

所以程序就像这样。用户将点击按钮 - >组合框出现--->选择颜色 - >单击“确定”,窗口中将显示该颜色的矩形。

Dialog.cpp

add_filter('document_title_parts', 'dq_override_post_title', 10);
function dq_override_post_title($title){
   // change title for singular blog post
    if( is_singular( 'post' ) ){ 
        // change title parts here
        $title['title'] = 'EXAMPLE'; 
    $title['page'] = '2'; // optional
    $title['tagline'] = 'Home Of Genesis Themes'; // optional
        $title['site'] = 'DevelopersQ'; //optional
    }

    return $title; 
}

上一篇文章没有解决我的问题。

2 个答案:

答案 0 :(得分:0)

如果您对颜色选择器不感兴趣,并且想要使用QComboBox自己的解决方案,则可以预先定义自己想要使用的颜色集。

你可以声明一个地图,例如QMap<QString, QColor> colors;,它将颜色值保存在用字符串描述它的键下。

然后你应该定义所需的值。例如:

colors = 
{
    {"Red", QColor(255, 0, 0)},
    {"Green", QColor(0, 255, 0)},
    {"Blue", QColor(0, 0, 255)},
};

您可以轻松使用此地图填充QComboBox的内容。这写得很快:

box->addItems(colors.keys());

下一步操作取决于您何时需要知道颜色值。如果您想在用户选择它之后立即知道它,您需要做出正确的connect。例如:

connect(box, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(colorSelected(const QString&)));

其中colorSelected是您处理所选颜色值的插槽:

void Dialog::colorSelected(const QString& text)
{
    const QColor selected = colors[text];
    // do what you need with the color
}

答案 1 :(得分:0)

除了上述内容之外,我建议使用项目数据来保存颜色定义。看看:

QComboBox::setItemData
QComboBox::itemData
QComboBox::currentData

组合框中的每个项目都有两个组件;有显示的文本,然后是一个相关的QVariant,它是项目数据。 QVariant可以保存您的颜色定义,这样您就不必单独存储它们。实际上,它不止两个,因为您可以根据需要定义任意数量的用户角色,这样您就可以为每个组合框项目存储更多数据元素。但是,出于您的目的,默认的UserRole就足够了。

您的colorSelected定义将是:

void Dialog::colorSelected (const QString &text)
{
    const QColor selected = box->currentData().value <QColor> ();
    // do what you need with the color
}