[ FantasticFour @ 17.10.2010. 19:11 ] @
Evo ovako radim u qt-creatoru i imam nekoliko pitanja

1 Kako da menjam boju widgetima???
2 Kako da stavim sliku kao pozadinu nekog prozora
3 Kako da namestim signal kada se MainWindow resizira tj kad promenim njegovu velicinu da se nesto desi
4 sad sam stavio TextEdit na MainWindow i kako sad da podesim da se moji tekstualni fajlovi otvaraju pomocu tog programa i da se text ispise u textEdit??? Znam da se koristi QFile i da treba taj fajl da bude argument pa da ga procita u npr QString i onda sadrzaj stringa ispise u textEdit ali ako moze objasnjenje

evo to je to a ima jos dosta pitanja
ali doce i oni na red
Hvala unapred i nadam se da cete mi pomoci

[ Sale_123 @ 17.10.2010. 20:05 ] @
1. Pogledaj u QtCreator-u svojstvo palette

2. Sto se tice pozadine nisam siguran za ostale widget-e, ali za QLabel mozes da koristis svojstvo Pixmap

3. Nisam siguran da postoji signal za resize, ali uvijek mozes da iskoristis resizeEvent

4. QFile i QTextDocument

Mada ne znam koliko ce ti sve ovo pomoci, posto vjerujem da se pocetnik u Qt. Pokusaj da pronadjes knjigu

C++ GUI Programming with Qt 4, Second Edition .

Jako dobra knjiga. Kasnije mozes koristiti Qt dokumentaciju koja je (po meni) jedna od najbolje pisanih dokumentacija koje sam ikada citao.
[ BinaryRuler @ 17.10.2010. 21:46 ] @
PA to za file- ove sam ti objasnio na ovoj temi http://www.elitesecurity.org/t411399-QT-fajlovi
Signal za resize ne postoji.

Ali mozes da overidujes dogadjaj
virtual void resizeEvent(QResizeEvent* event) i da napravis svoj signal i da ga emitujes.

ovako od prilike

Code:

void MyMainWindow::resizeEvent(QResizeEvent* event)
{
        QMainWindow::resizeEvent(event);
        emit resizeSignal(event->size());
}


U headeru klase MyMainWindow moras da deklarises signal.
npr

Code:

class MyMainWindow: public QMainWindow
{
       Q_OBJECT
       ...
       signals:
       void resizeSignal(const QSize& size);
       ...
}


PS
Kada koristis signale i slotove moras u headeru klase na pocetku definicije klase da stavis Q_OBJECT.
I kada definises signal za njega ne pises implementaciju nego ga deklarises kao sto sam ti napisao.
[ Nedeljko @ 17.10.2010. 22:12 ] @
Citat:
FantasticFour: 2 Kako da stavim sliku kao pozadinu nekog prozora


Pregazi metodu paintEvent().
[ Nedeljko @ 17.10.2010. 23:12 ] @
Citat:
FantasticFour: 4 sad sam stavio TextEdit na MainWindow i kako sad da podesim da se moji tekstualni fajlovi otvaraju pomocu tog programa i da se text ispise u textEdit??? Znam da se koristi QFile i da treba taj fajl da bude argument pa da ga procita u npr QString i onda sadrzaj stringa ispise u textEdit ali ako moze objasnjenje


Da li ti pomaže projektić iz priloga?
[ FantasticFour @ 21.10.2010. 17:10 ] @
OK

evo jos jedno pitanje

kako da se radi neki proces u pozadini
npr ja pokrecem neku shell komandu npr firefox
i sve dok korisnik ne ugasi firefox program je zaledjen
kako da se pokrene firefox u pozadini i da i dalje mogu raditi u programu

i kako da nekako ako je moguce sklonim window border tj ono x minimize itd ali ceo window border
[ Nedeljko @ 21.10.2010. 18:42 ] @
Citat:
FantasticFour: OK

evo jos jedno pitanje

kako da se radi neki proces u pozadini
npr ja pokrecem neku shell komandu npr firefox
i sve dok korisnik ne ugasi firefox program je zaledjen
kako da se pokrene firefox u pozadini i da i dalje mogu raditi u programu


Rekoh ti da proučiš klasu QProcess. U dokumentaciji sve lepo piše.
Citat:
FantasticFour: i kako da nekako ako je moguce sklonim window border tj ono x minimize itd ali ceo window border


Code:
window->setWindowFlags(Qt::FramelessWindowHint);
window->show();
[ FantasticFour @ 21.10.2010. 19:58 ] @
OK

za QProcess ako hocu da pokrenem neki prog

a sta ako hocu da radim 2 radnje u isto vreme

npr da nesto stalno proveravam sa while petljom i da uz to nesto radi for petlja i npr da u isto vreme ispise nesto u lineEdit

kako to????????????
[ Nedeljko @ 21.10.2010. 20:08 ] @
Za paralelan rad delova tvog programa (dakle, nema veze sa pokretanjem drugih procesa, kao što je fajerfoks) koristi niti. Dakle, prouči upotrebu klase QThread. E, sad, trebaće ti da znaš nešto i o nitima i sinhronizaciji uopšte. Na to ne mogu dati kratak odgovor.
[ FantasticFour @ 22.10.2010. 16:44 ] @
ajde ako mozes to da mi objasnis
gledao sam malo po dokumentaciji ali jos uvek ne shvatam
kako taj paralelan rad

znaci i while petlja i for petlja i ispis neceg treceg

tamo u primeru je dat isti zadatak a ja hocu razlicite
[ Nedeljko @ 23.10.2010. 11:29 ] @
Javljam se sa računara na kome nije instaliran Qt, tako da ne očekuj primer danas.

Evo, ovako. Definišeš tri klase Thread1, Thread2 i Thread3. Sve tri naslede QThread i u svim trima redefinišeš metodu run tako što u njeno telo upišeš ono što bi hteo da jedna nit tog tipa radi. Onda instanciraš objekte tih tipova i pozoveš im metod start.
[ karas @ 24.10.2010. 20:57 ] @
Evo primera koji racuna Fibonacijev niz tako sto nasledjuje QThread:
Code (cpp):

#include <QCoreApplication>
#include <QThread>
#include <iostream>
#include <cstdlib>


using std::cout;
using std::endl;


// calculates Fibonacci array
class Thread : public QThread
{
private:

     long prev1;
     
     long prev2;
     
public:

     Thread(long p1, long p2) : prev1(p1), prev2(p2)
     {
     }
     
     
     void run()
     {
          while (true)
          {
               long n = this->prev1 + this->prev2;
               cout << QThread::currentThreadId() << "::Run::run():n=" << n << endl;
               this->prev1 = this->prev2;
               this->prev2 = n;
               Thread::usleep(100000);
          }
     }
};


// starts three threads
int main(int argc, char* argv[])
{
     QCoreApplication app(argc, argv);
     Thread t1(1, 1);
     Thread t2(1, 1);
     Thread t3(1, 1);
     t1.start();
     t2.start();
     t3.start();
     t1.wait();
     t2.wait();
     t3.wait();

     return EXIT_SUCCESS;
}
 

Ovde tri niti svaka za sebe paralelno racunaju zasebne Fibonacijeve nizove.

Evo primera koji nasledjuje QRunnable i koristi QThreadPool umesto da rucno pravis niti:
Code (cpp):

#include <QCoreApplication>
#include <QRunnable>
#include <QThread>
#include <QThreadPool>
#include <iostream>
#include <cstdlib>


using std::cout;
using std::endl;


// calculates Fibonacci array, it is not thread-safe because 'prev1' and 'prev2' of the same object are shared among threads
class Run : public QRunnable
{
private:

     long prev1;
     
     long prev2;
     
public:

     Run(long p1, long p2) : prev1(p1), prev2(p2)
     {
     }
     
     
     void run()
     {
          // support executing the same runnable more than once
          QThreadPool::globalInstance()->tryStart(this);

          while (true)
          {
               long n = this->prev1 + this->prev2;
               cout << QThread::currentThreadId() << "::Run::run():n=" << n << endl;
               this->prev1 = this->prev2;
               this->prev2 = n;
               usleep(100000);
          }
     }
};


// starts two runnables, 'r1' is shared among two threads
int main(int argc, char* argv[])
{
     QCoreApplication app(argc, argv);
     
     cout << "global pool:active=" << QThreadPool::globalInstance()->activeThreadCount() << ",max=" << QThreadPool::globalInstance()->maxThreadCount() << endl;
     
     Run* r1 = new Run(1, 1);
     Run* r2 = new Run(1, 1);
     QThreadPool::globalInstance()->start(r1);
     QThreadPool::globalInstance()->start(r1);
     QThreadPool::globalInstance()->start(r2);

     return EXIT_SUCCESS;
}
 

Obrati paznju da drugi primer ne vodi racuna o sinhronizaciji izmedju niti. To znaci da se r1 deli izmedju razlicitih niti, koje zato rade sa istim Fibonacijevim nizom sto dovodi do problema tj. netacnog racunanja Fibonacijevog niza. r2 se koristi u jednoj niti i nema tih problema jer ne mora nista da se sinhronizuje.

Cim pohvatas kako se radi sa nitima, moraces da pogledas cemu sluze muteksi (QMutex) koji sluze da resavaju ovakve probleme sinhronizacija.
[ Nedeljko @ 24.10.2010. 23:03 ] @
Evo i mog primera.
[ karas @ 25.10.2010. 07:42 ] @
Ovaj tvoj primer mora sa Qt 4.7. Ima li neki poseban razlog sto ne moze neki stariji iz grane 4.x (konkretno, 4.4.3 pod FreeBSD-om)?
[ Nedeljko @ 25.10.2010. 07:48 ] @
moc_mainwindow.cpp je kreiran sa Qt 4.7. Izbaciti njega i onda će svaki Qt 4.x da kompajlira.
[ FantasticFour @ 26.10.2010. 14:11 ] @
ok shvatio sam ovo oko niti

e kako sad da npr pozadina nekog prozora bude neka slika
znaci background da bude neka slika nekog prozora

i jos jedno pitanje
koristim QTCreator
i kako sad da npr kada promenim velicinu prozora da se i widgeti pomeraju sa njim
npr imam textedit i kada promenim velicinu prozora on ostaje na pocetnoj velicini(textedit)
kako i da textedit menja velicinu zajedno sa prozorom
[ Nedeljko @ 26.10.2010. 17:41 ] @
Oko niti postoji jedna bitna stvar - sinhronizacija. To obavezno prouči, jer ti u protivnom programi neće raditi kako treba.

Što se tiče ovog tvog novog pitanja, igraj se malo sa Lay Out ikonama u meniju Qt Designer-a i sa Spacers kontrolama.
[ FantasticFour @ 26.10.2010. 20:59 ] @
ok a kako da postavim sliku u pozadinu prozora

i jos jedno pitanje
hocu da uradim svoj installer za ubuntu
e ako neko moze da mi objasni kako to installer funkcionise tj sta treba da radi
program za particionisanje neka bude cfdisk a installer ne mora imati ni gui za pocetak
znaci samo kako funkcionise
[ Nedeljko @ 27.10.2010. 00:08 ] @
Što se pozadine tiče, jedino što mi pada na pamet je predefinisanje metode paintEvent.

Što se instalera tiče, on za jednostavne programke treba samo da iskopira potrebne fajlove (uključujući i ikonu na desktopu ako ej potrebno).
[ BinaryRuler @ 27.10.2010. 00:43 ] @
Za pozadinu mozes da uradis kao sto je Nedeljko rekao.

A mozes i na sledeci nacin

Da stavis u konstruktoru QLabel sa parametrom this
QLabel* label= new QLabel(this);
On ce biti postavljen po defaultu na koordinatu 0,0.
Unda za label size stavis da je jednak sa window size.
Ucitas pozadinu u label.

Ovo stavis na pocetku konstruktora pre setupUI.

I sve sto si kasnije dodao na formu ce biti iscrtano preko te labele.
[ FantasticFour @ 27.10.2010. 13:10 ] @
ako neko moze da mi objasni kako da koristim paintEvent
gledao sam malo po dokumentaci ali mi nije bas najjasnijw pa ako moze pomoc
ono za resize prozora sam uspeo
[ FantasticFour @ 27.10.2010. 19:46 ] @
evo jos jedno pitanje

imam mainwindow
i na njemu pushbutton

sad sam napravio nov prozor dialog
i kako kad se klikne na push button da se pojavi dialog
[ BinaryRuler @ 27.10.2010. 20:57 ] @
Definises atribut klase
QPixmap pixmap;

U konstruktoru ucitavao sliku da ne bi svaki put na paint event ucitavao sliku i time ga opterecivao

pixmap.load("slika.png");

Code:

void MyWidget::paintEvent(QPaintEvent *event)
{
        QWidget::paintEvent(event);

    QPainter painter;
    painter.begin(this);
    //X=0 y=0 w=100 h=100
    //Ja sam ti postavio te koordinate i sirinu i visinu ti podesi prema svojim potrebama
    painter.drawPixmap(0,0, 100, 100, m_TitleBarPixmap);
    painter.end();
}
[ FantasticFour @ 29.10.2010. 19:43 ] @
ljudi imam problem

napravi sam program koji za unosen background theme i icons cuva u fajl

/usr/share/sgct/imager(theme/icons)
znaci npr ako se u theme upise MurrinaUltimate on to cuva u /usr/share/sgct/theme

ali imam problem sto nece da cuva

kada ga pokrenem iz terminala kaze
[stefan@stefy ~]$ gksu '/home/stefan/QTProjects/SGCT/SGCT-build-desktop/SGCT'
Qt: Session management error: None of the authentication protocols specified are supported
[stefan@stefy ~]$



evo programa

http://www.2shared.com/file/cEWdD5ax/SGCT.html

[ BinaryRuler @ 29.10.2010. 20:33 ] @
Probaj u terminalu da se pozicioniras u folder gde ti se nalazi aplikacija, ako radi onda je problem to sto si koristio relativnu putanju do resursa.
[ BinaryRuler @ 29.10.2010. 20:37 ] @
Greska, ipak nije to problem.
[ Nedeljko @ 29.10.2010. 22:50 ] @
Problem je što ti zapravo i ne prelaziš u direktorijum /usr/share. Naredba

Code:
system("cd /usr/share");


nema nikakvog bitnog efekta. Ona nalaže ljusci da izvrši naredbu promene tekućeg direktorijuma koji će biti tekući dok je ljuska živa. Dakle, kada se ta naredba izvrši do kraja, tj. ljuska se ugasi, opet je stari direktorijum tekući. To možeš proveriti izvršavanjem sledeće dve uzastopne naredbe:

Citat:
system("cd /usr/share");
system("ls");


One se izvršavaju u odvojenim (uzastopnim) primercima ljuske (jedna za drugom), tako da se druga izvršava, kada je efekat prve već poništen.

Umesto toga, problematičnu naredbu zameni sa

Code:
chdir("/usr/share");


i radiće.
[ Nedeljko @ 29.10.2010. 22:53 ] @
Naravno, možeš koristiti Qt klase.

Code:
QDir::setCurrent("/usr/share");

[ FantasticFour @ 30.10.2010. 08:21 ] @
JOOOOJ!!!!!!!
Hvala ti puno
a sad nesto sto nije vezano za temu
kako da dodam reputaciju ili tako nesto jer mislim da si zasluzio
[ FantasticFour @ 31.10.2010. 19:45 ] @
Evo jos jedno pitanje ako moze posto nigde nisam uspeo da nadjem

kako da iz jednog prozora pozovem drugi
npr ja kliknem na dugme u jednom prozoru i kako da se pojavi drugi
ili ja kliknem u jednom prozoru na dugme i izmeni se tekst dugmeta u drugom
pod dugme mislim na PushButton

i kako da stavim na neki pushbutton neku sliku kao npr ja napravim neku sliku kockice u gimp-u i snimim je u png formatu i kako da tu sliku dodam buttonu kao background
[ FantasticFour @ 04.11.2010. 21:16 ] @
DA LI MI NEKO MOZE POMOCI
[ Nedeljko @ 05.11.2010. 20:39 ] @
Da li ti ovaj primer pomaže?
[ FantasticFour @ 05.11.2010. 22:42 ] @
hmm sad sam i ja to probao ali meni nesto nece

evo izvorni kod celog programa pa pogledaj ako mozes

http://www.2shared.com/file/p3dMKx54/Panealat.html

znaci treba iz mainwindow pozvati dialog

[ Nedeljko @ 05.11.2010. 23:22 ] @
Code:
void MainWindow::on_novDeo_clicked()
{
    Dialog dialog;
    dialog.show();
}


Dijalog se uništava nakon prikazivanja. Probaj ovako:

Code:
void MainWindow::on_novDeo_clicked()
{
    static Dialog dialog;
    dialog.show();
}


Takođe, nije loše da objekti kojima svi treba da pristupaju budu globalni (tj. da se isti primerak dijaloga može prikazivati iz raznih funkcija).
[ FantasticFour @ 06.11.2010. 08:47 ] @
stavio sam
static Dialog dialog;
dialog.show();

ali opet nista
da li si ti kod tebe to probao

a kako mislis globalno
jel mislis na public???

[ Nedeljko @ 06.11.2010. 15:35 ] @
Nije mogao da se kompajlira dok nisam izbacio slot on_nov_deo() koji se više ne koristi. Evo celog projekta koji radi.
[ FantasticFour @ 06.11.2010. 15:41 ] @
i da li si probao
da li prikaze dialog

ako mozes samo da mi kazes sta si izmenio da zapamtim
[ Nedeljko @ 06.11.2010. 16:10 ] @
Da, radi, s tim da sad vidim da u okačenoj verziji nije stavljeno static, bez čega neće raditi.

Globalno znači izvan svih klasa.
[ FantasticFour @ 06.11.2010. 16:50 ] @
JOOJ Hvala puno
nzm da li si primetio da si dobio zahvalnice
samo ako bi mogao da mi kazes sta si izmenio
osim onog static
[ Nedeljko @ 06.11.2010. 18:00 ] @
Pogledaj spisak slotova u fajlu mainwindow.h. Ima jedan suvišan (koji nije implementiran u mainwindow.cpp), pa projekat ne može da se kompajlira. Samo sam još njega izbacio iz mainwindow.h fajla.
[ FantasticFour @ 09.11.2010. 15:37 ] @
a da li bi radilo ovako

QDialog dialog = new QDialog(this);
dialog.show();

cisto me zanima
[ Nedeljko @ 10.11.2010. 15:40 ] @
Radilo bi, ali treba rešiti i problem uništavanja stvorenih objekata.
[ BinaryRuler @ 10.11.2010. 15:59 ] @
Mozes da dodas ovo

dialog->setAttribute(Qt::WA_DeleteOnClose);

da bi se dialog sam obrisao kada se zatvori.

Ali pazi neke metode ne mogu da se pozivaju ako koristis ovaj atribut.
[ karas @ 10.11.2010. 21:58 ] @
@Nedeljko
I ako ne unisti rucno dijalog trebalo bi sam da nestane kada mu se roditelj unistava, zar ne? Dakle, ne bi trebalo da curi memorija ako izostavi delete.
[ BinaryRuler @ 10.11.2010. 22:41 ] @
To je tacno, ali ako imas situaciju u kojoj se cesce otvara (kreira) taj neki dijalog, dok se njegov parent redje unistava, doci ce do memory leak-a.

Primer bi bio mainWindow nekog programa koji je parent nekim dialozima, a taj mainWindow je nosilac applikacije (kada se on zatvori zatvara de cela aplikacija).
[ karas @ 11.11.2010. 09:51 ] @
Pa dobro, main window bi imao pokazivac na taj dijalog, ako je null onda znaci da nije napravljen pa pozove new, inace ga samo prikaze. Dakle, nesto tipa
Code:

void MainWindow::showHelpDialog()
{
    if (this->helpDialog == NULL)
        this->helpDialog = new HelpDialog(this);
    this->helpDialog->show();
}
[ deerbeer @ 11.11.2010. 10:26 ] @
operator new nad dijalog objektima i kreiranje prozora kao sistemskog objekta nije ista stvar .
Parent prozor ce obrisati svoj child prozor kao sistemski objekat ali sigurno nece unistiti objekat (klasu) tog child prozora .
Operator new je neophodan zbog toga kao i takodje zbog ovog :
Citat:

To je tacno, ali ako imas situaciju u kojoj se cesce otvara (kreira) taj neki dijalog, dok se njegov parent redje unistava, doci ce do memory leak-a.


[ karas @ 11.11.2010. 11:20 ] @
Citat:

Parent prozor ce obrisati svoj child prozor kao sistemski objekat ali sigurno nece unistiti objekat (klasu) tog child prozora .

Ne razumem te - tvrdis da roditeljski prozor nece unistiti prozor deteta? Tj. destruktor roditelja nece pozvati destruktor deteta?
[ BinaryRuler @ 11.11.2010. 11:59 ] @
Ne tvrdim da nece, obrisace, ali tek kada korisnik zatvori roditeljski prozor, sto se moze desiti nakon sto je 100 puta otvorio neki child dialog i svaki put ga kreirao. Naravno ovo se odnosi na onog ko ne zeli da ima pokazivace na child dialoge kao atribute u roditeljskoj klasi.

I ako ne zelis da mislis o tome da li je dialog obrisan onda je dobro resenje koristiti

dialog->setAttribute(Qt::WA_DeleteOnClose);

I kada ti treba neki dialog kreiras ga sa new i dodelis mu gore navedeni atribut, on ce se delete-ovati sam kada se zatvori.

http://doc.qt.nokia.com/4.7/qt.html#WidgetAttribute-enum
[ karas @ 11.11.2010. 12:08 ] @
@BinaryRuler
Ok, to je jasno, nisam razumeo deerbeer-a.
[ deerbeer @ 11.11.2010. 12:34 ] @
http://doc.qt.nokia.com/4.7/qdialog.html
Citat:

QDialog::~QDialog ()

Destroys the QDialog, deleting all its children.


Sta mu tacno znaci "deleting all its children" ??

Da li poziva destruktor klase prozora koju sam ja definisao?
npr/

class CParentDialog : public QDialog

class CChildDialog : public QDialog ...

pa recimo imamo :

Code:

CChildDialog * pChild = new CChildDialog (this);  


i QT automatski pozove destruktor CChildDialog ili to moram manuelno da uradim u parent klasi ?

Hocu da kazem da sa ovom konstrukcijom gore iznad samo je child dialog svestan parenta ali ne i obrnuto
da je parent "svestan" childa pa da moze pozvati neki delete nad njim jer samo child objekti biraju ko ce da im bude parent ,
a onda QT kroz svoj sistem prozora sakrivenog u nekom internom api-iju imaju listu childova parent prozora koju posle automatski brisu ili dodaju .
Ili ja negde gresim ?













[Ovu poruku je menjao deerbeer dana 11.11.2010. u 14:03 GMT+1]
[ karas @ 11.11.2010. 13:26 ] @
Nije najsvezija verzija ali to bi trebalo da je isto: http://doc.qt.nokia.com/4.6/objecttrees.html
Citat:

When QObjects are created on the heap (i.e., created with new), a tree can be constructed from them in any order, and later, the objects in the tree can be destroyed in any order. When any QObject in the tree is deleted, if the object has a parent, the destructor automatically removes the object from its parent. If the object has children, the destructor automatically deletes each child. No QObject is deleted twice, regardless of the order of destruction.
[ deerbeer @ 11.11.2010. 13:40 ] @
OK , ako sam dobro shvatio znaci radi otprilike ovako :
Code:

// ako pozovem ovo : 
CChildDialog * pChild = new CChildDialog (this);   

//onda se ustvari izvrsava otprilike sledece : 
QDialog::QDialog(QWidget* parent) 
{
  parent->children()->push_back(this) ; 

}


i time se odrzava lista parent/child elemenata u strukturi ...
[ karas @ 11.11.2010. 13:52 ] @
Tako i ja razumem tu hijerarhiju. Uglavnom, roditeljski widget ce pocistiti decu i bez pozivanja delete.
[ FantasticFour @ 12.11.2010. 12:57 ] @
evo novo pitanje
kako odrediti nasumican broj u qt-u
znam da se koristi qrand funkcija koja se nalazi u QGlobal
ali kako odrediti nasumican broj od 10 do 99
[ karas @ 12.11.2010. 14:09 ] @
Nemas funkciju koja to radi ali mozes i sam da izracunas sa
Code:

qrand() % 89 + 10
[ Nedeljko @ 12.11.2010. 16:45 ] @
Ispravka

Code:
qrand() % 90 + 10
[ Nedeljko @ 12.11.2010. 18:24 ] @
Evo elegantnijeg rešenja koje ti uzgred daje onoliko ravnomernu raspodelu, koliko je generator pseudoslučajnih brojeva ima.

Code:
template<int min, int max>
int rnd() {
    const unsigned int num = max - min + 1;
    const unsigned int bad = (RAND_MAX + 1)/num*num - 1;
    unsigned int ret;

    do {
        ret = rand();
    } while (ret > bad);

    return ret%num + min;
}


Da bi dobijao brojeve u opsegu od 10 do 99, koristi funkciju rnd<10,99>().

Uz izvesnu žrtvu ravnomernosti raspodele može i ovako:

Code:
template<int min, int max>
int rnd() {
    return rand()%(max - min + 1) + min;
}
[ Nedeljko @ 12.11.2010. 21:19 ] @
Moguće su i flekdibilnije, nijansu sporije varijante

Code:
int rnd(int min, int max) {
    unsigned int num = max - min + 1;
    unsigned int bad = (RAND_MAX + 1)/num*num - 1;
    unsigned int ret;

    do {
        ret = rand();
    } while (ret > bad);

    return ret%num + min;
}


Da bi dobijao brojeve u opsegu od 10 do 99, koristi poziv rnd(10,99).

Uz izvesnu žrtvu ravnomernosti raspodele, a dobitak u brzini može ovako:

Code:
int rnd(int min, int max) {
    return rand()%(max - min + 1) + min;
}

[ FantasticFour @ 13.11.2010. 13:49 ] @
evo malo slozenijeg pitanja
koristim linux 2.6.35 ARCH
okruzenje gnome 2.32
QT 4.7.1-1
i sad ja stavim ikonu na neko dugme u qtcreatoru
ta ikona je ustvari ikonica list-add tj ikonica sa plusicem
ali kad promenim ikonice ona i dalje ostaje stara
kako da ikonica na dugmetu bude ikona za dodavanje izabrane teme
hvala
[ BinaryRuler @ 13.11.2010. 14:32 ] @
Odakle dodajes ikonicu iz file sistema ili iz qrc fajla?
[ FantasticFour @ 13.11.2010. 15:11 ] @
pa hocu da bude ona ikonica za add
znaci valjda iz fajlsistema ali kada korisnik promeni set ikona da se i ta ikona promeni
npr u gedit-u mada je on gtk
ako me razumete
mada ovde samo Nedeljko koristi linux pa mogu da i od samo njega ocekujem pravi odgovor mada i vi ostali mozete da pomognete
[ BinaryRuler @ 13.11.2010. 15:55 ] @
Ako si ikonu stavio u .qrc ona se integrise u izvrsni file (sto znaci da ako hoces da promenis ikonu moras da rekompajliras projekat) osim ako ne napravis externi resource file http://doc.qt.nokia.com/4.6/resources.html.

Ako ikonicu ucitavas iz file sistema direktno, da bi promenio ikonicu dovoljno je da je stavis na lokaciju sa koje ucitavas i da joj das isto ime.

PS
To sto pisem sa win-a ne znaci da ne koristim linux :)
[ FantasticFour @ 13.11.2010. 16:27 ] @
ok

PS hehe da li mi verujes da sam imao neki osecaj da ga i ti koristis samo nisam hteo da to napisem da ne bi ispao budala
verovatno neki nas linuxovski osecaj :D
[ FantasticFour @ 14.11.2010. 20:51 ] @
kako da uklonim window border sa prozora
ono sto je nedeljko rekao nece da radi
[ Nedeljko @ 15.11.2010. 10:26 ] @
Radi, samo što setWindowFlags(Qt::FramelessWindowHint); mora da bude praćeno sa show();
[ FantasticFour @ 15.11.2010. 13:41 ] @
sad ovo nisam lepo razumeo

kako se npr radi neki panel bez okvira
jel to samo sklonjen okvir prozora ili je to neki poseban widget
[ FantasticFour @ 15.11.2010. 13:56 ] @
uspeo sam ali imam jos 2 problema

1 on sad nema border ali kad stisnem alt+desni klik na prozor imaju opcije kao sto su minimize maximize ili close kako to ukloniti???
2 kako prozor prikazati u centru ekrana
[ FantasticFour @ 15.11.2010. 20:30 ] @
evo jos jednog pitanja

kako da se neki fajlovi otvaraju mojim programom

npr napravim text editor

primetio sam da u main funkci imaju argumenti argc i argv ali sta to znaci
mislio sam da taj fajl koji se otvara mojim programom bude argument ustari i da preko tog argumenta program prikaze njegov sadrzaj u textedit

ako moze pomoc za ovo
[ deerbeer @ 15.11.2010. 20:58 ] @
http://doc.qt.nokia.com/4.6/qcoreapplication.html#arguments
[ Markonio @ 19.11.2010. 01:15 ] @
Pre par dana sam poceo da se zanimam sa Qt-om, pravim malu aplikaciju, HTML editor sa live preview-om.

Napravio sam formu sa QTextEdit i QWebView poljima.
Code:
#include "MainWindow.h"
#include <QMessageBox>

MainWindow::MainWindow()
{
    ui.setupUi(this);
}

MainWindow::~MainWindow()
{
}

//////////////

void MainWindow::on_textEdit_textChanged()
{
        ui.view->setHtml(ui.textEdit->toPlainText());
}

Sa
Code:
ui.view->setHtml(ui.textEdit->toPlainText());

dinamicki menjam sadržaj stranice u QWebView polju koja se u letu kreira u QTextEdit polju.
Pošto sam otišao korak dalje i koristim neke Javascript biblioteke, postalo je presporo da se stranica osvežava i učitava .js prilikom svakog editovanja.
Interesuje me kako da iskoristim DOM, tj. da kreiram XML/HTML dokument sa putanjom do .js biblioteke (u stringu?), koji zatim jednom ucitam u QWebView i onda preko DOM-a pristupim odredenom elementu preko id-ja (recimo neki div) i samo njega stalno osvežavam textEdit-om?

Video sam negde na netu rešenje u Javascriptu koji se potom izvršava sa QWebFrame::evaluateJavaScript, ali interesuje me da li može nekako sa QWebElement::setInnerXml?
[ FantasticFour @ 28.11.2010. 10:16 ] @
Treba mi pomoc

Kada u QTCreatoru stavim QWebView prijavi mi gresku

evo ui_mainwindow.h fajla gde prijavi gresku


Code:

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>
#include <QtWebKit/QWebView>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralWidget;
    QPushButton *pushButton;
    QWebView *webView;
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(780, 468);
        centralWidget = new QWidget(MainWindow);
        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
        pushButton = new QPushButton(centralWidget);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(10, 10, 91, 23));
        webView = new QWebView(centralWidget);
        webView->setObjectName(QString::fromUtf8("webView"));
        webView->setGeometry(QRect(20, 50, 300, 200));
        webView->setUrl(QUrl("about:blank"));
        MainWindow->setCentralWidget(centralWidget);
        menuBar = new QMenuBar(MainWindow);
        menuBar->setObjectName(QString::fromUtf8("menuBar"));
        menuBar->setGeometry(QRect(0, 0, 780, 20));
        MainWindow->setMenuBar(menuBar);
        mainToolBar = new QToolBar(MainWindow);
        mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
        MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
        statusBar = new QStatusBar(MainWindow);
        statusBar->setObjectName(QString::fromUtf8("statusBar"));
        MainWindow->setStatusBar(statusBar);

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
        pushButton->setText(QApplication::translate("MainWindow", "Back", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H


a evo i sta prijavi
/home/stefan/QTProjects/SEsy/SEsy-build-desktop/./ui_mainwindow.h:48: error: undefined reference to `QWebView::QWebView(QWidget*)'
sta ga zeza
Ako je potrebno mogu da okacim i ceo projekat
mada sve sto sam uradio je napravio QWainWindow i stavio QWebView i QPushButton
ne znam sta da radim
ako mi mozete pomoci bio bih vam veoma zahvalan
[ FantasticFour @ 28.11.2010. 12:00 ] @
Problem je resen
http://talk.maemo.org/archive/index.php/t-49835.html
znaci treba u .pro falj dodati QT += core gui webkit
[ FantasticFour @ 06.12.2010. 12:21 ] @
imama problem sa phonon

Starting /home/stefan/QTProjects/STick/STick-build-desktop/STick...
WARNING: Phonon needs QCoreApplication::applicationName to be set to export audio output names through the DBUS interface
jackd 0.118.0
Copyright 2001-2009 Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn and others.
jackd comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details

could not open driver .so '/usr/lib/jack/jack_firewire.so': libffado.so.2: cannot open shared object file: No such file or directory

JACK compiled with System V SHM support.
loading driver ..
creating alsa driver ... hw:0|hw:0|1024|2|48000|0|0|nomon|swmeter|-|32bit
control device hw:0
the playback device "hw:0" is already in use. Please stop the application using it and run JACK again
cannot load driver module alsa

sve sto saM URADIO JE .

mainwindow.cpp

Code:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSound>
#include <phonon/MediaObject>

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

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

void MainWindow::on_pushButton_clicked()
{
    ui->pushButton_2->setEnabled(true);
    ui->pushButton->setEnabled(false);
    ui->label->setEnabled(false);
    ui->spinBox->setEnabled(false);
    connect(&timer, SIGNAL(timeout()), this, SLOT(tick()));
    timer.start(60000/ui->spinBox->value());
}

void MainWindow::tick()
{
    Phonon::MediaObject *m = Phonon::createPlayer(Phonon::MusicCategory, Phonon::MediaSource("/home/stefan/Tick.wav"));
    m->play();
    m->stop();
}

void MainWindow::on_pushButton_2_clicked()
{
    timer.stop();
    ui->label->setEnabled(true);
    ui->spinBox->setEnabled(true);
    ui->pushButton->setEnabled(true);
    ui->pushButton_2->setEnabled(false);
}


mainwindow.h

Code:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QTimer timer;

private:
    Ui::MainWindow *ui;

private slots:
    void on_pushButton_2_clicked();
    void on_pushButton_clicked();
    void tick();
};

#endif // MAINWINDOW_H



Problem je taj sto kad kliknem na pushbutton odsfira samo jednom a treba sve dok ne kazem stop klikom na pushbutton_2
zvuk je samo ton C cetvrtina u taktu 1/4

sta da radim
[ FantasticFour @ 13.12.2010. 14:54 ] @
Da li bi neko mogao da mi objasni kako se koristi resource file? Znam da su to .qrc fajlovi ali kako da ih koristim? Citao sam malo po dokumentaci ali mi nije bas jasno. Sta je to alias? Sta je to Prefix kada tamo pise?
Npr ako moj qrc fajl izgleda ovako

Code:

<qresource>
  <file>"slika.png"</file>
</qresource> 


kako ce biti komanda za postavljanje pixmapa na label
label.setPixmap(<i sta ovde???>);
Da li treba negde da u kodu napisem koji resource da koristi tj da koristi bas taj resource?
Ako moze pomoc za ovo jer mi je jako hitno. :)
[ Nedeljko @ 13.12.2010. 16:50 ] @
Postavi tu bitmapu negde u dizajneru formi, pa pogledaj zaglavlje koje je dizajner generisao i biće ti jasnije.
[ FantasticFour @ 13.12.2010. 18:17 ] @
Da ali kada ja napravim resource koji se zove mr.qrc
i kada hocu da stavim pixmap na label u dizajneru nema te slike a definisao sam je u qrc fajlu kao u prethodnom postu
[ Nedeljko @ 13.12.2010. 20:48 ] @
U pro fajlu moraš imati liniju poput

Code:
RESOURCES += mr.qrc


Evo kako kod mene izgleda qrc fajl sa jednom slikom:

Code:
<RCC>
    <qresource prefix="/new/prefix1">
        <file>green.png</file>
    </qresource>
</RCC>


Resursi se obično ne ubacuju ručno, već preko okruženja.

Klikni na "Edit" na levoj strani ekrana da bi se pokazalo stablo projekta. Desnim klikom na koren stabla (iznad pro datoteke) će se pojaviti skačući meni iz koga treba izabrati "Add New...". U dijalogu koji se pojavi kliknuti na "Qt" na levoj strani, pa na "Qt Resource file" na desnoj, pa na dugme "Choose...", pa zadaj ime qrc datoteke, zatim klikni na "Next", pa "Finish". U stablu projekta pojaviće se tvoja qrc datoteka. Otvorićeš datoteku u odgovarajućem GUI editoru duplim klikom na nju. Klikom na "Add", pa "Add Prefix" dodaješ nov prefiks unutar koga možeš dodavati resurse pomoću "Add" pa "Add Files".
[ FantasticFour @ 14.12.2010. 20:59 ] @
a SAMO JOS JEDNO PITANJE
Da li ja u resource mogu da stavim bilo sta (npr neku muziku itd)
i kako da koristim resource u kodu
jel putanja ide ovako
:/new/prefix1/slika.jpg
npr
label.setPixmap(":/new/prefix1/slika.jpg");
znaci trebam da koristim ":" jel tako???
[ Nedeljko @ 15.12.2010. 08:30 ] @
Da.
[ FantasticFour @ 30.12.2010. 14:14 ] @
znam dadugo nisam postavljao pitanja ali evo sad je vreme

zelim da pavim chat aplikaciju

e sad ja sam napravio svoj server na svom racunaru
e sad kako kad neko ukuca to u lineedit da se to snimi u fajl i da se posalje na server pa ovaj drugi to da downloaduje
kako bi bilo to moguce
kako da neko ko koristi moj program da pristupi serveru i da pise po njemu
i takodje da cita sa njega

hvala unapred
[ karas @ 04.01.2011. 15:50 ] @
Kakav server si napravio: TCP, HTTP, ...? Postavi kod.
[ FantasticFour @ 06.01.2011. 16:03 ] @
HTTP... program nisam jos poceo jer nemam predstavu sta treba

.
[ Eurora3D Team @ 07.01.2011. 20:33 ] @
Imas Qt?
U primerime imas Network Chat Example. Mozes da proucis. Ne treba ti HTTP protokol za chat, nema potrebe da se komplikuje.


[Ovu poruku je menjao Eurora3D Team dana 07.01.2011. u 21:47 GMT+1]
[ FantasticFour @ 11.01.2011. 23:25 ] @
a gde su primeri
koristim gentoo