Archiv pro štítek: barvy

Qt – získání barvy a náhodného čísla

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í.

Qt - získání barvy - krok 1

Qt - získání barvy - krok 2

Qt - získání barvy - krok 3

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