<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT blog &#187; Combo box</title>
	<atom:link href="http://szj.cz/tag/combo-box/feed/" rel="self" type="application/rss+xml" />
	<link>http://szj.cz</link>
	<description>internet, linux, novinky, programování</description>
	<lastBuildDate>Sat, 12 Sep 2015 11:14:32 +0000</lastBuildDate>
	<language>cs-CZ</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.2</generator>
	<item>
		<title>Qt – Combo box</title>
		<link>http://szj.cz/qt-%e2%80%93-combo-box/</link>
		<comments>http://szj.cz/qt-%e2%80%93-combo-box/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 10:00:27 +0000</pubDate>
		<dc:creator><![CDATA[fredomgc]]></dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[Combo box]]></category>
		<category><![CDATA[Label]]></category>

		<guid isPermaLink="false">http://szj.cz/?p=124</guid>
		<description><![CDATA[Na následujícím příkladě si společně ukážeme práci s combo boxem. Konkrétně budeme využívat rovnou dva ovládací prvky tohoto typu, které na sobě dokonce budou závislé. Změna volby uživatelem se proto okamžitě projeví v obsahu druhého combo boxu. Pokud nastavíme vlastnost editable na true, získáme možnost vkládat vlastní hodnoty. V našem programu však povolíme výběr pouze [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Na následujícím příkladě si společně ukážeme práci s <strong>combo boxem</strong>. Konkrétně budeme využívat rovnou dva ovládací prvky tohoto typu, které na sobě dokonce budou závislé. Změna volby uživatelem se proto okamžitě projeví v obsahu druhého <strong>combo boxu</strong>. Pokud nastavíme vlastnost <strong>editable</strong> na <strong>true</strong>, získáme možnost vkládat vlastní hodnoty. V našem programu však povolíme výběr pouze z předem definovaných údajů. Nejprve se aplikace zeptá, zda-li budeme cestovat <strong>po zemi</strong> nebo <strong>ve vzduchu</strong>. Na základě odpovědi poté upraví druhý <strong>combo box</strong> a nabídne odpovídající dopravní prostředky.</p>
<p><a href="http://szj.cz/wp-content/uploads/2011/12/combobox.png"><img class="aligncenter size-full wp-image-125" title="combobox" src="http://szj.cz/wp-content/uploads/2011/12/combobox.png" alt="Combo box" width="437" height="297" /></a></p>
<h2>Designérský režim</h2>
<p>Po vytvoření projektu se přepneme do módu <strong>design</strong>. Postupně přidáme oba <strong>combo boxy</strong> a několik <strong>Labelů</strong>. Nezapomeňte si jednotlivé objekty vhodně pojmenovat, díky čemuž si usnadníte následující programování.</p>
<h3>Tvorba zdrojového kódu</h3>
<p>Mezi pro nás nejdůležitější funkci <strong>combo boxu</strong> patří <strong>addItem</strong>. V konstruktoru třídy si s její pomocí naplníme ovládací prvek. Položky se přidávají vždy za poslední volbu a disponují rovněž vlastním interním <strong>id</strong>, které se počítá od nuly. To ostatně vysvětluje, proč jsem vytvořil i pomocnou funkci <strong>procistit</strong>. Původně přitom její tělo obsahovalo iterační cyklus, včas mě však zarazila hodnota vrácená s pomocí <strong>count</strong>. Ta totiž prozrazuje celkový počet záznamů a nikoliv nejvyšší <strong>id</strong>. Tuto hodnotu si musíme sami dopočítat, tedy odečíst jedničku. <strong>Procistit</strong> musíme zavolat po každé změně výběru, protože v opačném případě by se druhý <strong>combo box</strong> postupně rozrůstal o duplicitní informace. Spojení signálů a slotů pochopitelně naleznete opět v konstruktoru. Volají se v podstatě jen dvě funkce – <strong>zmena</strong> a <strong>souhrn</strong>. Ta první se postará o obměnu příslušného <strong>combo boxu</strong>. Druhá nám sestaví informační <strong>QString</strong>, který poté nastaví vlastnosti <strong>text</strong> u <strong>Labelu</strong> umístěného ve spodní části okna. Povšimněte si rovněž, že se plně obejdeme bez tlačítek. Veškeré úpravy probíhají ihned poté, co uživatel změní svůj názor.</p>
<p>#include &#8222;widget.h&#8220;<br />
#include &#8222;ui_widget.h&#8220;</p>
<p>Widget::Widget(QWidget *parent) :<br />
    QWidget(parent),<br />
    ui(new Ui::Widget)<br />
{<br />
    ui->setupUi(this);</p>
<p>    ui->cb_typCesty->addItem(&#8222;Po zemi&#8220;);<br />
    ui->cb_typCesty->addItem(&#8222;Ve vzduchu&#8220;);</p>
<p>    connect(ui->cb_typCesty,SIGNAL(activated(int)),this,SLOT(zmena(int)));<br />
    connect(ui->cb_typCesty,SIGNAL(activated(int)),this,SLOT(souhrn()));<br />
    connect(ui->cb_dopravniProstredek,SIGNAL(activated(int)),this,SLOT(souhrn()));<br />
    zmena(ZEME);<br />
    souhrn();</p>
<p>}</p>
<p>Widget::~Widget()<br />
{<br />
    delete ui;<br />
}</p>
<p>void Widget::zmena(int id){<br />
    procistit(ui->cb_dopravniProstredek);</p>
<p>  if (id == ZEME){<br />
      ui->cb_dopravniProstredek->addItem(&#8222;Automobil&#8220;);<br />
      ui->cb_dopravniProstredek->addItem(&#8222;Motocykl&#8220;);<br />
  }else if (id == VZDUCH){<br />
      ui->cb_dopravniProstredek->addItem(&#8222;Letadlo&#8220;);<br />
      ui->cb_dopravniProstredek->addItem(&#8222;Helikoptéra&#8220;);<br />
      }<br />
}</p>
<p>void Widget::procistit(QComboBox*&#038; obj){<br />
    while(obj->count() != 0){<br />
     obj->removeItem(obj->count()-1);<br />
    }</p>
<p>}</p>
<p>void Widget::souhrn(){<br />
QString typ = ui->cb_typCesty->itemText(ui->cb_typCesty->currentIndex());<br />
QString prostredek = ui->cb_dopravniProstredek->itemText(ui->cb_dopravniProstredek->currentIndex());<br />
QString vysledek = &#8222;Typ cesty: &#8222;+ typ +&#8220;. Dopravní prostředek: &#8220; + prostredek;<br />
ui->l_vysledek->setText(vysledek);<br />
}</p>
<p>&nbsp;</p>
<h3>Enum</h3>
<p>Závěrem ještě poukáži na <strong>výčtový</strong> <strong>typ</strong> pojmenovaný překvapivě jako <strong>TYP</strong>. Konstanta <strong>ZEME</strong> zastupuje číselnou hodnotu <strong>0</strong>, zatímco <strong>VZDUCH</strong> symbolizuje <strong>1.</strong> Zdrojový kód díky tomu získává na přehlednosti.</p>
<p>#ifndef WIDGET_H<br />
#define WIDGET_H</p>
<p>#include <QWidget><br />
#include <QButtonGroup></p>
<p>#include <QComboBox></p>
<p>enum TYP{ZEME,VZDUCH};</p>
<p>namespace Ui {<br />
    class Widget;<br />
}</p>
<p>class Widget : public QWidget<br />
{<br />
    Q_OBJECT</p>
<p>public:<br />
    explicit Widget(QWidget *parent = 0);<br />
    ~Widget();</p>
<p>public slots:<br />
    void zmena(int);<br />
    void souhrn();</p>
<p>private:<br />
    Ui::Widget *ui;<br />
    void procistit(QComboBox*&#038; obj);<br />
};</p>
<p>#endif // WIDGET_H</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://szj.cz/qt-%e2%80%93-combo-box/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
