Sunday, July 5, 2009

Exercise: Color Changer

In this example, I will create a Qt4 GUI Application to change color inside a rectangle using three slider.



Create a new Qt4 GUI Application in Qt Creator.

Use Qt Designer to edit mainwindow.ui, add three Horizontal Slider, named redSlider, greenSlider and blueSlider and place them as the picture.

Set QAbstractSlider>maximum to 255.




Modify mainwindow.h and mainwindow.cpp

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>

namespace Ui
{
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
void paintEvent(QPaintEvent*);

int r, g, b;

private slots:
void rChanged(int);
void gChanged(int);
void bChanged(int);

};

#endif // MAINWINDOW_H
mainwindow.h



#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
r = g = b = 0;
ui->setupUi(this);

connect(ui->redSlider, SIGNAL(valueChanged(int)),
this, SLOT(rChanged(int)));

connect(ui->greenSlider, SIGNAL(valueChanged(int)),
this, SLOT(gChanged(int)));

connect(ui->blueSlider, SIGNAL(valueChanged(int)),
this, SLOT(bChanged(int)));

}

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

void MainWindow::rChanged(int tr)
{
r = tr;
update();
}

void MainWindow::gChanged(int tg)
{
g = tg;
update();
}

void MainWindow::bChanged(int tb)
{
b = tb;
update();
}

void MainWindow::paintEvent(QPaintEvent *event)
{
QRect rect(200, 50, 200, 100);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap));
painter.setBrush(QBrush(QColor::QColor(r, g, b, 255),
Qt::SolidPattern));


painter.drawRect(rect);
}



mainwindow.cpp

Save ALL, Re-build and Run, it should be work.