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.
| C++ (QT) | | copy code | | ? |
| 01 | #include "widget.h" |
| 02 | #include "ui_widget.h" |
| 03 | |
| 04 | #include <QColorDialog> |
| 05 | #include <QTime> |
| 06 | |
| 07 | Widget::Widget(QWidget *parent) : |
| 08 | QWidget(parent), |
| 09 | ui(new Ui::Widget) |
| 10 | { |
| 11 | ui->setupUi(this); |
| 12 | |
| 13 | ui->plainTextEdit->setAutoFillBackground(true); |
| 14 | this->setWindowTitle("Barva"); |
| 15 | |
| 16 | connect(ui->pb_konec,SIGNAL(clicked()),this,SLOT(close())); |
| 17 | connect(ui->pb_barva,SIGNAL(clicked()),this,SLOT(barva())); |
| 18 | |
| 19 | |
| 20 | } |
| 21 | |
| 22 | Widget::~Widget() |
| 23 | { |
| 24 | delete ui; |
| 25 | } |
| 26 | |
| 27 | void Widget::barva() |
| 28 | { |
| 29 | QColor prednastavena; |
| 30 | QTime pulnoc(0,0,0,0); |
| 31 | qsrand(pulnoc.secsTo(QTime::currentTime())); |
| 32 | int nahodna = qrand() % 3; |
| 33 | |
| 34 | |
| 35 | switch (nahodna){ |
| 36 | case 0: |
| 37 | prednastavena = Qt::black; |
| 38 | break; |
| 39 | |
| 40 | case 1: |
| 41 | prednastavena = Qt::red; |
| 42 | break; |
| 43 | |
| 44 | case 2: |
| 45 | prednastavena = Qt::blue; |
| 46 | break; |
| 47 | |
| 48 | } |
| 49 | |
| 50 | QColor barva = QColorDialog::getColor(prednastavena); |
| 51 | |
| 52 | if(barva.isValid() == true) |
| 53 | { |
| 54 | QPalette paleta; |
| 55 | paleta.setColor(QPalette::Base,barva); |
| 56 | ui->plainTextEdit->setPalette(paleta); |
| 57 | } |
| 58 | } |
| 59 |
Příchozí dotazy:
- nahodne cislo
- jake barvy ziskame
- qt4 widgety ui
- qt4 ui změna barvy
- qt zadávání textu
- qt vložení palety
- qt modulo
- qcolordialog storno
- QColor dialog example
- zmena barvy pisma na minecraftu










