Anonymní profil crow – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil crow – Programujte.comAnonymní profil crow – Programujte.com

 

Příspěvky odeslané z IP adresy 46.183.64.–

C / C++ › Jak mám napsat v C++
26. 6. 2012   #159542

a co konkrétně nevíš nebo ti to snad máme celý napsat?

C / C++ › * pointer
21. 6. 2012   #159379

Jen bych možná ještě dodal, že konstatní hodnotu lze změnit na kompilátoru gcc, ale novější g++ to už zakazuje... čili to jak jste tu měli..

const int a = 10;

*((int*)&a) = 20; // bude fungovat na gcc kompilátoru

Nelsem si ale jistej, jestli novější gcc to už taky neopravilo, dřív mi to fungovalo

.NET › Změna ikony v c#
17. 5. 2012   #158071

To bude spíš chyba v systému, zkus to .exe skopírovat do jinýho systému, jestli to udělá taky (nemělo by)

A ikonu by mělo stačít dát pouze 128x128, samo by si to mělo změnšit dle potřeby a větší ikona není potřeba

C / C++ › getch() s timeoutem v C
16. 5. 2012   #158006

Udělěj nový vlákno, kde bude cyklus s těma řádkama a sleepem a jako podmínku dej ref. na bool (nebo jinak), co budeš moct změnit na false a ukončit tak cyklus i vlákno

C / C++ › vypsání části char*
16. 5. 2012   #157997

 Takto?

#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
{
char* cisla = "3466856834235760756745636487";

// vypise cisla od indexu 5 az 10
for_each(cisla + 5, cisla + 10, [&](char c) { cout << c; });
return 0;
}

A pokud máš pole charů jako char* (přes ukazatel) tak nejde použít sizeof() ale jedině strlen() a doporučuju spíš použít nějakej buffer, pokud ten text není konstanta

C / C++ › Program v c-ohmov zakon
11. 5. 2012   #157807

#13 mato1168
Když nechceš aby na konci bylo to "Press any key..." tak mužeš zneužít conio

#include "conio.h"

int main()
{
    ...

    while (!kbhit());
    return 0;
}
C / C++ › kompletní práce c++ (odměna…
10. 5. 2012   #157728

nemám, ja všechny C++ mám hotový už :)

Spíš mám problém si představit, jak to vlastně má vypadat (graficky).

Jen, že to nejspíš budu dělat kámoši jestli bude čas, tak proto mi je to zadání nějaky povědomí :)

C / C++ › Vypsání výsledku dynamické m…
9. 5. 2012   #157674

#6 Noob in C
Takže pokud chápu dobře, tak to co má on to máš mít i ty, ale kvůli tomu, že on používá matici místo pole, tak ty chceš pole aby to nevypadalo divně?

Pokud ano, tak to je blbost.. udělej matici, tak to dělá každej pokud máš dělat matici :)

Čim kratší kód, tim větší pravděpodobnost shody s jiným... jinak jsem ti to upravil, jak by to správně mělo být, takže to nejenom budeš mít dobře, ale nebudeš to mít i stejný 

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main(int argc, char* argv[])
{
	int i, j, radky, sloupce;
	int** matice = 0;

	srand((unsigned int)time(0));

	printf("Zadejte pocet radku: ");
	scanf("%d", &radky);

	printf("Zadejte pocet sloupcu: ");
	scanf("%d", &sloupce);

	matice = (int**) calloc(radky, sizeof(int*));

	for (i = 0; i < radky; i++)
		*(matice + i) = (int*) calloc(sloupce, sizeof(int));

	for (i = 0; i < radky; i++)
	{
		for (j = 0; j < sloupce; j++)
		{
			*(*(matice + i) + j) = 10 + rand() % 90;
			printf("%4d", *(*(matice + i) + j));
		}
		printf("\n");
	}
	free(matice);
	return 0;
}
C / C++ › S cím dřív začít ?
9. 5. 2012   #157668

možná chápu na co narážíš...

nepleť si C# a C++... cin.get(); je z C++ a nemá žádný složený závorky (pokud myslíš kulatý), tak z toho důvodu, že get() je funkce

ale v C# to je úplně stejný jako všude jinde... pokud podmínka vykonává více, než jednu věc, která je oddělena středníkem, tak musíš dát složený závorky (uzavřít to do bloku) v každým jazyce snad nevyjímaje Javy

Udělám ukázku základní konzolový app v C# a předem se omlouvám, že to píšu jak pro blbí :) 

// něco jako "using namespace std" v C++,
// jinak by se všude muselo psát System.XYZ
using System;

// jmenej prostor, ve kterém je "root" programu
// musí se použít všude (pokud vytvoříš novou složku,
// tak stejně jako v jave se přidá pod-prostor.. třeba
// jako Bagr.Slozka apod.
namespace Bagr
{
    // C# je kompletně OOP, takže v každým souboru musí být
    // nějaký objekt (class,interface,enum,struct...)
    // toto je hlavni název třídy programu (lze přejmenovat)
    // a modifikátor "internal" je pro použití pouze z tohoto
    // programu
    internal class Program
    {
        // privátní proměnná (statická kvůli tomu, že hlavní
        // funkce Main je statická)
        private static int cislo;

        // hlavní funkce Main() stejná jako všude (Java, C++ apod.)
        private static void Main(string[] args)
        {
            // vypsání textu
            Console.Write("Zadej čislo: ");

            // převod vstupu na číslo (bez ošetření)
            cislo = int.Parse(Console.ReadLine());

            // podmínka bez složených závorek, protože nejsou potřeba
            if (cislo > 10)
                cislo += 1;

            Console.WriteLine(cislo); // vypíše číslo
            Console.ReadKey(); // obdoba cin.get(), getchar() ...
        } // ukončuje funkci Main()
    } // ukončuje hlavní třídu
} // ukončuje hlavní prostor

A pokud jde o lamby výrazy, tak tady se možná ptáš proč složený závorky.. něco jako 

// list pro 10 čísel
List<int> cisla = new List<int>(10);

// přidá 5 hodnot
cisla.AddRange(new int[] { 1, 2, 3, 4, 5 });

// přes lambdu vypíše do konzole list čísel
cisla.ForEach(c => { Console.WriteLine(c); });

C / C++ › kompletní práce c++ (odměna…
9. 5. 2012   #157666
C / C++ › Vypsání výsledku dynamické m…
9. 5. 2012   #157665

1) nechápu, proč máš 2 ukazatele, co ukazujou na stejný místo

2) vypsat myslíš tak, aby to mělo formát matice? v tom případě musíš za každej řádek hodit "\n" a pokud to máš všechno v poli místo v matici, tak to uděláš jak když znáš rozměry matice? :)

C / C++ › hledá se vývojář programu 2
9. 5. 2012   #157664

#67 ninja řízek
a kde si vzal, že hodnotim každýho špatně? já od začátku mluvim o tobě a reaguju hlavně na to, co napíšeš...

C / C++ › S cím dřív začít ?
9. 5. 2012   #157661

#19 tečka
můžeš bejt konkrétnější, co tě rozesmálo? =)

Edit: Aha chápu... ty si velkej zástance "kvalitního" jazyku Java že? A já ti ho tady pomlouvám.. jako sry, ale Java jde úplně jinou evoluční cestou... a co se týče OOP, tak je lepší C#, kterej je též kompletně OOP... Java je jen cross-platform, jediná výhoda z milionu .. :P

C / C++ › S cím dřív začít ?
9. 5. 2012   #157658

Každej jazyk má své kouzlo... každej jazyk, kterej začínáš víc a líp poznávat, tak tě vtáhne do sebe a "zakoření se v tobě" =)

Já začínal na Javě, to mě ale nějak nechytlo, ať už vzhled syntax, funkce, paměťová náročnost za*raný .jar(ky) apod... další byl na řadě čisté C, to už mělo do sebe ale nebylo to ono, potom jsem chtěl dělat v GUI, takže jsem trochu odmigroval k .NET, k C#, to mě dost chytlo, prostě nádherná syntax, výborná směs mezi Javou a C++, krom toho není problém použít v C# C++... no a poslední bylo C++, který jsem si pak rozšířil o Qt framework, a dneska můžu říct, že C++Qt a C# jsou nejlepší jazyky (frameworky pokud chcete)

Jinak máš odemě +, protože holka a programování, to jsou kolikrát protiklady :)

C / C++ › S cím dřív začít ?
9. 5. 2012   #157634

#6 Lucinka
Win aplikaci můžeš udělat v několika jazykách, né jenom v C++. C++ patří podle mě mezi ty těžší jazyky, takže pokud chceš spíš modelovat a baví tě to, tak neni moc na místě se učit C++, ale spíš ten python

on každej vyšší jazyk má stejnej základ jako C++, takže je celkem jednom v jakým jazyku začneš, tady jsou rozdíly hlavně ve správě paměti a hodně se využívají ukazatelé/reference apod. takže jestli zvolíš C++, .NET, Javu, tak všude je to ostatní stejný

Otázka ale je, k čemu přesně chceš využít ten jazyk pro GUI app, to si stále neřekla... jestli na zobrazení modelů, tvorbu her + tvý modely.. ja nevim, řekni ty :)

C / C++ › S cím dřív začít ?
9. 5. 2012   #157630

Ono záleží, co Cinema 4D využívá, vim určitě že lze psát vlastní scripty, ale nevim co to je za jazyk ale přes XPresso se "programuje" graficky, mám dojem, že existuje i scriptovací nastavba

Ale to by spíš patřilo do sekce Cinema 4D už :)

Ale pokud chceš app pro win, tak bych šlo jedině dělat hru a použít vlastní modely z Cinemy, jinak využití nějak nevidim, modelování a tvorba app jsou odlišný věci

C / C++ › S cím dřív začít ?
9. 5. 2012   #157627

#1 Lucinka
Moje rada by byla asi taková...

pokud chceš dělat weby, tak tvému současnéme HTML přidej PHP, XML a klidně ten Perl (ale ten spíš přeskoč úplně), ale budeš se muset doučit aspoň základ Javascriptu + CSS

a pokud chceš dělat aplikace, tak se rozhodni mezi C++ a .NET (C++/CLI, C#), tady je to spíš v čem se ti bude dělat líp a bude tě eventuálně bavit

C / C++ › Nesprávný výsledek kvadratic…
9. 5. 2012   #157620

#12 bob
jj, ale správně by to ale měl napsat jako: 

int A = d > 0 ? 1 : !d ? 2 : d < 0 ? 3 : 0;
C / C++ › Nesprávný výsledek kvadratic…
9. 5. 2012   #157618

#9 bob
ale on nenásobí nic s 0.3 :)

Pokud má:

int A = (1*(d>0)) + (2*(d==0)) + (3*(d<0));

a pak.. d = 0.3; tak...

0.3>0 = true = 1 =1*1 = 1 => A = 1 :) ostatní co se provede je bezcenný, protože podmínky selžou a 2*0 nebo 3*0 = 0 a 1+0+0 = nečekaně 1 :)

.NET › Konzole log s možností psát…
9. 5. 2012   #157616

Jo dík, přesně tohle jsem myslel :-)

.NET › Asynchronní metody
9. 5. 2012   #157605

#6 RePRO
A co ti brání si napsat vlastní metodu Send, která bude asynchroní, pokud jí teda chceš mít aync

Jinak takto nějak by to mohlo fungovat, jen bych dodal, že u toho 6. bodu, se BeginReceive musí zavolat vždy, pokud jde o callback, nevolá se pouze v případech, kdy se třeba klient odpojil, protože BeginReceive přijímá od každého klienta (soketu) zvlášť

PS: V C# 5.0 budou klíčový slova wait a async, který jednoduše nastavějí metodu na asynchronní, takže tenhle problém (nebo spíš komplikovanější řešení) se bude moct obejít

.NET › Asynchronní metody
8. 5. 2012   #157593

Zkusim to taky trochu popsat.

Hlavní vlákno - je vlákno, na kterým běží celá app a pokud vtyvoříš nějaký vlastní vlákna nebo async metody, tak se vytvářejí subvlákna (vedlejší vlákna)

Vedlejší vlákno - Tvoje vlákna nebo async metody, pokud je ukončíš, tak app bude stále běžet, protože ta má vlastní (hlavní) vlákno

Tohle si můžeš představit jako nějakej kabel třeba koaxial, kde uprostřed je hlavní vlákno a je obalenej vedlejšími

Synchronní metoda je klasická metoda... taková metoda po zavolání blokne program do doby, dokud neskončí

Asynchronní metody je trochu jiná, po zavolání se na pozadí vytvoří vlákno, ve kterým běží a po skonšení metody se vlákno dealokuje.. takže program nečeká na skončení metody, ale pokračuje dál

BeginReceive - má nějaký parametry a jeden parametr je callback, callback volá název metody, která se má chovat jako asynchroní

EndReceive - volá se v callback funkci na async result parametr a ukončuje async volání.. ale na konci této callback funkce je nutné opět zavolat BeginReceive (callback metoda volá sama sebe), aby se tato metoda zavolala opět async

callback - sice jsem již zmínil, ale callback metoda je taková metoda, která se volá asynchroně (volá sama sebe přes BeginReceive)

Co je blokovaný a co ne jsem napsal jako první a metoda Send.., tato metoda může volat BeginWrite asynchroně, ale nebude se chovat jako callback, protože data pouze zapíše do streamu, ale nezavolá se znovu už

Doufám, že už je to trochu jasný =)

C / C++ › hledá se vývojář programu 2
8. 5. 2012   #157589

#61 ninja řízek
Wau,

teď si mě odhalil, ale dovolim si tě trochu opravit, protože jediný v čem máš pravdu je ta část - "ale pravda je taková že se chováš jako opravdový člověk"

Čirou náhodou mám pro tebe taky 5 bodů (sice jich by bylo víc, ale nebudu přehánět):

1) Hovado, který má hlavu v oblacích a i přes dobrý rady s ní nehne

2) Pokud tam nevidiš chybu, tak zvol jinej koníček a nech programování / kódování na jiných (i když u tebe se nedá říct ani jedno)

3) Chybí ti základní logický uvažování

4) Nedokážeš vzít kritiku a ani neuznáš názor jiných

5) Chybějí ti zkušenosti a sereš se do něčeho o čem nemáš ani páru

Tato diskuze je pro mě horror? Pokud tu ses ty, tak spis parodie s lehkou špetkou drama.

PS: Můžete to někdo zamknout? Nějak toto téma ztrácí smysl už...

Java › Server - Klient nemohou se s…
3. 5. 2012   #157317

Pokud to bude opravdu portem, tak zkus port 80, to by nemělo snad žádnýmu firewallu apod. vadit, případně se zkus připojit na server přes telnet, jestli to půjde vůbec

C / C++ › Načtení konkrétního textu ze…
3. 5. 2012   #157289

Spíš takto nějak jsem to myslel.. jinak šlo by líp udělat zjištění velikosti pole dle počtu řádků v souboru (bez cyklu), ale to se mi dělat nechtělo už a taky se mi nechtělo odebírání mezer v těch názvech... to si už snad uděláš sám

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* parseMainPart(const char* delim, char* dest)
{
	char* res = strtok(dest, delim);
	return res ? res : 0;
}

char* parseWord(const char* delim, char* dest)
{
	char* res = strtok(dest, delim);
	char* last = 0;

	while (res)
	{
		last = res;
		res = strtok(0, delim);
	}
	return last ? last : 0;
}

void readFile(const char* file)
{
	FILE* f = fopen(file, "r");
	char buffer[1024];
	char* words[256];
	int i = 0;

	while (1)
	{
		char* line = fgets(buffer, sizeof(buffer), f);
		line = parseMainPart("^", line);
		line = parseWord("0", line);

		if (line)
		{
			*(words + i) = (char*) calloc(strlen(line), sizeof(char));
			strcpy(*(words + i++), line);
		}
		else break;
	}

	// ve "words" jsou vsechny nazvy s mezerama
}

int main()
{
	readFile("data.txt");

	getchar();
	return 0;
}
C / C++ › Načtení konkrétního textu ze…
2. 5. 2012   #157284

však to je jednoduchý, projdeš celej soubor po řádcích a budeš pársovat prvně číslo 2000, čím dostaneš pole o 2 prvcích, kde první je všechno předtim (to nepotřebuješ) a druhý je "mezera TEXT ...^", takže ted opět projedes parse ale na znak ^, kterej ukončuje TEXT a whoala, máš TEXT :D

Doporučuju parsovat podle char* tmp = strtok(str,delim);

C / C++ › Načtení konkrétního textu ze…
2. 5. 2012   #157282

Soubor data.txt je chráněn heslem.

jinak to je C nebo C++ ?

C / C++ › Prosím o radu s Timerem
2. 5. 2012   #157278

#3 Trujan
okno_Tick je název funkce, která se stará o update, ale myslim název proměnný pro Timer

C / C++ › Prosím o radu s Timerem
2. 5. 2012   #157276

A co třeba prostě stopnout timer? Pokud má timer název proměnný třeba "timer", tak jednoduše timer->Stop();

A pokud děláš v ALT projektu, tak koukej po tutoriálech na C#, těch je víc

.NET › Podmínka na int
2. 5. 2012   #157268

#5 Mutagen
nz.. hold jsem zákeřnej  

.NET › Podmínka na int
2. 5. 2012   #157265

#3 Mutagen
však jsem ti to teď napsal... prostě si vytvoříš událost TextChange nebo jestli to máš na tlačítko nevim... a zavoláš to ošetření přes regex, který jsem psal.. to ti samo zjistí, jestli to obsahuje pouze čísla, pokud tam bude jinej znak než 0-9, tak vrací false

C / C++ › Posunutí myši
2. 5. 2012   #157264
.NET › Podmínka na int
2. 5. 2012   #157257

Možností je několik, ale já si myslim, že je to nejlepší přes regex... přečti si něco o tom  - http://www.dotnetperls.com/regex-match máš tam i příklady ;)

Ale mělo by jít použít něco jako:

Regex regex = new Regex(@"^\d$");

if (regex.IsMatch(textBox.Text))
{ 
    // obsahuje pouze cisla
}
C / C++ › Posunutí myši
2. 5. 2012   #157256

#1 DV
Uchopíš myš do ruky (záleží zda jsi pravák nebo levák) a pozvolným pohybem do potřebné strany táhneš myš a měla by se na monitoru projevit událost jako pohyb myši. ;)

C / C++ › Úprava programu
24. 4. 2012   #157020

#7 Ondřej
hoď to do koše a začno znova a sám ;) s tímhle ti nikdo nepomůže, to je jak hledat jehlu v kupce sena

C / C++ › Úprava programu
24. 4. 2012   #157018

aha, tak nevim, něco mi přijde z c++/cli, ale něco tam ani neni, když teď na to koukám líp... nějaká mutace C :o)

C / C++ › Úprava programu
24. 4. 2012   #157016

#4 vitamin
je to v C++/CLI

Ondřej: né, díky

C / C++ › Úprava programu
24. 4. 2012   #157012

Ten, kdo by byl ochotnej procházet tvůj přiloženej kód je buď šílenej nebo blbej... nemá to ani minimální úpravu, odřádkování apod.

a přijde mi, že si z nás děláš legraci.. takto by to nenapsala ani úplná lama a taky mi přijde, že si to schválně takto psal

C / C++ › C# => C++
19. 4. 2012   #156819

já žádnou takovou knihu neznám, ale zkus normální knihu o c++, třeba Mistrovství v C++ (mě teď napadlo jako první), to je snad 900 stránková bible a co budeš znát, tak proskoč, sice nějakou první stovku stránek pravděpodobně přeskočíš, ale určitě se tam nejde něco, co by si měl znát a co v C# není nebo není potřeba díky frameworku

C / C++ › C# => C++
19. 4. 2012   #156811

mám dojem, že nic takovýho neni, C# je taková kopie Javy od MS a pokud chceš na C++, tak se potřebuješ naučit to samí, jako někdo, kdo v C# nedělá... sice máš tu výhodu, že pravděpodobně znáš dobře OOP, na kterým je C# postavenej a některou logiku, takže už to nebude tak náročný

ale pokud znáš dobře C#, tak určitě ulítneš na Qt a většinu znalostí můžeš využít tam, ale tak či tak se musíš naučit práci s ukazateli, referencí, prácí s pamětí a aspoň základ std knihoven

osobně si ale myslim, že časem se stejne vrátíš k C#, sám jsem v tom nějakej rok dělal a je to prostě úžasnej jazyk

C / C++ › Jak seřadit hodnoty v QMap<Q…
19. 4. 2012   #156806

mno nevim, asi stejně nechám to moje, tak či tak bych musel mít stejně cyklus, kterej by to cpal do jinýho pole a ta priority_queue tipuju, že to seřazuje vždy, při přidání nového prvků, takže si moc nevyberu, ale i tak dík :)

C / C++ › Potřebuju detailně vysvětlit…
19. 4. 2012   #156805

Můžete mi někdo prosím vysvětlit, k čemu jsou dobrý fce binder1st a binder2nd a jakej je mezi nimi rozdíl?

Četl jsem sice dokumentaci a koukal na jejich příklady, ale stejně to nějak nemůžu pochopit, když jsem to nepoužil, tak mi vyšlo stejně to, co jsem potřeboval, takže to je celkem zbytečných pár řádků navíc si myslim

Potřeboval bych jednoduše (polopatě) vysvetlit toto:

1) Jakej je mezi nimi rozdíl
2) K čemu se používají
3) Kdy bych je mohl/musel použít a kdy ne a pokud ne, tak proč
4) Nějaký příklady z praxe

Díky

C / C++ › Jak seřadit hodnoty v QMap<Q…
18. 4. 2012   #156785

Tak jsem to vyřešil trochu jinak, možná to je trochu přes ruku, ale lepší řešení mě nenapadlo...

jsem si vytvořil struktůru pro jednotlivé znaky a jejich počet a to potom řadim dle počtu znaků

struct Letter
{
    QChar Char;
    int Count;

    Letter(const QChar chr, int count) : Char(chr), Count(count) {}

    static bool Less(const Letter left, const Letter right)
    {
        return right.Count < left.Count;
    }

    static bool Greater(const Letter left, const Letter right)
    {
        return right.Count > left.Count;
    }
};

A potom ve funkci, která to přidává a řadí to mám takto: 

void createLFL(QStringList files)
{
    for (int n = 0; n < files.size(); n++)
    {
        QMap<QChar,int> out;
        QString file = files.at(n);

        for (int i = 0; i < file.length(); i++)
        {
            int chr = (int)file.at(i).toAscii();

            if (chr >= 65 && chr <= 90 || chr >= 97 && chr <= 122)
                out[file.at(i)]++;
        }
        QList<Letter> letters;
        QMap<QChar,int>::const_iterator it = out.begin();

        for (; it != out.end(); it++)
        {
            letters.append(Letter(it.key(), it.value()));
        }
        qSort(letters.begin(), letters.end(), Letter::Greater);
        
        ...
    }
}

Pokud někoho napadne lepší řešení, jak budu rád :)

C / C++ › zapis char-u do label->text
17. 4. 2012   #156774

Tohle spíš patří do .NET bych řekl, páč to je C++ CLI .. jinak převod nativního char* na String^ by mělo jít takto 

label1->Text = gcnew String(znaky);
C / C++ › Jak seřadit hodnoty v QMap<Q…
17. 4. 2012   #156771

#2 crazy
no dobře, ale to máš pouze na nějakej kontejnér, to vim, ale mapa má 2 hodnoty a když budu porovnávat int(y), tak mi klíče zůstanou a já potřebuju aby se i klíče pohnuly společně s hodnotou

C / C++ › Jak seřadit hodnoty v QMap<Q…
17. 4. 2012   #156768

Čau, mám takový problém a nějak se nemůžu pohnout z místa... řešim seřazení mapy podle hodnot 

QMap<QChar, int> data;

Kde QChar je znak v textu a int je počet jeho výskytů a teď to potřebuju seřadit podle počtu výskytů, ale aby se mi seřadili i klíče

Seřazení hodnot vim, ale nevim jak do toho zahrnout i klíče... ty hodnoty bych seřadil takto: 

QList<int> temp = data.values();
qSort(temp);

díky :)

C / C++ › Psaní Win API
13. 4. 2012   #156529

#17 matesz
Osobně si myslim, že WinAPI moc dobrou budoucnost nemá a na Windows8 se objevilo už WinRT, což by měla být nadstavba Win32 API... na WinRT funguje třeba .NET (existuje sice i na CLR, ale to se moc nepoužívá)

Největší poptávka bývá po C/C++ a .NET.. semtam i Java popř. tvorba app pro iOS a Android a co se týče webu, tak PHP + čistej JS + jQuery a AJAX (podotýkám, že HTML nebo CSS není součást programování)

Na VŚ se učí hlavně základy C/C++/C++ Qt, trochu rozšířený základy Javy a potom směs od každýho (což ti je stejně k ničemu)

Pokud se ale rozhodněš pro nějakej jazyk, tak doporučuju spíš C++ nebo C# a ze scriptovacích PHP a JS (jako celek)

C / C++ › Psaní Win API
12. 4. 2012   #156505

#13 matesz
pro .rc scripty potřebuješ minimálne Professional verzi, ale klidně stáhni Ultimate + pujč si key na netu (pokud budeš používat VS pro osobní účely), nebo můžeš použít Qt Creator, ten máš free a nebo Netbeans, ten by měl taky podporovat C++

C / C++ › Problém s vykreslováním okna…
6. 4. 2012   #156125

Ahoj, nevíte někdo, jak mám v Qt řešit update pro vykreslování?

Vytvořím si nějakej widget, tam mám funkce paintEvent a timerEvent, kterej volá update() kreslící plochy zhruba každých 30ms, ale přijde mi to strašně pomalý pro animace...

Když se dělá nějaká hra, tak se musí vykreslovat nějak 30x za 1s, aby to bylo plynulý, ale když jsem tohle udělal, tak se mi to lehce škubalo, tak jsem zkusil dát každou 1ms, to se sice trochu zlepšilo, ale CPU mi šel na 30% a to jsem vykresloval jen jednu kuličku :/

Můžete mi nějak poradit, jak to mám vykreslovat v realtime aby mi to nešežralo CPU a bylo to krásně plynulý?

Vim, že např. v XNA frameworku pro C# je po vytvoření čistýho projektu funkce update(...) a pár dalších a když jsem dal cokoli vykreslit do funkce update(...) tak nebyl problém, bylo to čistý bez trhání a CPU se ani nehlo

PS: Používám QBasicTimer jako časovač

C / C++ › Prosim RADU
5. 4. 2012   #156108

#18 Mikys
to spíš tohle měli ve funkci a pokud něco neprošlo nebo prošlo, tak vrátili odpověď třeba lehká úprava...  

#include <iostream>
#include <map>
#include <string>

using namespace std;

static map<string, string> texty;

void nactiTexty()
{
    texty["ahoj"] = "cau";
    texty["jak se mas?"] = "dobre";
    texty["tak zatim"] = "jojo";
}

string odpoved(string& otazka)
{
    string odpoved = texty[otazka];

    return odpoved.length() ? odpoved :
    "Na tuto otazku neznam odpoved :(";
}

int main()
{
    nactiTexty();

    while (true)
    {
        string otazka;
        getline(cin, otazka);

        if (!otazka.compare(":q")) break;

        cout << odpoved(otazka) << endl;
    }
    return 0;
}
C / C++ › Prosim RADU
5. 4. 2012   #156097

#15 Mikys
 

#include <iostream>
#include <map>
#include <string>

using namespace std;

int main()
{
    map<string, string> texty;

    // seznam otazek a odpovedi
    texty["ahoj"]        = "cau";
    texty["jak se mas?"] = "dobre";
    texty["tak zatim"]   = "jojo";

    // nekonecny cyklus
    // je nutne ukoncit program rucne pres break/return/exit
    while (true)
    {
        // pres konzoli se ptam na otazku
        string otazka;
        getline(cin, otazka);

        // pokud otazka bude ":q", tak ukonci program
        if (!otazka.compare(":q")) break;
        
        // zjisti odpoved na danou otazku
        string odpoved = texty[otazka];

        // pokud se otazka bude vyskytovat v seznamu = bude na ni odpoved
        // tak ji vypise.. pokue ne, tak vypise spodni text
        cout << (odpoved.length() ? odpoved :
        "Na tuto otazku neznam odpoved :(") << endl;
    }
    return 0;
}
C / C++ › Prosim RADU
5. 4. 2012   #156085

#7 Mikys
nekonečnej cyklus... "brejkneš" to pak dle potřeby, ale na tvím místě, bych se spíš naučil aspoň základy, kdyby ti kamarád řekl, zkus naprogramovat kopii Windows, tak tu budes psát denně 10+ dotazů a "tvůj" kód bude složenej z našich kódů =D

Né opravdu... nauč se základy aspon ;)

C / C++ › "Overall" aplikace na Window…
5. 4. 2012   #156075

Jediná možnost podle mě je ta, co si napsal.. pokud nebude vadit, že app bude fullscreen... teď mě napadlo, kdyby si nastavil tu app jako modální, což by znamenalo, že na jiné okno než tvoji app nepůjde nastavit focus tak máš vyhráno :)

Pokud ovšem nevadí, že celej PC bude sloužit jen pro tu app, ale ten problém by byl i u tvého řešení s fullscreenem

C / C++ › C++ vypis vsetkych 5ciferny…
5. 4. 2012   #156055

možností máš plno... teď mě jen rychle napadá, že v prvním kroku to můžes vyfiltrovat, že to musí být v rozmezí 10000 a 99999.. v druhým kroku každé číslo převedeš na znaky a kontrolovat výskyt zmíněných čísel (resp. porovnávat znaky místo čísel)

nebo teď mě ještě napadlo, že dalsí filtr můžes nastavit, že číslo potom musí být dělitelné 5 nebo být sudé

opravdu na tohle je plno způsobů, stačí se trochu zamyslet a zkusit najít některý, který bude rychlý a efektivní.. to s tim porovnaní znaků je celkem brutální cesta, takže předtim je dobrý to co nejvíc vyfiltrovat a až nebude jak, tak zvolit porovnání znaků

C / C++ › Databaza v jazyku C
5. 4. 2012   #156048

#2 KIIV
Mám dojem, že to někde skopíroval a teď řeší proč to nejde, když ani sám neví co tam všechno je

C / C++ › Matice součet - pomoc
5. 4. 2012   #156039

#13 Petr
Prostě když vytváříš pole, tak jednoduše mu nastav typ float (pokud potřebuješ přesnější/větší hodnoty tak double), protože tyto 2 typy slouží pro uložení reálných čísel...

float pole[100]; // statické pole float o 100 prvcích (0-99)

// to samé, jen dynamicky (alokace), potom je nutné jí uvolnit
float* pole = new float[100];

Potom prvky můžeš přidat (ručně) jako: 

// na jaký index se má přidat (nebo přepsat) prvek
// index máš dle velikosti pole, pokud más 100, tak 0-99
int i = 0;

pole[i] = 23.0; // první možnost, kde přidáš .0 (vytvoří řeálný číslo)

// tohle si teď nejsem jistý, ale mělo by fungovat taky, pokud ne, tak musíš
// přidat opět .0, čili 23.0f
pole[i] = 23f;

pole[i] = (float)23; // explicitně přetypuje int na float

//----------------------------

// zapisovat prvky do pole můžeš přes ukazatel, je to pro app o něco rychlější
// kde jen upravíš
pole[i] = 23.0;
// na
*(pole + i) = 23.0;

A to přidávání prvků pomocí scanf tu už bylo, to psát nebudu, tam jen změníš formát na %f (float) nebo
%lf (double)

A ještě takovej detail, u scanf nemá být reference, pokud vkládáš prvek přímo do pole, protože pole jako takový je reference


C / C++ › Qt jak zprůhlednit okno uvni…
3. 4. 2012   #155957

Nikdo nevíte? :( Prostě mít hlavní Widget a v něm druhej, kterej by zprůhlednil tu část,kde by byl umístěn a byla tak na tom místě vidět plocha

PS: a aby šlo do toho widgetu kreslit, resp. by byla videt plocha a zároveň to, co jsem nakreslit.. jsem to na netu hledal, ale vůbec nemůzu najít jak na to

C / C++ › Jaký program na začátky s pr…
30. 3. 2012   #155668

No.. já si myslim, že i kdyby šel takto postupně a to (pascal -> C -> C++), tak stejně jednou bude chtít dělat okenní app, takže na 95% sáhne po nějakým frameworku nebo jazyku, co to umožňuje...

A potom tak či tak bude nucen se učit věci (skutečné programování), protože tyto jazyky nedisponujou vším, co člověk potřebuje...

Takže v první řadě si musíš položit otázku, v čem nebo co by si chtěl programovat a podle toho jít tím směrem

Pokud chceš dělat aplikace typu .exe, tak bych doporučil jít tímto směrem:

1) na pascal se vyser.. tě nenaučí nic pořádnýho a ta jeho syntaxe tě může psychicky narušit...

2) začni v tom, v čem jsou syntaxe podobný (pokud chceš začít postupně teda)

3) na Javu bych se vykašlal pokud k ní nemáš vrozenej cit (zkus a uvidíš jak na tom seš)

4) další je tu C#, využívá sice .NET framework, syntax je ale z nějakých 90% stejná jak v Jave a to i názvy metod! Ale zdá se mi, že je to mnohem lehčí než Java a umí toho víc (sám jsem v tom dělal přes rok.. v Jave zhruba půl roku)

5) pak tu je rodina C a C++, je pravda, že na nich se naučíš skutečný programování, ale díky tomu je to taky těžší, protože na rozdíl od zmíněných nepoužívá to lepení kódu

6) v poslední řadě můžeš začít v Qt, je to normální C++, jen s frameworkem (to vaše lepení kódu), ale je potřeba znát C++ jako takový


Ono dneska se každej snaží vytvořit app co nejrychleji a pokud chce někdo dělat okení aplikace, tak sáhne po hotovým řešení, kde jen stačí vytvořit si hezký GUI a dát tomu nějakou funkcionalitu... zkoušel jsem dělat GUI v čistým C++ a jako - horror a to ještě nemluvim o např. událostech, který čistý C++ nemá a musíš si sám napsat "systém", kterej bude takto fungovat, opravdu radši volim Qt nebo C# :)

To by bylo asi z mé strany vše...

C / C++ › hledá se vývojář programu
29. 3. 2012   #155641

Myslím... že tohle je právě ta chvíle, kdy by se měl řízek probudit ze snu a opět se postavit nohama na zem ^.^

řízek: jen bych dodal, že těch 100 řádků ti napíšu klidně do 10min když přesně vim co chci... takže 100 řádků za hodinu je dost slabí, pokud chceš takovou extrémně komplexní app, tak všeobecně platí, že čím více kódu, tím pomalejší vývoj a pro takový program se už bavíme o obrovských číslech v řádech 100 tisíců řádků čistýho kódu a vzhledm k tomu, že nemáš tým, nevíš jak na to, plánuješ s uměním HTML dělat perpetum mobile, tak si opět přečti první větu mého příspěvku ;)

C / C++ › vetvenie if else...
28. 3. 2012   #155569

Co nechápeš na struktůrách? Však třída a struktůra je úplně to samí, jen to je jinak pojmenovaný a jedinej rozdíl je, že struktůra má defaultně všechno public a třída private...

Pokud to zamrzne a skončí, tak by možná bylo dobrý se zeptat debugu...

Jinak jazyk bych doporučil nějakej, co má podobnou syntax, např. C# (sice Java by taky šla, ale na tu nesahej - hnus) =D

C / C++ › vetvenie if else...
28. 3. 2012   #155564

#53 stif
Absolutně nechápu co furt řešíš.. tolikrát jsme ti to tady řekli i napsali a ty stále děláš to samí a hledáš problém... ve #41 příspěvku jsem ti to i napsal jak to má zhruba být... a teď tě popravdě nechci nijak odrazovat, ale možná by bylo dobrý zkusit pro začátek jinej (snažší) jazyk, protože se mi trochu zdá, že tudy moc cesta nevede (aspoň zatím) =)

C / C++ › nefunguje mi operátor <<
28. 3. 2012   #155547

btw. když už jsem u těch operátorů, jak se vůbec vytváří operátor << na funkci?
např. Qt mají funkci: 

qDebug(...) << neco;

Ale, nějak netušim, jak se takovej operátor zapisuje

C / C++ › nefunguje mi operátor <<
28. 3. 2012   #155546

#5 KIIV
jo, já to teď mám jako: 

    Queue<T>& operator << (const T item)
    {
        add(item); // pridava prvek
        return *this;
    }

    Queue<T>& operator >> (T& item)
    {
        item = removeAndGet(); // vraci odebrany prvek
        return *this;
    }

Což by mělo být správně už

C / C++ › nefunguje mi operátor <<
28. 3. 2012   #155542

#2 KIIV
díky, mě nějak nenapadlo to vrátit přes parametr :)
jinak vim, že to je neošetřený i chybný (iVector.size()-1), ale řešil jsem hlavně operátor

C / C++ › nefunguje mi operátor <<
28. 3. 2012   #155540

Zdravim,
trochu řešim operátor >> a stále mi to nějak nejde, operátor << byl v pohodě, ale tento nevim nějak.
Můžete mi prosím říct, kde mám chybu? 

#include <iostream>
#include <vector>

using namespace std;

template <typename T>
class Test
{
public:
    Test() : iVector() { }

    void vypis()
    {
        for (unsigned int i = 0; i < iVector.size(); i++)
            cout << iVector.at(i) << endl;
    }

    // toto mi funguje bez problemu
    Test operator << (const T value)
    {
        iVector.push_back(value);
        return *this;
    }

    // tady mam nekde chybu
    // jendoduse potrebuju, aby to odebralo prvek a ten mi to vratilo pres funkci
    // zde by fce ani nemusela mit parametr, ale je potreba 1
    T operator >> (Test&)
    {
        T temp = iVector.at(0);
        iVector.pop_back();
        return temp;
    }

private:
    vector<T> iVector;
};

int main()
{
    Test<int> test;

    // prida 2 cisla
    test << 23;
    test << 11;

    // zde potrebuju odebrat cislo a to ulozit do "value"
    int value;
    test >> value;

    test.vypis();

    return 0;
}

Díky :)

PS: v nadpise je chyba, jedná se o operátor >> nikoli << :(

C / C++ › Jaký program na začátky s pr…
27. 3. 2012   #155534

Opravdu moc nezáleží v jakým jazyku začneš, ale důležitý je v něčem začít... osobně bych doporučil začít v PHP, který se ti i hodí v budoucnu a potom přejít na C#, což je jednoduchej a moderní jazyk a až potom, pokud nezůstaneš u C# (co je btw úžasnej jazyk), tak zkusit C++
A potom se to už začíná všechno prolínat... pokud umíš C#, tak umíš z velkýho % i Javu, páč C# kopíruje hlavně v Javy a C++ Qt zas kopíruje lehce z C#

A co se týče toho PS, jak psal tvůj kámoš, tak to časem poznáš.. xD

C / C++ › Serializace vlastní třídy v Qt
22. 3. 2012   #155371

ahaa, dík.. já vim jak fungujou operátory, ale abych řekl, pravdu, tak mě nikdy nenapadlo to dát mimo třídu/struktůru, takže jsem stále řešil jak na to uvnitř objektu =)

C / C++ › Serializace vlastní třídy v Qt
22. 3. 2012   #155365

Opět zdravim,
můžete mi prosím jen říct, co mám špatně? Řešil jsem to i podle ofic. dokumentace, ale stále mi to píše, že operátor >> a << má příliš mnoho parametrů a to jsem to bral přímo z příkladu v dokumentaci, takže netuším, kde je chyba nebo co tomu vadí...

#include <QObject>
#include <QMetaProperty>
#include <QDataStream>
#include <QIODevice>

struct Item
{
    int cislo;
    QString jmeno;
    QByteArray data;

    Item() { }
    Item(int cislo, QString jmeno, QByteArray data)
    {
        this->cislo = cislo;
        this->jmeno = jmeno;
        this->data = data;
    }

    QDataStream &operator << (QDataStream &out, const Item &item)
    {
        out << item.cislo;
        out << item.jmeno;
        out << item.data;
        return out;
    }

    QDataStream &operator >> (QDataStream &in, Item &item)
    {
        in >> item.cislo;
        in >> item.jmeno;
        in >> item.data;
        return in;
    }
};
Q_DECLARE_METATYPE(Item)

class Test : public QObject
{
    Q_OBJECT

public:
    Test(Item item, QObject *parent = 0) : QObject(parent)
    {
        this->item = item;
    }

    QByteArray serialize()
    {
        QByteArray out;
        QDataStream stream(&out, QIODevice::WriteOnly);

        stream << item;
        return out;
    }

    static Item deserialize(QByteArray data)
    {
        Item item;
        QDataStream stream(&data, QIODevice::ReadOnly);

        stream >> item;
        return item;
    }

private:
    Item item;
};

PS: Druhy chyb co mi to vypíše: Chyba:C2804: binary 'operator <<' has too many parameters Chyba:C2333: 'Item::operator <<' : error in function declaration; skipping function body Chyba:C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Item' (or there is no acceptable conversion) dík

C / C++ › Nefunguje mi QMap v Q_PROPERTY
21. 3. 2012   #155360

Zdravim.. mám menší problém a nějak nechápu proč to nejde... jednoduše potřebuju mít property, co by obsahovala QMap, ale nějak mi to nejde :/ 
Pokud si přidám do třídy makro:

Q_PROPERTY(QMap map READ Map WRITE setMap)

Potom: 

public:    
    QMap<int,QByteArray>::const_iterator Map(const int index) const;
    void setMap(const int flag, const QByteArray data);
private:
    QMap<int,QByteArray> _map;

Tak mi kompilace hodi chybu... na netu jsem čet, že je nejspíš potřeba mít parametry jako <QString,QVariant>, ale to jsem taky zkoušel a výsledek byl stejný... v každým případě potřebuju tam mít int a QByteArray, ale nevim jak to mám udělat, když mi to furt hází chybu :/


C / C++ › vetvenie if else...
21. 3. 2012   #155344

#45 KIIV
Já bych sem nedal řešení, ale když se toto téma řeší celkem delší dobu, jak jsem si řekl, že mu napíšu aspoň to přidávání do pole... je mi jasný, že nejlepší způsob je dělat věci sám, ale kolikrát i dobrej programátor když se nad něčím zasekne, tak je rád za vyřešenou část kódu, díky který se to aspoň může naučit a vyřeší to problém =)

C / C++ › vetvenie if else...
21. 3. 2012   #155332

#40 stif
Nechápu, že to řešíš takovou dobu...
1) nauč se odsazovat, takto je to dost nepřehledné a lehce něco přehlídneš
2) děláš chyby v základech, napřed si přečti nějakej tutoriál, jinak ti můžeme radit cokoli a stejně ti to bude prd platný...
3) měl jsem teď pár minut čas, tak jsem ti splácal to, co řešíš 

#include<iostream>

using namespace std;

struct Produkt
{
    char nazev[40];
    int cena;
};

int main()
{
    Produkt* produkty;
    int maxPocetProduktu;
    int aktualniPocetProduktu = 0;

    cout << "Zadejte pocet produktu: ";
    cin >> maxPocetProduktu;

    produkty = new Produkt[maxPocetProduktu];

    while (aktualniPocetProduktu < maxPocetProduktu)
    {
        cout << "Chcete pridat produkt? (a/...): ";

        char vyber;
        cin >> vyber;

        if (vyber == 'a')
        {
            Produkt novejProdukt;
            char* nazevProduktu;
            int cenaProduktu;

            cout << "Zadej nazev produktu: ";
            cin >> nazevProduktu;
            strcpy(novejProdukt.nazev, nazevProduktu);

            cout << "Zadej cenu produktu: ";
            cin >> cenaProduktu;
            novejProdukt.cena = cenaProduktu;

            *(produkty + aktualniPocetProduktu++) = novejProdukt;
        }
        else break;
    }

    for (int i = 0; i < aktualniPocetProduktu; i++)
    {
        cout << (produkty + i)->nazev << " za " << (produkty + i)->cena << endl;
    }
    return 0;
}

Až na hlavní pole je vše řešený staticky, abych se přiblížil tomu, co si tu řešil... jinak jsem nic neošetřoval, jen ukazuju jak můžeš přidávat produkty do pole struktůr
Doufám, že tohle nějak pomůže...

PS: Pokud ti něco nejde, tak to vždy vyhodí nějakou hlášku.. takže si čti chyby popř. použij debug a dokážeš jednoduchý pole udělat i sám  

C / C++ › Jak na komunikaci přes Tcp (…
20. 3. 2012   #155278

No vidim to tak, že to udělám jak jsem psal, páč struktůra je sice pevná, resp. počet parametrů, ale velikost je dynamická, takže nemusim řešit na straně klienta/serveru jak velkej mi přijde paket, abych ho mohl nacpat do bufferu a bát se tak, aby to nepřeteklo

C / C++ › vetvenie if else...
20. 3. 2012   #155275

No... tohle bych spíš řešil přes lineární seznam, ale vzhledem k tomu, že děláš chyby úplně v základech, tak bych si na tvém místě ještě něco četl, než něco začneš dělat

Jinak takto by mohl vypadat lineární seznam (práce na cca 5min), nědělal jsem žádný ošetření, jen aby byl vidět princip... 

#include <iostream>

using namespace std;

struct Product
{
    char* name;
    int price;
    struct Product* next;
};

static Product* first;
static Product* actual;

void addProduct(char* name, int price)
{
    Product* p = new Product;
    p->name = name;
    p->price = price;
    p->next = 0;

    if (!first) first = p;
    else actual->next = p;
    actual = p;
}

void editProduct(char* findName, int newPrice)
{
    Product* tmp = first;

    while (tmp)
    {
        if (!strcmp(tmp->name, findName))
        {
            tmp->price = newPrice;
            return;
        }
        tmp = tmp->next;
    }
}

void showProducts()
{
    Product* tmp = first;

    while (tmp)
    {
        cout << tmp->name << " = " << tmp->price << endl;
        tmp = tmp->next;
    }
}

void deleteProducts()
{
    while (first)
    {
        Product* tmp = first->next;
        delete first;
        first = tmp;
    }
}

int main()
{
    addProduct("Jabka", 20);
    addProduct("Hrusky", 30);

    editProduct("Jabka", 50);

    showProducts();
    deleteProducts();

    return 0;
}
C / C++ › Jak na komunikaci přes Tcp (…
20. 3. 2012   #155223

#4 KIIV
Jo dík, celkem ten diameter mě zaujal a můžu se spíš zeptat na názor na to, co jsem předtim napsal? To řešení paketu, kterej by se vždy odeslal, protože si myslim, že tento způsob by měl být bezpečný a i celkem jednoduchý, jen nevim jak se na to bude tvářit CPU, když bude muset každej paket serializovat a deserializovat a odesílat tak trochu větší množství dat.

Vim, že socket je podstate síťovej stream co odesílá nějaky byte pole a tady právě by mělo fungovat i odesílání souborů.. např. kdyby flag byl "file", tak vim, že celý byte pole je podstate soubor (jen bych někde musel ochovat co to je za typ).

A jak si psal o tom IRC, tak toto byla první věc co mě napadla, ale tento způsob se mi moc nelíbí, to bych na serveru musel parsovat vždy celou zprávu (kdyby to bylo oddělený mezerama) a to ještě zpráva by musela bejt v base64, páč kdyby obsahovala mezery, tak by to parsovalo i zpravu samotnou.. to potom zpracovat a opet celý spárovat a odeslat... tohle mi přijde trochu komplikovanejší no

PS: Snažim se vytvořit nějakej vlastní protokol na Tcp, právě :-)

C / C++ › Jak na komunikaci přes Tcp (…
20. 3. 2012   #155220

#2 zlz
tohle víceméně vim, ale nějak nechápu, jak bych měl formulovat paket... dneska mě akorát napadl tento způsob: 

enum PacketFlag
{
    Neco1,
    Neco2
};

struct Packet
{
    int hSender;
    int hReceiver;
    PacketFlag flag;
    QByteArray data;
};

A toto bych vlastně (celej objekt struktůry) serializoval na byte pole a to odeslal... vždy, při jakémkoli přenosu informací mezi klienty nebo ze serveru na klienta by se odeslala tato struktůra..

Potom by se to jen vždy deserializovalo a bez porblému bych měl přístup k datům.. něco jako: 

void prichoziData()
{
    Packet *packet = Packet::Deserialize(socket->readAll());

    switch (packet->flag)
    {
    case Neco1: ... break;
    case Neco2: ... break;
    }
}

Takže by mě teď zajímalo, co si o tom myslíte, zda toto řešení by bylo dobré nebo ne :)

Ovšem jediná asi nevýhoda co mě napadá je, že datovej přenos bude o něco větší, páč serializace objektu zabere až 10x víc (tipuju) a abych to řešil tak, že bych každej parametr hodil do pole a oddělovat nějakým znakem a poslal je blbost podle mě...

PS: Pokud třeba ve struktůře (hReceiver) bude 0, tak zpráva bude určena pouze serveru (je to descriptor)


crow
C / C++ › Rekompilace Qt kvůli Mysql d…
29. 2. 2012   #154186
  • Zdravim,

potřeboval bych použít připojení k Mysql popř. Pg. databázi, ale pokud napišu:

QSqlDatabase sql = QSqlDatabase::addDatabase("QMYSQL");
qDebug() << QApplication::libraryPaths();

tak mi to napíše něco ve smyslu, že plugin pro Mysql není načten a jak to vypíše seznam dostupných, tak tam nemám ani jeden typ databáze...

hledal jsem na netu i zkoušel plno věcí, ale prostě nevim jak to přesně má bejt.. jen vim, že to musím překompilovat a povolit Mysql plugin a tady je právě problém no

Můžete mi prosím někdo napsat postoupnost příkazů, které mám napsat, abych se dočkal kompilace a potom použití?

Qt jsem tahal z ofic. stránky http://qt.nokia.com/downloads a pak jsem si stáhl:

  • Qt libraries 4.8.0 for Windows (minGW 4.4, 354 MB)
  • Qt Creator 2.4.1 for Windows (53 MB)

Oboje jsem nainstaloval (nebo spíš rozbalil) do E:/Qt/4.8.0 a E:/Qt/Creator/

Jde mi pouze o přesnej postup, jak to rekompilovat popř. nastavit configure.exe.. no prostě jak psát příkazy za sebou, protože co sem zkoušel, tak jsem se k tomu nějak nemohl dobrat
 

crow
C / C++ › Qt Vlastní knihovny
23. 2. 2012   #154035

pardon, špatný edit.. takto:

    typedef void (*Vypis)(QString);
    Vypis vypis = (Vypis) QLibrary::resolve("MyDLL.dll", "vypis");
    vypis("Ahoj svete");

kde, "vypis" je nazev funkce

crow
C / C++ › Qt Vlastní knihovny
23. 2. 2012   #154034

Jako pokud si v DLL udělám samotnou funkci, tak jí jde zavolat jako:

    typedef void (*Vypis)(QString);
    QLibrary *ql = new QLibrary("MyDLL.dll");
    Vypis vypis = (Vypis) QLibrary::resolve(file, "vypis");
    vypis("Ahoj svete");

Ale ten postup neni zrovna krátkej, krom toho se mi takto vůbec nedaří zavolat celou třídu - to právě řešim :(

crow
C / C++ › Qt Vlastní knihovny
23. 2. 2012   #154027

#14 Peppy
No.. zkoušel jsem to co si psal a DLL mi skompilovat jde, ale nějak nechápu jak vyřešit to volání v projektu, to mi nějak nejde přes to QLibrary..
Mám "MyDLL.dll" jako:


Hlavička "mydll.h":



#include <QtCore>
#include <QObject>
#include <QDebug>

namespace MyDLL
{
    class Core : public QObject
    {
    public:
        void vypis(QString text);
    };
}

extern "C"
{
    Q_DECL_EXPORT MyDLL::Core *getMyDLL();
}

typedef MyDLL::Core *(*GetMyDLLHandler)();

Tělo "mydll.cpp":

#include "mydll.h"

MyDLL::Core *getMyDLL()
{
    return new MyDLL::Core();
}

void MyDLL::Core::vypis(QString text)
{
    qDebug() << text;
}

A teď nějak nechápu jak zavolat tu knihovnu .dll... mam prázdnej konzolovej projekt.. kde do "main.ccp" dám:

#include <QtCore/QCoreApplication>
#include <QLibrary>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    QLibrary ql;
    auto e = (void*) ql.resolve("MyDLL.dll");

    return a.exec();
}

QLibrary mi staticky zavolat nešla, takže jsem to udělal přes proměnnou, ale stále nějak nechápu, jak si zavolám a vytvořim instanci třídy z toho .dll (cesta k DLL je správná)

crow
C / C++ › Qt Vlastní knihovny
23. 2. 2012   #154011

#12 Peppy
Tohle celý máš v .dll jo? a jak to potom voláš v projektu? však to stejně nebude vidět ne?

crow
C / C++ › Qt Vlastní knihovny
23. 2. 2012   #153988

Pouze deklarace tam mám, je to spíš zvyk z C#, kde stačilo přidat nějaký .dll a bez problémů šlo vše z .dll používat a bylo i vidět (pokud se nejednalo o C++ knihovnu, zde bylo nutný ruční include funkce (pokud byla statická))

crow
C / C++ › Qt Vlastní knihovny
23. 2. 2012   #153986

Aha, takže neexistuje žádný jednoduchý řešení, že se do projektu přidá pouze .dll a ono si to samo už zjistí, co to všechno obsahuje, takže bych to mohl ihned používat? Mě stále trochu štve, že musim includovat i hlavičku, co když budu chtít použít knihovnu třetí strany, kde to bude dostupný pouze bez .h, takže to budu muset ručne typovat každou funkci?

crow
C / C++ › Qt Vlastní knihovny
23. 2. 2012   #153975

Takže jestli dobře chápu, tak nemůžu použít nějakou třídu v knihovně, aniž bych v programu společně s přidáním LIBS +=  nepřidal i hlavičku té třídy? Tenhle způsob mi moc nevoní, co když budu chtít použít třeba od kamáráda .dll knihovnu co dělal pro Qt? Tak to mi musí poslat i hlavičku abych mohl použít celou třídu a hlavně nemusel volat jednotlivý fce samostatně?

Pokud ano, tak to mi přijde trochu zbytečný používat knihovnu, to rovnou můžu hodit do projektu :/

crow
C / C++ › Qt Vlastní knihovny
23. 2. 2012   #153969

Takže na každou fci, musí být typ? A nějaká možnost, jak zavolat z knihovny celou třídu, kde bych měl všechny fce neni? Na tohle jsem právě nenašel řešení na googlu

btw knihovna jako ".lib" je použitelná i na linuxu, nebo bych to musel skompilovat přes gcc nějak, aby z toho bylo ".so" ?

crow
C / C++ › Qt Vlastní knihovny
22. 2. 2012   #153961

Zdravim,

mám takový problém... chtěl jsem si vytvořit knihovnu (.dll), kde budu mít svoje nejpoužívanejší třídy/funkce, páč se mi to nechce stále kopírovat do projektů, ale nějak jsem narazil, že to asi nepůjde přesně tak, jak jsem si představoval :(

Pokud vytvořím projekt jako C++ knihovna, tak nechám vše default + přidám jen jednu fci (na test) do hlavičky a těla. V dalším projektu si ji načtu (pravý na projekt a vložit dynamickou knihovnu - tady nějak nechápu, proč to chce načítat .lib místo .dll).. a zde jsem už předpokládal, že budu moct bez problémů použít něco jako:

#include <MojeAPI> nebo něco v tom stylu, abych to mohl třídit jako <api/network> atd.

Můžete mi někdo poradit jak na to? Sice jsem něco už našel na netu, ale to je snad na 20 řádků, ale žádnej jednoduchej způsob jsem nenašel :( .. třeba jako v C# či VB.NET, kde stačilo přidat knihovnu do projektu a člověk mohl vesele usingovat, něco takovýho bych bral

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý