Qt cvičení - žárovka: Porovnání verzí

Z GeoWikiCZ
Skočit na navigaci Skočit na vyhledávání
m
m
 
(Není zobrazena jedna mezilehlá verze od stejného uživatele.)
Řádek 4: Řádek 4:
 
zhasnutou [[Soubor:zarovka1.png]] a rozsvícenou žárovku [[Soubor:zarovka2.png]]
 
zhasnutou [[Soubor:zarovka1.png]] a rozsvícenou žárovku [[Soubor:zarovka2.png]]
  
Oba obrázky žárovek vznikly úpravou obrázku [http://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Light_bulb_icon_tips.svg/304px-Light_bulb_icon_tips.svg.png]. Obrázky nakopírujte (například) do adersáře projektu.
+
Oba obrázky žárovek vznikly úpravou obrázku [http://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Light_bulb_icon_tips.svg/304px-Light_bulb_icon_tips.svg.png]. Obrázky nakopírujte (například) do adresáře projektu.
  
 
[[Soubor:qt-zarovka.png|center|600px]]
 
[[Soubor:qt-zarovka.png|center|600px]]
Řádek 70: Řádek 70:
  
 
Při volání funkce <tt>label->setPixmap</tt> nelze přímo zadat jméno obrázku, ale je nutné explicitní přetypování na <tt>QPixmap</tt> (poznámka: alternativně lze vytvořit dva objekty typu QPixmap a předávat je při volání slotu).
 
Při volání funkce <tt>label->setPixmap</tt> nelze přímo zadat jméno obrázku, ale je nutné explicitní přetypování na <tt>QPixmap</tt> (poznámka: alternativně lze vytvořit dva objekty typu QPixmap a předávat je při volání slotu).
 +
 +
== Resource file ==
 +
 +
V aplikaci jsme uvaděli explicitní odkazy na binární soubory obrázků v rámci souborového systému. Aby aplikace správně fungovala, musely být oba obrázky vždy umístěny  ve stejném adresáři jako (sestavený binární soubor) aplikace. Pokud do projektu přidáme soubor '''Qt Resource file''' (Add New --> Qt Resourcce file), můžeme do něj ukládat obrázky a další podobné binární soubory, které jsou pak distribuováný přimo v sestavené binární aplikaci. Pro soubory uložené v ''Resource File'' používáme speciální syntax, která uvádí (relativní) jména souborů vždy ''':/''', viz např.
 +
 +
<pre>
 +
    if (sviti)
 +
        ui->label->setPixmap(QPixmap(":/zarovka1.png"));
 +
    else
 +
        ui->label->setPixmap(QPixmap(":/zarovka2.png"));
 +
</pre>

Aktuální verze z 28. 9. 2009, 15:17

Napište Qt GUI aplikaci, která bude obsahovat dva widgety PushButton (vypínač) a Label (žárovka). Po stisknutí vypínače se žárovka rozsvítí nebo zhasne. Do widgetu Label lze místo textu umístit obrázek (atribut pixmap), použijte

zhasnutou Zarovka1.png a rozsvícenou žárovku Zarovka2.png

Oba obrázky žárovek vznikly úpravou obrázku [1]. Obrázky nakopírujte (například) do adresáře projektu.

Qt-zarovka.png

Protože žárovka je buď zhasnutá nebo rozsvícená, musí slot tlačítka "vypínač" žárovky rozsvěcet nebo zhasínat. Aplikace musí tedy udržovat dva stavy. Pro jejich implementaci použijte proměnnou typu bool (privátní atribut sviti třídy MainWindow).

#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;
    bool sviti;

private slots:
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H

Počáteční nastavení zajišťuje konstruktor (sviti = false;), po každém volání slotu je stav přepnut (operátor negace je !, znak vykřičník).

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    sviti = false;
}

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

void MainWindow::on_pushButton_clicked()
{
    if (sviti)
        ui->label->setPixmap(QPixmap("zarovka1.png"));
    else
        ui->label->setPixmap(QPixmap("zarovka2.png"));

    sviti = !sviti;
}

Při volání funkce label->setPixmap nelze přímo zadat jméno obrázku, ale je nutné explicitní přetypování na QPixmap (poznámka: alternativně lze vytvořit dva objekty typu QPixmap a předávat je při volání slotu).

Resource file

V aplikaci jsme uvaděli explicitní odkazy na binární soubory obrázků v rámci souborového systému. Aby aplikace správně fungovala, musely být oba obrázky vždy umístěny ve stejném adresáři jako (sestavený binární soubor) aplikace. Pokud do projektu přidáme soubor Qt Resource file (Add New --> Qt Resourcce file), můžeme do něj ukládat obrázky a další podobné binární soubory, které jsou pak distribuováný přimo v sestavené binární aplikaci. Pro soubory uložené v Resource File používáme speciální syntax, která uvádí (relativní) jména souborů vždy :/, viz např.

    if (sviti)
        ui->label->setPixmap(QPixmap(":/zarovka1.png"));
    else
        ui->label->setPixmap(QPixmap(":/zarovka2.png"));