簡體   English   中英

如何在Qt中繪制能夠改變顏色的線條?

[英]how to draw lines able to change color in Qt?

有一個問題困擾着我,也許對你們來說只是一個簡單的問題。 我想在我的 Qt 小部件中繪制拖線,當QComboBox cbx設置在項目 1 時,第一行設置為紅色,第二個黑色,相反,2,第一個黑色,第二個紅色。 我用*paintEvent*來畫我的線條。 (實際上,如果你想畫一些東西,你必須在paintEvent函數中畫)但我不知道如何根據QComboBox項目改變線條的顏色,以下是我的代碼。

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

這些代碼代表了我痛苦的編碼生活,我的意思是我嘗試了很多次,但沒有正確的結果。 謝謝你們。

您必須設置控制小部件外部狀態(線條的顏色)的邏輯:

這里是相關部分的示例

.h: #include

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();
}

我想你正在尋找這個功能:

QComboBox* cb = ...;
QAbstractItemView* view = cb->view();
view->setAlternatingRowColors(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM