Následující tutoriál se bude věnovat rovnou dvěma zajímavým oblastem, které v praxi rozhodně využijete. Dozvíte se, jakým způsobem lze uživatele vyzvat k pohodlnému výběru barvy a naučíte se postup umožňující získání náhodného čísla. Pakliže chcete vytvořit program, který se nebude chovat vždy stejně a zachová si určitý nádech "tajemna", dozajista se vám využívání nahodilých číselných proměnných zalíbí. Našim cílem tentokrát bude naprogramovat aplikaci, jenž po výběru barvy změní fádní bílé pozadí plainTextEditu. Lidem přitom s výběrem barvy poněkud pomůžeme, protože náhodně doporučíme jedno ze třech předem definovaných zabarvení.
QColorDialog
Dialog sloužící ke komfortnímu zvolení barvy není třeba od základu vytvářet. Plně postačí využít ten systémový. S tím nám pomůže knihovna QColorDialog. Jako parametr getColor přitom uvádíme náhodně zvolenou barvu, kterou přiřazuje do proměnnéswitch. Jako výsledek přitom obdržíte platný QColor jen v případě, že uživatel dialogové okno nezruší s pomocí Cancel. Toho lze krásně využít v podmínce, která tuto skutečnost testuje. O celou verifikaci se postará metoda isValid(). Samotná proměnná typu QColor však k nastavení pozadí nestačí. PlainTextEdit totiž nic podobného jako setColor(QColor) nezná. Musí proto dojít ke zrodu palety (QPalette), která v sobě obsahuje různé barvy jednoho objektu a identifikuje je díky ColorRole (v našem případě Qpalette::Base). Nově vzniklou paletu poté již stačí plainTextEditu nastavit s pomocí setPalette(QPalette). V konstruktoru si přitom povšimněte nastavení vlastnosti autoFillBackgroung na true, což zajistí vyplnění pozadí.
Náhodná čísla
Před samotným generováním musíme provést inicializaci. Funkce qsrand potřebuje údaj, který se bude měnit s každým spuštěním programu. Tuto záležitost elegantně řeší počet vteřin do půlnoci. Modulo za qrand určuje rozsah. Interval v našem případě začíná nulou a končí dvojkou. V podstatě tak dochází k náhodnému opakování tří čísel – 0, 1 a 2.
#include „widget.h“
#include „ui_widget.h“
#include 
#include 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->plainTextEdit->setAutoFillBackground(true);
    this->setWindowTitle(„Barva“);
    connect(ui->pb_konec,SIGNAL(clicked()),this,SLOT(close()));
    connect(ui->pb_barva,SIGNAL(clicked()),this,SLOT(barva()));
}
Widget::~Widget()
{
    delete ui;
}
void Widget::barva()
{
    QColor prednastavena;
    QTime pulnoc(0,0,0,0);
    qsrand(pulnoc.secsTo(QTime::currentTime()));
    int nahodna = qrand() % 3;
    switch (nahodna){
    case 0:
        prednastavena = Qt::black;
    break;
    case 1:
        prednastavena = Qt::red;
    break;
    case 2:
        prednastavena = Qt::blue;
    break;
}
QColor barva = QColorDialog::getColor(prednastavena);
    if(barva.isValid() == true)
    {
      QPalette paleta;
      paleta.setColor(QPalette::Base,barva);
      ui->plainTextEdit->setPalette(paleta);
    }
}


