ShadowWares Forum

Programming (Languages) => การใช้งาน IDE และเครื่องมือต่างๆ สำหรับเขียนโปรแกรมคอมพิวเตอร์ => ข้อความที่เริ่มโดย: ShadowMan ที่ มิถุนายน 06, 2015, 12:41:34 pm



หัวข้อ: Qt : QLinearGradient
เริ่มหัวข้อโดย: ShadowMan ที่ มิถุนายน 06, 2015, 12:41:34 pm
Qt : QLinearGradient

ดูผลกันก่อน
(http://upic.me/i/lm/output.png)

ภาพด้านบน ได้มาจาก code ต่อไปนี้:
Code: (c)
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    int draw_w = 500;
    int draw_h = 200;

    // Draw Board
    QPixmap   pix(draw_w, draw_h);
    QPainter *paint = new QPainter(&pix);

    // Gradient Brush
    QLinearGradient gradient(QPointF(0,0), QPointF(0,draw_h));
    gradient.setColorAt(0.0,QColor::fromRgbF(1,0,0,1));
    gradient.setColorAt(0.3,QColor::fromRgbF(1,1,0,1));
    gradient.setColorAt(0.7,QColor::fromRgbF(0,1,1,1));
    gradient.setColorAt(1.0,QColor::fromRgbF(0,0,1,1));
    QBrush brush(gradient);

    // Paint on the Draw Board with the Gradient Brush
    paint->fillRect(0, 0, draw_w, draw_h, brush);

    // Create a Scene and add the Pixmap to the Scene
    QGraphicsScene *scene = new QGraphicsScene();
    scene->addPixmap(pix);

    // Create a View and add the Scene to the View
    QGraphicsView * view = new QGraphicsView();
    view->setScene(scene);
    view->setWindowTitle("QLinearGradient");
    view->show();

    return a.exec();
    delete view;
}



ส่วนของการสร้าง Gradient Brush คือ:
Code: (c)
    QLinearGradient gradient(QPointF(0,0), QPointF(0,draw_h));
    gradient.setColorAt(0.0,QColor::fromRgbF(1,0,0,1));
    gradient.setColorAt(0.3,QColor::fromRgbF(1,1,0,1));
    gradient.setColorAt(0.7,QColor::fromRgbF(0,1,1,1));
    gradient.setColorAt(1.0,QColor::fromRgbF(0,0,1,1));
    QBrush brush(gradient);


บรรทัดแรก เป็นการสร้างตัวแปร gradient โดยกำหนดจุดเริ่มต้นที่ (0,0) หรือซ้ายบน และจุดสุดท้ายที่ ซ้ายล่าง (0, draw_h) ความหมายคือกำหนดทิศทางของการไล่เฉดจากบนลงล่างนั่นเอง
สี่บรรทัดต่อมา เป็นการระบุตำแหน่งของสี (0.0, 0.3, 0.7, 1.0) และสีที่ต้องการ (แดง,เหลือง,ฟ้า,น้ำเงิน)  ตามลำดับ
ความหมายคือ:
สีแดงจะเข้มสุดที่ตำแหน่ง 0% (0.0) ของความสูง (บนสุด)
สีเหลืองจะเข้่มสุดที่ 30% (0.3) ของความสูง
สีฟ้าจะเข็มสุดที่ 70% (0.7)ของความสูง และสุดท้าย
สีน้ำเงินจะเข้มสุดที่ตำแหน่ง 100% (1.0) ของตวามสูง (ล่างสุด)

และบรรทัดสุดท้ายคือการสร้าง Brush

ทดลองเปลี่ยนทิศทางการไล่เฉดจากซ้ายไปขวา โดย:
Code: (c)
QLinearGradient gradient(QPointF(0,0), QPointF(0,draw_h));

เป็น
Code: (c)
QLinearGradient gradient(QPointF(0,0), QPointF(draw_w,0));


จะได้:
(http://upic.me/i/13/output2.png)