Portál AbcLinuxu, 25. dubna 2024 23:15

Grafické programy v Qt 4 - 1 (úvod, hello world)

3. 3. 2009 | David Watzke
Články - Grafické programy v Qt 4 - 1 (úvod, hello world)  

Qt 4 je svobodná multiplatformní knihovna sloužící primárně (ale nejenom) k vývoji grafických programů. Jejím nativním jazykem je C++, a tím se také v tomto seriálu budeme zabývat.

Úvod

Tento seriál je určený pro lidi s alespoň základními znalostmi C++ (třídy a dědičnost, ukazatele atp.). Cílem je naučit základy programování grafických aplikací za použití vývojového frameworku Qt 4 a předvést různé možnosti tohoto frameworku. Seriál se bude zabývat nejen ručním programováním, ale později si ukážeme i použití Qt Designeru pro návrh GUI.

O Qt

Na první verzi Qt – vyslovuje se jako anglické cute (roztomilý), tedy [kju:t] – se začalo pracovat již v roce 1991 a od té doby se framework stále rozšiřuje a zlepšuje. O 3 roky později dva z vývojářů založili společnost Trolltech. V polovině roku 2008 byl Trolltech zakoupen společností Nokia a krátce na to přejmenován na Qt Software. Celý framework je již od nepaměti dostupný zdarma pod licencí GPL nebo za poplatek pro komerční použití. Od verze 4.5.0, která vyjde v březnu 2009, bude Qt dostupná i pod licencí LGPL.

V současnosti Qt používá například populární desktopové prostředí KDE, VoIP komunikátor Skype, webový prohlížeč Opera, virtualizační software VirtualBox a spousty dalších aplikací.

Qt 4 běží nejen na unixových operačních systémech (Linux, BSD), Windows a Mac OS X, ale i na nejrůznějších mobilních zařízeních. Alespoň co se týče Linuxu, sestavit lze na všech možných i nemožných platformách, včetně x86, x86-64, IA64, SPARC, MIPS, Alpha, HPPA a PPC (32 i 64bitová).

Kompilace programů

Minimálně pro menší programy je vhodné nechat si vygenerovat Makefile pomocí qmake, což je utilita obsažená v Qt. Postup je snadný:

  1. Vytvořte prázdný adresář pro váš program.
  2. Uložte do něj zdrojové kódy se správnou příponou.
  3. Poprvé a následně při každém přidání/odebrání zdrojových souborů spusťte v tomto adresáři příkaz qmake -project, který vygeneruje soubor s příponou .pro.
  4. Následně spusťte qmake bez argumentů. Tím vygenerujete Makefile.
  5. Nyní už můžete kompilovat příkazem make.

Hello World!

Při programování v Qt 4 máte k dispozici množství tříd (objektů), které můžete používat tak, jak jsou, nebo je v případě specifických potřeb zdědit ve vlastní třídě a následně upravit podle sebe.

#include <QApplication>
#include <QLabel>

int main(int argc, char** argv)
{
	QApplication app(argc, argv);

	QLabel win("Hello World!");
	win.show();

	return app.exec();
}

qt 1 example1

V každém grafickém programu je třeba vytvořit instanci třídy QApplication, které se předávají argumenty z příkazové řádky. Na konci programu je vhodné vracet výsledek její metody exec(). Ve funkci main() je vhodné vytvářet objekty ve stacku.

Mezi těmito dvěma body se nachází kód, který zobrazí hlavní okno programu. Hlavním oknem programu může být jakákoliv třída dědící QWidget nebo právě QWidget samotný. Obvykle se zde pouze vytvoří instance třídy hlavního okna a zavolá se její metoda show(), která okno zobrazí. Případně lze ještě zavést lokalizaci.

Signály a sloty

Signály a sloty slouží ke komunikaci mezi objekty Qt. Signály objekty Qt vyšlou, když dojde k určité události. Signál je zvláštní metoda, která nemá tělo a nevrací hodnotu, má pouze prototyp. Slot je metoda, která se zavolá v reakci na nějaký signál. Slot se od běžné metody liší pouze tím, že jej lze nastavit jako reakci na vyslaný signál; můžete ho ovšem volat i vy sami. Signál může slotu předat libovolný počet argumentů libovolného typu (dle předem dané definice, samozřejmě).

V následujícím programu je tlačítko (QPushButton) propojeno s hlavním oknem aplikace (QApplication; qApp je ukazatel na instanci této třídy, která je pro každý program unikátní). K propojení slouží metoda connect() třídy QObject. Tato metoda je přetížená, takže se může volat s různými argumenty, ale nejčastěji se používá varianta, kterou vidíte v ukázce níže, tedy v tomto pořadí:

  1. Ukazatel na instanci objektu Qt, od kterého očekáváme signál.
  2. Signál, který spustí daný slot.
  3. Ukazatel na instanci objektu Qt, jehož slot se má spustit v reakci na signál. Tento argument lze vynechat, v takovém případě se volá slot instance třídy, které vyslala signál.
  4. Slot, který se spustí, když je vyslán definovaný signál. Zde může být místo slotu další signál, tím dojde k tomu, že vyslání jednoho signálu způsobí vyslání signálu jiného.
#include <QApplication>
#include <QPushButton>

int main(int argc, char** argv)
{
	QApplication app(argc, argv);

	QPushButton btn("&Quit");
	QObject::connect(&btn, SIGNAL(clicked()), qApp, SLOT(quit()));
	btn.show();

	return app.exec();
}

qt 1 example2

Třída QObject je základem veškerých objektů v Qt, takže uvnitř jakékoliv Qt třídy můžete QObject::, které vidíte v mém příkladu, bez starostí vynechat.

Všimněte si ampersandu uvnitř řetězce v konstruktoru QPushButton. Ten se po spuštění programu nezobrazí, ale místo toho Qt zaregistruje jemu následující znak jako klávesovou zkratku pro výchozí činnost. Stisknutí Alt+Q by tedy mělo ukončit program.

Vlastní Qt objekt

Jak jsem již psal, libovolnou třídu Qt můžete zdědit a upravit si ji podle sebe. V následujícím příkladu vytvořím třídu MyObject založenou na QWidget, která poslouží jako hlavní okno programu. Je zde tlačítko a zaškrtávací políčko (QCheckBox). Tyto dva ovládací prvky (widgety) jsou funkcí connect() propojeny tak, že když kliknete na jeden z nich, aktivuje se i ten druhý. Oba widgety jsou po propojení přidány do horizontálního rozložení (layoutu), který poskytuje třída QHBoxLayout. Layouty slouží k uspořádání rozmístění ovládacích prvků a bez nich by bylo nutné udávat souřadnice každého widgetu, což je velmi nepraktické.

#include <QHBoxLayout>
#include <QCheckBox>
#include <QPushButton>

class MyObject : public QWidget
{
public:
	/* jako poslední argument konstruktoru je třeba
	   předat rodiče - v případě, že jde o hlavní okno,
	   se předá nula (žádný rodič) */
	MyObject(QWidget* parent = 0);
};

MyObject::MyObject(QWidget*)
{
	QHBoxLayout* myLayout = new QHBoxLayout(this);

	QPushButton* pb = new QPushButton(tr("Check this"));
	QCheckBox* cb = new QCheckBox();

	// tlačítko lze zamáčknout
	pb->setCheckable(true);

	connect(pb, SIGNAL(clicked()), cb, SLOT(toggle()));
	connect(cb, SIGNAL(clicked()), pb, SLOT(toggle()));

	myLayout->addWidget(pb);
	myLayout->addWidget(cb);

	// použije daný layout
	setLayout(myLayout);
}

qt 1 example3

Ve třídách již vytváříme objekty v heapu (tzn. pomocí operátoru new). Na první pohled to vypadá, jako když jsem zapomněl na destruktor, ve kterém bych smazal takto vytvořené objekty, ale není tomu tak. Tím, že jsem při vytváření layoutu nastavil jeho rodiče na this (tj. ukazatel na aktuální instanci třídy), jsem zajistil, že se Qt postará o jeho smazání při ničení instance nadřazené třídy (v tomto případě MyObject). Všechny widgety obsažené v layoutu jsou smazány při jeho destrukci, takže jsme na nic nezapomněli. Zrovna hlavní okno sice není nejlepším příkladem, jelikož se ničí až při ukončení programu, nicméně stejně to funguje u všech Qt objektů. Obvykle je destruktory nutné psát jen v případě, že uvnitř programu používáte nějakou externí knihovnu.

Při vytváření tlačítka jsem jeho text vložil do funkce QObject::tr(), čímž jsem řetězec označil pro překlad (lokalizaci). Takto je vhodné označovat všechny řetězce, které jsou viditelné uživateli.

Pro použití tohoto objektu jednoduše zkopírujte jeho kód nad funkci main(), kterou si můžete vzít třeba z některého z předchozích příkladů. Vytvořte instanci objektu a pak okno zobrazte tak, jak jsem popisoval výše.

Vlastní signály a sloty

Ukázková třída výše byla velice jednoduchá a neobsahovala žádné metody. Nyní si ukážeme, jak napsat vlastní signál a slot a rovnou přidáme ukázku vlastní implementace chráněné metody. Tento program se skládá z více souborů.

mybutton.h: Hlavičkový soubor objektu založeného na tlačítku QPushButton. Pokud chcete ve třídě definovat vlastní signál nebo slot, musíte na začátek (resp. do "private" sekce) vložit makro Q_OBJECT, protože nejde o standardní syntaxi C++.

#ifndef MYBUTTON_H
#define MYBUTTON_H

#include <QFont>
#include <QPushButton>

class MyButton : public QPushButton
{
Q_OBJECT

public:
	MyButton(QPushButton* parent = 0);

private:
	int m_stretch;
	int m_counter;

	QFont font;

protected:
	// reimplemetace zavedené metody pro událost dvojkliku
	virtual void mouseDoubleClickEvent(QMouseEvent*);

public slots:
	void vStretch();
	// nastaví o kolik se má tlačítko roztáhnout
	void setStretch(int);

signals:
	// tlačítko bylo horizontálně zvětšeno
	void hStretched();
};

#endif

mybutton.cpp: Implementace našeho tlačítka.

#include "mybutton.h"
#include <QMouseEvent>

MyButton::MyButton(QPushButton* parent)
	: QPushButton(parent), m_stretch(10), m_counter(0)
{
	// nastaví výchozí text
	setText("Dvojklikni sem!");
	// nastaví výchozí velikost
	setFixedSize(200, 50);

	// signál hStretched() spustí slot vStretch()
	connect(this, SIGNAL(hStretched()), SLOT(vStretch()));
}

void MyButton::mouseDoubleClickEvent(QMouseEvent* e)
{
	// ignorujeme dvojkliky jiným než levým tlačítkem myši
	if(e->buttons() != Qt::LeftButton)
		return;

	// horizontálně roztáhne tlačítko
	setFixedWidth(width()+m_stretch);

	// přepne tučnost písma
	font.setBold(!font.bold());
	setFont(font);

	// změní text na tlačítku na počet dvojkliků
	setText(QString("%1x").arg(++m_counter));

	// vyšle signál
	emit hStretched();
}

void MyButton::vStretch()
{
	// vertikálně roztáhne tlačítko
	setFixedHeight(height()+(m_stretch/2));
}

void MyButton::setStretch(int stretch)
{
	if(stretch < 2)
		stretch = 2;

	if(stretch > 50)
		stretch = 50;

	m_stretch = stretch;
}

main.cc: Hlavní okno (MyWindow) bude obsahovat upravené tlačítko MyButton a číselník QSpinBox, kterým se bude volit, o kolik se má tlačítko při dvojkliku (na tlačítko) roztáhnout.

#include <QApplication>

#include <QWidget>
#include <QSpinBox>
#include <QHBoxLayout>

#include "mybutton.h"

class MyWindow : public QWidget
{
public:
	MyWindow(QWidget* parent = 0);
};

MyWindow::MyWindow(QWidget* parent) : QWidget(parent)
{
	QHBoxLayout* layout = new QHBoxLayout(this);
	MyButton* button = new MyButton();
	QSpinBox* spinBox = new QSpinBox();

	// nastaví rozsah číselníku
	spinBox->setRange(2, 50);
	// nastaví výchozí hodnotu číselníku
	spinBox->setValue(10);

	// když se změní hodnota číselníku, odešleme ji tlačítku
	connect(spinBox, SIGNAL(valueChanged(int)),
		button, SLOT(setStretch(int)));

	layout->addWidget(button);
	layout->addWidget(spinBox);

	setLayout(layout);
}

int main(int argc, char** argv)
{
	QApplication app(argc, argv);

	MyWindow w;
	w.show();

	// qApp je globální ukazatel na instanci QApplication
	// qApp->exec() je zde totéž jako app.exec()
	return qApp->exec();
}

qt 1 example4

Stejného chování objektu MyButton by se jistě dalo docílit efektivnějším způsobem (mohl bych vStretch() volat sám z mouseDoubleClickEvent() nebo rovnou použít metodu setFixedSize()), pointa této ukázky byla ovšem předvést několik možností, jak lze přistupovat k řešení jistých situací. Proto jsem předělal událost dvojkliku tak, aby zvětšila šířku tlačítka a poté vyslala signál, že bylo tlačítko roztaženo. Jelikož je tento signál propojen se slotem vStretch(), tak toto horizontální roztažení okamžitě následovalo roztažení vertikální.

Číselník v hlavním okně při změně odesílá svou hodnotu našemu tlačítku, které si ji ve slotu uloží do proměnné m_stretch.

Závěr

A to je pro dnešek vše. Příště si mj. ukážeme, jak vytvořit hlavní okno a jak ukládat a načítat nastavení programu.

Seriál Qt 4 - psaní grafických programů (dílů: 12)

První díl: Grafické programy v Qt 4 - 1 (úvod, hello world), poslední díl: Grafické programy v Qt 4 – 12 (stylování GUI pomocí CSS).
Následující díl: Grafické programy v Qt 4 - 2 (hlavní okno programu)

Související články

Cmake: zjednoduš si život
Seriál: Kommander
Seriál: KDE: tipy a triky
Seriál: Začíname KProgramovať
Co přináší KDE 4 - (alfaverze, porty a D-BUS)
Co přináší KDE 4 - (technologie)
Novinky v KDE 4
Jaké je KDE 4.0.0
Seriál: KDE 4.1 - megarecenze

Odkazy a zdroje

doc.trolltech.com

Další články z této rubriky

LLVM a Clang – více než dobrá náhrada za GCC
Ze 4 s na 0,9 s – programovací jazyk Vala v praxi
Reverzujeme ovladače pro USB HID zařízení
Linux: systémové volání splice()
Programování v jazyce Vala - základní prvky jazyka

Diskuse k tomuto článku

3.3.2009 00:22 xindl | skóre: 2 | blog: SALAM_OLEJKUM
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Doufám že z tohodle bude mega seriál protže to by bylo fakt potřeba! Držím palce a jen tak dál! :-)
xkucf03 avatar 3.3.2009 15:05 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

+1 Taky držím palce a doufám že z toho bude seriál (aby to nezůstalo u návodu typu "uděláme si okno s tlačítkem", kterých je všude spousta).

Zajímavé by bylo i porovnání dvou přístupů signály+sloty vs. posluchače (např. v Javě -- ve Swingu).

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
3.3.2009 17:49 fero
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

+1 tiez vazne potrebujem , miestami som sa rozhodoval ze pre svoju linuxovu verziu programu neurobim gui nakoniec som neurobil ani na win a je to iba konsole :)

 

3.3.2009 01:45 YYY | skóre: 29 | blog: martinek
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Diky. Opravdu zajimavy a vydatny clanek. Imho bylo by dobre zminit vyhody a novinky oproti qt3.
3.3.2009 02:15 luky
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Grafické?
Milan Lajtoš avatar 3.3.2009 13:30 Milan Lajtoš | skóre: 22 | blog: /blog/babraq
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
GUI
“Every great achievement was once considered impossible.”
3.3.2009 02:26 petr
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

S Qt trosku experimentuji, takze se tesim na pokracovani, ze se dozvim neco noveho, zajimaveho :-)

heartbreaker avatar 3.3.2009 07:12 heartbreaker
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

Konečně jsem se dočkál :). Díky za skvělý seriál. Už se nemůžu dočkát dalšího dílu.

alblaho avatar 3.3.2009 07:47 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
MyObject(QWidget* parent = 0);

C++ umí výchozí hodnoty argumentů?
3.3.2009 07:56 stick | skóre: 10 | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Ano. Definuju sa v prototype funkcie a samozrejme za prvym parametrom s default hodnotou mozu nasledovat uz iba dalsie parametre s default hodnotou.
0118 999 881 999 119 725 3
3.3.2009 18:45 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
No že se ptáš... tsss... jak může někdo pochybovat o dokonalosti C++ ;-)
3.3.2009 08:29 Guest
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

V uvode by som este rozpisal, ktore subory treba downloadnut aby som mohol zacat robit QT sw.

3.3.2009 08:34 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Potřebuješ vývojové knihovny - přesné jméno balíčku závisí na distribuci, ale bude to něco jako libqt4-dev
Quando omni flunkus moritati
3.3.2009 08:53 Guest
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

A co tak original baliky z http://www.qtsoftware.com/downloads/opensource/appdev/linux-x11-cpp

Myslim ze to je univerzalnejsie riesenie.

alblaho avatar 3.3.2009 09:17 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Myslím, že kdo zná C++, zcela jistě umí napsat do google "qt4 download" a zdrojáky stáhnout.

A hlavně k tomu obvykle fakt není důvod. Všichni to máme v distribucích.
3.3.2009 08:35 J@rys | skóre: 11 | blog: Jarduv_blog
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

Konecne neco zajimavyho :-) - super clanek

3.3.2009 08:35 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Jak jsem již psal, libovolnou třídu Qt můžete zdědit a upravit si ji podle sebe. V následujícím příkladu vytvořím třídu MyObject založenou na QWidget, která poslouží jako hlavní okno programu.
Možná by bylo vhodnější začít rovnou hlavním oknem založeným na QMainWindow...
Quando omni flunkus moritati
David Watzke avatar 3.3.2009 09:21 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
V příštím díle to je.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.3.2009 09:22 Vlastimil Ott | skóre: 66 | blog: Plastique | Opava
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Nejsem programátor, ale tohle se mi jako téma líbí, takže se těším na telenovelu... :-)
Práce: Liberix, o.p.s. | Blog: OpensourceBlog.cz | Online kurz Zlatý WordPress
3.3.2009 09:48 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
jen aby to Davidovi vydrželo...
Kuolema Kaikille (Paitsi Meille).
David Ježek avatar 3.3.2009 11:12 David Ježek | skóre: 83 | blog: Mostly_IMDB
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
doufám, že ano, ač také neprogramátor, rád si tohle přečtu.
AsciiWolf avatar 3.3.2009 16:00 AsciiWolf | skóre: 40 | blog: Blog
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

Také se přidám... Nejsem programátor, nicméně tento článek mne zaujal a těším se na pokračování...

3.3.2009 09:53 xxxx
Rozbalit Rozbalit vše Qt je pro C++ nejlepsi
Odpovědět | Sbalit | Link | Blokovat | Admin

Qt jsem uz vicekrat pouzil a opravdu se mi libi, sloty jsou sice zasah do syntaxe C++, ale je to elegantni.
Qt miluju a dela z C++ dobrou platformu, naopak MFC pro Windows nenavidim.
Radeji delam GUI programy v Jave nebo kdyztak v C#, ale pouziti Qt s C++ je stejne elegantni.

 

3.3.2009 10:43 dad
Rozbalit Rozbalit vše Re: Qt je pro C++ nejlepsi

kdyz uz jste to s temi sloty nakousl - prepisovani anglickych podkladu do cestiny je zasluzna prace, ale vede to k tomu, ze se nedovime, proc je signal/slot mechanismus elegantni a jake vyhody a nevyhody ma vuci jinym mechanismum jako napr. target/message a callback. Ale mozna se to dovime v diskuzi.

3.3.2009 11:05 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Qt je pro C++ nejlepsi
Něco je napsáno v dokumentaci Qt.
When your hammer is C++, everything begins to look like a thumb.
3.3.2009 15:16 xxxx
Rozbalit Rozbalit vše Re: Qt je pro C++ nejlepsi

nejde mi o prepisovani dokumentace ani o rozvlacne popisy.
pouze jsem z pohledu nekoho kdo Qt uz pouzil sdelil svuj dojem,
ze sloty/signaly jsou v Qt pekne udelany a libi se mi, tedy
ze Qt doporucuji oproti jinym C++ frameworkum.

xkucf03 avatar 3.3.2009 16:10 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Qt je pro C++ nejlepsi

Mně se zase víc líbí posluchače (Java -- Swing), kromě jiného kvůli nim není potřeba ohýbat daný jazyk. Ale ty sloty+signály mají taky něco do sebe.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Bedňa avatar 3.3.2009 10:37 Bedňa | skóre: 34 | blog: Žumpa | Horňany
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

Veľmi pekné, len vydrž a namiesto jedno a dvojslabičných premenných daj radšej celé názvy, vždy je zrozumiteľnejšie window ako w, teraz je to v poho ale v ďaľších dieloch by sme sa v tom mohli stratiť :)

KERNEL ULTRAS video channel >>>
3.3.2009 10:46 Smajchl | skóre: 39 | blog: Drzy_Nazory | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
To je zuper! Něco takovýho bych chtěl umět :-)
My máme všechno co chcem, my máme dobrou náladu!
Jan Drábek avatar 3.3.2009 11:09 Jan Drábek | skóre: 41 | blog: Tartar | Brno
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

Super! Už se těším na další díly.

01010010 01000101 01010000 01101100 01001001 00110010 01000100 01100101 01010110
3.3.2009 11:14 MIlan Čermák
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

Setkal jsem se s tím v GTK++ a vidím stejnou věc i tady. Z jakého důvodu se třídy oken, tlačítek a jiných prvků dědí, místo aby se paramertizovaly jejich instance?

9.3.2009 21:45 gmo
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

to samé wxWidgets, jestli se nepletu

David Watzke avatar 9.3.2009 21:57 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Však to se taky dělá. Dědí se obvykle až když parametrizování nestačí.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
mirec avatar 3.3.2009 11:41 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Modálne / neaktívne okná
Odpovědět | Sbalit | Link | Blokovat | Admin
Keď už tu máme seriál chcel by som sa spýtať na takú drobnosť akou sú modálne okná. Potreboval by som v aplikácii naraz zablokovať všetky okná podobne ako sa to deje u modálnych okien (až na to, že nechcem zobrazovať ďalšie okno, malo by to byť počas ukladania, nechcem vtedy povoliť žiadne zmeny). Ako funguje mechanizmus modálnych okien? Dá sa to využiť aj bez modálneho okna? Napadlo ma setDisabled ale to je len pre jedno okno, prechádzať všetky okná z QApplication::topLevelWidgets a nastavovať im disabled sa mi tiež moc nepáči. Existuje na toto nejaké elegantné riešenie?
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
Grunt avatar 3.3.2009 11:53 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Qt 4 běží nejen na unixových operačních systémech (Linux, BSD), Windows a Mac OS X, ale i na nejrůznějších mobilních zařízeních.

Spíš by bylo vhodnější do toho nějak zakomponovat to, že Qt nevyžaduje ke svému běhu X Window System. Ale jinak moc pěkné.

Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
Algi avatar 3.3.2009 11:57 Algi | skóre: 1 | blog: Sinner
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Ono je to trochu nepřesné. Linux je Unix-like systém a Mac OS X spolu s BSD je Unix. Ale to už jsou drobnosti. Ale jinak se taky připojuju k chvále; moc pěkný článek :-)
I'm a firestarter, twisted firestarter...
Grunt avatar 3.3.2009 11:58 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

No já se zaměřoval na běh v těch mobilních zařízeních. To kde to je jede je vcelku irelevantní když se jedná o OSS.

Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
3.3.2009 19:07 Jirka
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

Podmnozina Qt bezi i v S60 (a tedy pod Symbianem). Bohuzel neni zatim naportovany D-BUS.

Jiří Němec avatar 3.3.2009 12:01 Jiří Němec | skóre: 22 | blog: BluPix | Horní Smrčné
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Skvěle načasované, dnes vyšlo Qt 4.5.0. Sice si s Qt už nějaký ten pátek hraju, ale stejně se moc těším na další díly.
Spock: "Logic, logic, logic. Logic is the beginning of wisdom, not the end.
3.3.2009 12:15 Jirka
Rozbalit Rozbalit vše Qt::RightButton or Qt::RightButton
Odpovědět | Sbalit | Link | Blokovat | Admin
Qt::RightButton or Qt::RightButton

bude nějaká vypečená programátorská konstrukce.

David Watzke avatar 3.3.2009 15:19 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
Nevím co přesně myslíš, tak odpovím na obě varianty. 1) v C++ je něco jako
#define or ||
2) buttons() odpovídá logický disjunkci (prostě OR) těch 2 (při doubleClicku) tlačítek, proto je tam 2x totéž
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.3.2009 18:29 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
Vedlejší efekt :(
3.3.2009 19:10 Jirka
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton

Me houpat muzes, ale ctenari stejne odhali, ze tam ma byt

Qt::RightButton or Qt::MidButton
3.3.2009 19:15 Jirka
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton

Oprava: Tedy ma tam byt jen ten jeden Qt::RightButton, resp. kdyz uz mermomoci chces or, tak

if(e->buttons() == (Qt::LeftButton or Qt::MidButton))

 

3.3.2009 21:20 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
Nemyslel jste spíš?
if(e->buttons() & (Qt::LeftButton | Qt::MidButton))
David Watzke avatar 3.3.2009 21:23 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.3.2009 21:44 Jirka
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton

Jak ted na to koukam, tak jsem ani nemyslel, co jsem napsal. Blamage.

3.3.2009 21:49 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
Šak to nic nevylučuje ;)
David Watzke avatar 3.3.2009 22:01 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
Aha, tak to celý vychází z toho, že jsem to nepochopil. Použil jsem prostě logickej OR místo bitovýho (a ano, uvědomuju si, jaká je to ostuda).
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.3.2009 22:49 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
Já bych doporučil stejně místo těch klíčkových slov jako 'or' 'and' 'xor' atd používat radši zaběhnuté || &&, atd. Možná díky tomu jste si toho nevšiml :)
3.3.2009 21:28 Jirka
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton

Ne.

3.3.2009 19:25 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
2) buttons() odpovídá logický disjunkci (prostě OR) těch 2 (při doubleClicku) tlačítek, proto je tam 2x totéž
To mi není jasný. Výraz (Qt::RightButton or Qt::RightButton == Qt::RightButton) nebude true?
David Watzke avatar 3.3.2009 19:30 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
Ježiš :-D No jsem tele.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Luboš Doležel (Doli) avatar 3.3.2009 19:27 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
2) buttons() odpovídá logický disjunkci (prostě OR) těch 2 (při doubleClicku) tlačítek, proto je tam 2x totéž
Tak to teda nechápu. Co přesně že tam má to OR dělat?
David Watzke avatar 3.3.2009 19:49 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Qt::RightButton or Qt::RightButton
Tak to oprav prosím tě.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.3.2009 12:19 Matlák
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

Tohle mě docela dostalo. Celkem nedávno jsem hledal platformu pro grafické aplikace v C++ a (já vůl) si vybral zastaralé wxWidgets. Mimo to že jsou nadstavbou GTK (a tedy jsou dost pomalé), zásah do syntaxe C++ je tu ještě větší. A propos, dostal mě ten "Hello world" na snad 20 řádků? Podobná "ukázka" ve wxWidgets si délkou nezadá z helloworldem pro čisté Win API :-D

Viliam Púčik avatar 3.3.2009 21:39 Viliam Púčik | skóre: 22 | blog: minimal
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Ono ani Hello World v "cistom" X Window System (pomocou Xlib) sa oproti Hello World vo Win API nemusi hanbit ;-)
Fluttershy, yay! avatar 3.3.2009 13:22 Fluttershy, yay! | skóre: 92 | blog:
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Super. Bude to pro Qt 4.5?
🇵🇸Touch grass🇺🇦 ✊ no gods, no masters
David Watzke avatar 3.3.2009 14:47 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
No tak jasně, je to kompatibilní. Jestli to využije nějaký nový funkce, to už je otázka jiná. Uvidím, třeba jo.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Rezza avatar 3.3.2009 13:44 Rezza | skóre: 25 | blog: rezza | Brno
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

 Nechci byt hnidopich, ale nenazyval bych to "grafickym programem", ale spis "programem s grafickym uzivatelskym rozhranim". Pravda, je to dlouhe, ale presnejsi. Preji hodne stesti, ja bych si o Qt neodvazil psat, je toho dost a zase tak dobry Qtista nejsem :D Jinak nam dnes zabili Qt Extended, hodlam forkovat, kdo se prida?

Grunt avatar 3.3.2009 13:57 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Jinak nam dnes zabili Qt Extended, hodlam forkovat, kdo se prida?

Proč?:

…selected features will be migrated into the Qt framework which will result in Qt becoming an even richer, cross-platform application framework.
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
mirec avatar 3.3.2009 14:19 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Qt Extended
Mimochodom bodlo by nejaké slušné prostredie pre Qt Extended. Minule som len tak zo srandy robil paralax scrolling s 360° pozadím (projekcia na valec s korekciou), na nejakom reálnom prístroji by to vyzeralo super ;)
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
13.3.2009 15:40 psonek | skóre: 20 | blog: psonek
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

 

 Jinak nam dnes zabili Qt Extended, hodlam forkovat, kdo se prida?

Podívej se http://www.abclinuxu.cz/openmoko Jsou tam odkazy na trac a GIT. Už jsem se přidal a užívám si QTE bez ozvěny :)

 

3.3.2009 14:11 xavier | skóre: 10 | blog: borkovo
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Dobrá práce. Akorát místo "ve stacku" a "v heapu" se v češtině používá "na zásobníku" a "na haldě".
David Watzke avatar 3.3.2009 14:48 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Tak to sorry, český názvy moc neznám, přijdou mi podivný.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.3.2009 14:54 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Halda je relativně běžné a zásobník zcela obvyklé.
Quando omni flunkus moritati
David Watzke avatar 3.3.2009 15:17 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Zásobník je OK, halda je podle mě divná :-) Ale už jsem to někde slyšel. Kdybych to psal česky, určitě by se taky někdo ozval, znám to...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.3.2009 15:53 fakenickname | skóre: 42 | blog: fakeblog
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
na FELu se učí halda, ..
4.3.2009 23:07 Radek | skóre: 14
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

Pamatuje ještě dokumentaci k Turbo Pascalu? V ní se mluvilo i o "hromadě".

xkucf03 avatar 4.3.2009 23:48 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

Pascal, hromada čeho? :-)

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Jardík avatar 4.3.2009 23:48 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Já znám jenom heap. Ve Win je funkce HeapAlloc a né HaldaAlloc či HromadaAlloc a proto je to heap a né halda/hromada, stejně jako Big Ben je Big Ben a né Velký Ben. Heap se dá i skloňovat. 1. pád heap, 2. bez heapu, 3. k heapu, atd .... :-)
Věřím v jednoho Boha.
xkucf03 avatar 5.3.2009 00:00 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

Jenže překládat Big Ben by bylo jako překládat Jardík (vlastní jméno), zatímco ostatní podstatná jména se normálně překládají (mouse → myš, class → třída atd.) :-)

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Jardík avatar 5.3.2009 15:11 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Tak je pravda, ze nerikam "vytvorim si classu" ale heap je heap a nikdo mi to neberte :-]
Věřím v jednoho Boha.
5.3.2009 08:47 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Ve Win je funkce HeapAlloc a né HaldaAlloc či HromadaAlloc a proto je to heap
A podle Céčka je to zase m, s touhle argumentací běž do háje.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
3.3.2009 18:10 h.xman | skóre: 10
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Akorát místo "ve stacku" a "v heapu" se v češtině používá "na zásobníku" a "na haldě".
Obávám se že teď někoho naštvu, ale hlasoval bych spíš za počešťování anglických názvů než za doslovné překládání. Když se člověk naučí něco z českého návodu a pak pak třebas hledá konkrétní řešení v anglických diskusích, tak aspoň hned ví co je co, i když není zrovna expert. Podle mě je to obohacení češtiny a považuji to za normální - je to o zvyku, "profesionál" nebo "informatik" taky už dnes nikomu nepřijdou divné.

Těším se na další pokračování, taky doufám že z toho bude telenovela o Qt - to téma má velký potenciál a mohlo by vydržet opravdu na dlouho.

Pro poutníky mezi vámi: Camino de Santiago
3.3.2009 17:34 peruik
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

Mockrát děkuji za článek a také doufám, že z toho bude megaseriál.

3.3.2009 18:35 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Vlákna
Odpovědět | Sbalit | Link | Blokovat | Admin
Zásadní otázka: Je Qt thread-safe? Jak snadno se dělá program, který má uživatelské rozhraní asynchronní vzhledem k výkonným částem?
David Watzke avatar 3.3.2009 18:47 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Vlákna
Částečně - relevantní třídy jsou obvykle thread-safe a na zbytek je tu QMutex a přátelé.

A vcelku snadno. Viz http://doc.trolltech.com/threads.html.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.3.2009 18:50 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Vlákna
Jj, dělá se to pomocí QThread. Dobrým příkladem je Mandelbrot example z Qt examples & demos. V hlavním threadu jede GUI a počítání probíhá v dalším - viz tady.
mirec avatar 3.3.2009 19:06 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Vlákna
Qt podporuje ako nízkoúrovňové mutexy tak aj vysokoúroňové rozhranie Qt Concurrent (ukážka použitia).
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
3.3.2009 21:24 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Vlákna
U většiny objektů/funkcí je v dokumentaci přímo napsáno, jestli je daný objekt thread safe nebo ne.
Quando omni flunkus moritati
Saljack avatar 3.3.2009 19:17 Saljack | skóre: 28 | blog: Saljack | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Moc dík. Zrovna co se začnu učit Qt, tak se na abíčku objeví seriál o Qt. Fakt moc dík a doufám, že bude hodně dílů.
Sex, Drugs & Rock´n Roll.
Saljack avatar 3.3.2009 19:19 Saljack | skóre: 28 | blog: Saljack | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Můžu se zeptat zda je dobré používat QString QList atp. ? Nebo je lepší používat jenom c++
Sex, Drugs & Rock´n Roll.
3.3.2009 19:22 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Určitě to je dobré pro většinu účelů...
mirec avatar 3.3.2009 19:23 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Výkonové rozdiely nie sú veľké, pri použití s Qt je tu navyše integrácia a jednoduchosť použitia (odporúčam porovnať tieto triedy). Okrem toho pri zobrazovaní treba ručne vytvárať QString z std::string-u čo môže spôsobovať problémy s diakritikou (v prípade, že si užívateľ nedá pozor na fromUtf8).
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
11.3.2009 14:38 Bert | skóre: 15
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

Taky mockrát díky za seriál.

Jsem tzv. věčný začátečník a tohle mě určitě znovu nakopne něco se naučit.

Máte někdo praktické zkušenosti s Qt Creatorem? Konkrétně s verzí 1.0.0?

David Watzke avatar 11.3.2009 14:46 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
No dělám v tom a je to fajn, nevím co bys chtěl slyšet :-) Doplňuje to názvy metod, má to vestavěnou nápovědu a Qt Designer, podporuje to všelijaký verzovací systémy...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
12.3.2009 16:19 Bert | skóre: 15
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

Chtěl jsem jen vědět od někoho erudovaného a kovaného v QT jak je tahle jedničková verze použitelná pro běžného C++ a QT BFU :-).

 Líbí se mi hlavně spolupráce s integrovaným Qt designerem. Jeden čas jsem zkoušel Eclipse a Codeblocks a trápil jsem se s nastavením cest a  parametrů.

Tady je vše celkem přehledné a jasné . Ale jak říkám, jsem věčný začátečník a každopádně vítám tenhle seriál a těším se na další pokračování. Nezlobil bych se kdyby

byly další díly trošku "upovídanější" a "polopatičtější pro nás pomaleji chápající :-).

12.3.2009 18:21 Radek | skóre: 14
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

 

Chtěl jsem jen vědět od někoho erudovaného a kovaného v QT jak je tahle jedničková verze použitelná pro běžného C++ a QT BFU :-).

Ohledně QT jsem úplný BFU, ale snad tím spíš můžu říct, že právě pro BFU je Creator použitelný velmi dobře. :-) Hlavně není potřeba nic konfigurovat, prostě vše funguje.

 

14.3.2009 12:40 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Jeden čas jsem zkoušel Eclipse a Codeblocks a trápil jsem se s nastavením cest a  parametrů.
Jj, to byl dost děs. Pužíval jsem Code::Blocks než vytvořili QtCreator a doplňování QTříd mi nikdy nefungovalo 100%. No Qt Creator to pořešil. Taky je na něm dobrý, že se do něj dá nastavit vícero verzí Qt a u každého projektu kdykoli zvolit proti které verzi se má kompilovat.
3.3.2009 20:16 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

Jen dodam, ze klicova slova signals a slots v hlavickovych souborech stejne jako emit v implementaci je vhodne nahrazovat makry Q_SIGNALS, Q_SLOTS a Q_EMIT. Umozni to pozdeji pouzit zdrojaky v projektech se signal/slot mechanismy tretich stran. V nejhorsim pripade budou tyto makra alespon viditelnejsi v editoru, ktery zvyraznuje syntaxi C++, ale nezna klicove slova Qt (cili vetsina).

David Watzke avatar 3.3.2009 20:25 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
To je vhodný, pokud něco takovýho člověk plánuje dělat, to je fakt, ale jinak to nemá valnej význam používat (v drtivý většině případů).
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
5.3.2009 13:34 Lojza
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

 Jo jo, takovejch projektů už jsem viděl, co v nich nemělo valnej smysl od začátku používat logckéa  rozumné věci ...

David Watzke avatar 5.3.2009 14:56 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Vždyť je to prkotina, která se dá vždycky naprosto jednoduše nahradit. Pochybuju, že by to dělalo problémy zrovna někomu, kdo se chystá používat jinej signal/slot mechanismus.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Jardík avatar 3.3.2009 23:51 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
QApplication app(argc, argv);

MyWindow w;
w.show();

// qApp je globální ukazatel na instanci QApplication
// qApp->exec() je zde totéž jako app.exec()
return qApp->exec();
To nevypadá thread-safe. Když před řádkem QApplication app(argc, argv); vytvořím nový thread a v něm zavolám qApp->exec() tak se to asi může pokakat jestli se qApp nastaví až v konstruktoru QApplication.
Věřím v jednoho Boha.
David Watzke avatar 4.3.2009 00:01 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Jenže instanci QApplication má Qt program jen jednu.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Jardík avatar 4.3.2009 00:04 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Ano, ale jestli to tach chápu, tak to QApplication app(blabla) v konstruktoru nastaví globální qApp ukazatel na &app (?). Nebo se to vytvoří při inicializaci knihovny a v app bude jakási "reference"?
Věřím v jednoho Boha.
Jardík avatar 4.3.2009 00:05 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
tach se čte tak :-)
Věřím v jednoho Boha.
Jardík avatar 4.3.2009 00:06 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
A stejně ta moje věca nedává smysl. Takže "tach" se čte "dobře".
Věřím v jednoho Boha.
Jardík avatar 4.3.2009 00:07 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Bože, Jardo, nauč se psát. To mi někdo asi odchytává traffic a mění mi písmenka ...
Věřím v jednoho Boha.
Jardík avatar 4.3.2009 00:09 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Tomu se říká monolog?
Věřím v jednoho Boha.
David Watzke avatar 4.3.2009 00:09 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Tak jsem to zkusil vypsat pomocí qDebug() ještě před vytvořením QApplication a vypsalo to QObject(0x0), takže tak. Nespadne to, ale řekne to
QApplication::exec: Please instantiate the QApplication object first
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Jardík avatar 4.3.2009 00:11 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Hmm, tak jsem utřel :-(
Věřím v jednoho Boha.
David Watzke avatar 4.3.2009 00:06 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Moment, to jsem reagoval z cesty. Chtěl jsem říct, že QApplication je obvykle první věc, kterou vytvoříš. Jinak je to asi pravda, no... takovou věc jsem nezkoušel.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Jardík avatar 4.3.2009 00:08 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Neva, já stejně jenom rejpu :-)
Věřím v jednoho Boha.
4.3.2009 08:32 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Ona je otázka, proč vůbec použít qApp->exec() místo app.exec()
Quando omni flunkus moritati
4.3.2009 09:45 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

Abys nemusel tahat ukazatel na lokalni promennou fce main() po cele aplikaci jako argument vsech metod? Je to bezpecne minimalne pro cteni.

Nicmene prima zmena vlastnosti tridy QApplication z vice vlaken soucasne by mohla natropit vice skody nez uzitku, v dokumentaci totiz neni zminka "vlaknove bezpecnosti" (zdrojaky ted nemam k dispozici). Bezpecnou cestou je uziti signal/slot mechanismu mezi vlakny a napojit tak napr. QTimer s nulovym intervalem na slot QApplication (tech je ale dost malo, protoze vetsina metod je statickych :-( )

David Watzke avatar 4.3.2009 10:46 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
No v tomhle případě je to na nic, ale pak když chceš propojit nějakej slot, tak se to hodí.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
5.3.2009 11:57 mirrec | blog: mirrec
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

kedy sa mozeme tesit na dalsi diel serialu ? :-)

David Watzke avatar 5.3.2009 14:53 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
No, napsanej a odeslanej už je, takže to je na redakci.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
8.3.2009 23:10 Pavol | skóre: 12
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

Tak som stravil 10 minut hladanim, ako skompilovat hello world a zistil som, zetreba pouzit qmake-qt4 namiesto qmake, v opacnom pripade nevedel najst hlavickove subory. Mozno tato informacia usetri cas podobnemu totalnemu zaciatocnikovi ako som ja :)

xkucf03 avatar 8.3.2009 23:32 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

A pokud máte stejné distro jako já, výchozí qmake se nastavuje tímhle příkazem:

sudo update-alternatives --config qmake
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
David Watzke avatar 8.3.2009 23:34 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Tohle je problém konkrétní distribuce, s Qt to nijak nesouvisí.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
mirec avatar 9.3.2009 08:43 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
No toto chovanie ma pekne štve. Moja distribúcia síce nemá qmake-qt4 ale iba qmake (čo sa mi páči) ale niektorí programátori ktorí majú iné distribúcie automaticky predpokladajú, že tam bude dostupné qmake-qt4. No asi nemusím hovoriť ako ťažko sa robí ebuild na takýto program.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
the.max avatar 9.3.2009 16:31 the.max | skóre: 46 | blog: Smetiště
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
No hrozně těžko, dáš tam jeden sed :-D
KERNEL ULTRAS Fan Team || Sabaton - nejlepší učitel dějepisu || Gentoo - dokud nás systemd nerozdělí.
12.4.2009 00:28 http://zacatecnik.wu.cz
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin

connect není metoda, ale makro, ale to je jen kosmetika :)

David Watzke avatar 12.4.2009 00:36 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Je to veřejná metoda třídy QObject, viz dokumentaci. Leda že bys o tom teda věděl víc, než lidi co to naprogramovali. Samozřejmě, že celý signály a sloty jsou mnohem složitější, než se programátorovi může zdát (četl jsem o tom dost), o tom se nehádám.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
12.4.2009 07:47 http://zacatecnik.wu.cz
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

Nechce se mi to googlit, ale prostě vím, že je to makro. Jediné čím ti to mohu podložit jsou má vysokoškolská skripta a náš doktor informatiky programuje asi 15-20 let, takže bych tam chybu neviděl :-)

12.4.2009 07:50 http://zacatecnik.wu.cz
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

Není třeba to googlit nebo hledat, je to jen slovíčkaření- jedná se o vnitřní implementaci. Voni do dokumentace to asi píšou pro pochopení ne pro super přesnost, či jak to vnitřně implmentují... Je to třeba jako ve WindowsAPI MessageBox to je taky makro, které se rozvine do MessageBoxA (ANSI verze), MessageBoxW (Unicode verze). Ahoj

David Watzke avatar 12.4.2009 10:42 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
No vidíš, i takovej člověk se může splést :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
mirec avatar 12.4.2009 09:04 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
    static bool connect(const QObject *sender, const char *signal,
                        const QObject *receiver, const char *member ...
Časť hlavičkového súboru qobject.h, connect je skutočne metóda, makrá sú SIGNAL a SLOT.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
12.4.2009 23:18 http://zacatecnik.wu.cz
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)

tak mi to nedalo a prolezl jsem celou tu kapitolu ve skriptech a je tam na dvou místech: makro i metoda, takže se zdá se vloudila malá chybička a já vás tu tedy prudím... ale to neva, alespoň to pomohl k objevu chyby :o)

22.10.2011 03:56 Michal
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
Ahoj, ucim se s Qt a nemuzu zkompilovat tento program ani kdyz jsem prekopiroval zdrojak primo odsud. chyba je " undefined reference to 'vtable for MyButton' " v konstruktoru MyButton::MyButton(QPushButton*). Nevite co s tim prosim? Diky
David Watzke avatar 22.10.2011 13:19 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Ahoj, no to je zvláštní. Já jsem si teď vytvořil prázdný adresář, do nově vytvořených souborů mybutton.h, mybutton.cpp a main.cc jsem vložil obsah z článku, spustil jsem
qmake -project
qmake
make
a přeložilo se to bez problémů.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
25.6.2016 22:20 ElTomas
Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 1 (úvod, hello world)
Odpovědět | Sbalit | Link | Blokovat | Admin
A jak to zkompiluju? Me třeba funguje g++ main.cc $(pkg-config --cflags --libs QtGui)

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.