首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Qt中绘制能够改变颜色的线条?

如何在Qt中绘制能够改变颜色的线条?
EN

Stack Overflow用户
提问于 2019-12-02 03:52:02
回答 2查看 811关注 0票数 1

有个问题困扰着我,也许这只是你们的一个简单问题。我想在我的Qt小部件中画两条线,当QComboBox cbx设置在项目1时,第一行设置为红色,第二行设置为黑色,相反,2,拳头黑色,第二条红色。我用*paintEvent*画线。(实际上,如果你想画什么东西,你必须画paintEvent函数),但我不知道如何根据QComboBox项目改变线条的颜色,下面是我的代码。

代码语言:javascript
复制
#include "changecolor.h"  
#include "ui_changecolor.h"  
QString st;  
QPainter painter;  

ChangeColor::ChangeColor(QWidget *parent) :  
    QMainWindow(parent),  
    ui(new Ui::ChangeColor)  
{  
    ui->setupUi(this);  
    setFixedSize(2000, 1000);  
    QComboBox * cbx = new QComboBox(this);  
    cbx->setSizeAdjustPolicy(QComboBox::AdjustToContents);  
    cbx->addItem("1", Qt::DisplayRole);  
    cbx->addItem("2", Qt::DisplayRole);  
    st = cbx->currentText();  
    connect(cbx, SIGNAL(currentTextChanged(QString)), this, SIGNAL(changeColorSlot(st, painter)));  
}  

void ChangeColor::paintEvent(QPaintEvent*)  
{  
//    QPainter painter(this);  
//    painter.setPen(Qt::black);  
//    painter.drawLine(QPoint(100,100), QPoint(1100,100));  
//    painter.drawLine(QPoint(100,100), QPoint(100,600));  
//    changeColorSlot(painter, );  
    changeColorSlot(st, painter);  
}  

void ChangeColor::changeColorSlot(QString& st, QPainter& painter)  
{  
//    QPainter painter(this);  
    if(st == tr("1"))  
    {  
        painter.setPen(Qt::black);  
        painter.drawLine(QPoint(100,100),QPoint(1100,100));  
        painter.setPen(Qt::red);  
        painter.drawLine(QPoint(100,100),QPoint(100,600));  
    }  
    else if(st == tr("2"))  
    {  
        painter.setPen(Qt::red);  
        painter.drawLine(QPoint(100,100),QPoint(1100,100));  
        painter.setPen(Qt::black);  
        painter.drawLine(QPoint(100,100),QPoint(100,600));  
    }  
    update();  

}  

ChangeColor::~ChangeColor()  
{  
    delete ui;  
}  

这些代码代表了我痛苦的编码生活,我的意思是我尝试过很多次,但没有正确的结果。谢谢你们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-02 07:49:18

您必须设置控制小部件外部状态(行的颜色)的逻辑:

这里是一个相关部分的例子。

.h:#包括

代码语言:javascript
复制
namespace Ui
{
    class ChangeColor;
}

class ChangeColor : public QWidget
{
    Q_OBJECT

    public:
        explicit ChangeColor(QWidget *parent = nullptr);
        void paintEvent(QPaintEvent* pe);
        ~ChangeColor();

    public slots:
        void setColorState(int state);

    private:
        Ui::ChangeColor* ui{nullptr};
        int state{};
};

.cpp
...
void ChangeColor::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event)
    QPainter paint(this);

    QColor RED_COLOR{255, 0, 0};
    QColor BLACK_COLOR{0, 0, 0};
    if(state == 0)
    {
        paint.setPen(QPen(RED_COLOR));
        paint.setBrush(RED_COLOR);
    }
    else
    {
        paint.setPen(QPen(BLACK_COLOR));
        paint.setBrush(BLACK_COLOR);
    }
    paint.drawLine(0, 0, width(), height());
}

void ChangeColor::setColorState(int state)
{
    this->state = state;
    update();
}
票数 1
EN

Stack Overflow用户

发布于 2019-12-02 07:49:05

我想您是在寻找以下功能:

代码语言:javascript
复制
QComboBox* cb = ...;
QAbstractItemView* view = cb->view();
view->setAlternatingRowColors(true);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59132441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档