Evo sad sve u jednom paketu i trebalo bi raditi u Windowsima:
http://podrucna-skola-jamarice.kuhinje- ... elease.zip
Sada je: 28 ožu 2024, 13:01.
Moderator/ica: Moderatori/ce
Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Kako u Qt napraviti bojanku? Nešto slično ovome:
http://www.igre123igrice.com/bojanke/st ... janka.html
Krenem od kliknutog pixela i petljama ispitujem boju okolnih? Pa ako su isti kao kliknuti, onda ih obojam?
http://www.igre123igrice.com/bojanke/st ... janka.html
Krenem od kliknutog pixela i petljama ispitujem boju okolnih? Pa ako su isti kao kliknuti, onda ih obojam?
Evo me opet... oran za nastavak!
I evo odmah prvog problema. Trebam po formi (prozoru) pisati slova. Pišem ih tako da nižem krugove jedan do drugoga, a koordinate čitam iz fajla. Tako sam to radio prije, ali u Visual Basicu. Ovdje mi je prvi problem nacrtati na formi bilo što. Odgledao sam ovaj filmić:
https://www.youtube.com/watch?v=5JE5ek_oN_0
I sve okej i povučem liniju, nacrtam krug ili pravokutnik, ali samo kod pokretanja programa. Doduše, ne radim sa Dialog kao ovaj u filmiću, nego sa MainWindow. Ako te dvije linije napišem ovdje:
I evo odmah prvog problema. Trebam po formi (prozoru) pisati slova. Pišem ih tako da nižem krugove jedan do drugoga, a koordinate čitam iz fajla. Tako sam to radio prije, ali u Visual Basicu. Ovdje mi je prvi problem nacrtati na formi bilo što. Odgledao sam ovaj filmić:
https://www.youtube.com/watch?v=5JE5ek_oN_0
I sve okej i povučem liniju, nacrtam krug ili pravokutnik, ali samo kod pokretanja programa. Doduše, ne radim sa Dialog kao ovaj u filmiću, nego sa MainWindow. Ako te dvije linije napišem ovdje:
- Kod: Označi sve
void MainWindow::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
painter.drawLine(10,10,1000,800);
}
- Kod: Označi sve
void MainWindow::on_pushButton_3_clicked()
{
QPainter painter(this);
painter.drawLine(10,10,1000,800);
}
Koristiš QPainter na krivi način.
QPainter se koristi u paintEvent virtualnoj funkciji:
Dalje, ako želiš ručno pozivati paintEvent, to ne možeš direktno. Moraš pozivati update ili repaint funkciju. [izvor]
Predlažem da malo proguglaš, ima puno materijala online.
Npr.:
QPainter se koristi u paintEvent virtualnoj funkciji:
[izvor]The common use of QPainter is inside a widget's paint event: Construct and customize (e.g. set the pen or the brush) the painter. Then draw. Remember to destroy the QPainter object after drawing.
Dalje, ako želiš ručno pozivati paintEvent, to ne možeš direktno. Moraš pozivati update ili repaint funkciju. [izvor]
Predlažem da malo proguglaš, ima puno materijala online.
Npr.:
Like some other animals, the gecko can perform a neat trick when threatened by a predator: it can amputate its own tail. The dropped tail serves to distract the predator, and by losing it, the lizard can run faster.
Zahvaljujem... ali ne mogu sam skužiti. S this.update nestanu mi stari krugovi i pojavi se novi. A cilj je da se ispunjenim kružićima, nizanjem gusto jednog do drugoga, ispisuje slovo onim smjerom kojim se u naravi isto slovo piše na papiru (demonstracija načina pisanja slova). Budući da se u pisanju slova često olovka povlači po već ispisanoj liniji, onda mora biti i neki kružić druge boje koji glumi olovku. Tempo ispisa je također nužno regulirati. Sve sam to već radio u VB i funkcionira dobro, ali u VB bilo gdje pukneš naredbu circle (x,y,radius,fill) i to je to. Kružić ostane i do njega stavljam drugoga...
maliodpalube je napisao/la:S this.update nestanu mi stari krugovi i pojavi se novi.
Onda u paintEvent-u crtaj sve krugove koje je potrebno vidjeti u tom trenutku, a ne samo "nadodati" nove.
Like some other animals, the gecko can perform a neat trick when threatened by a predator: it can amputate its own tail. The dropped tail serves to distract the predator, and by losing it, the lizard can run faster.
Mučim se, ali ne ide. Evo primjer koda:
Radi prema očekivanju, ali ako uključim onu liniju cekaj(3000); koja bi trebala ubaciti pauzu između crtanja dva kruga, on mi kaže: QWidget::repaint: Recursive repaint detected
Edit:
Zapravo se stvar svodi na pitanje kako nacrtati neki određeni broj ispunjenih krugova koji se gusto nižu jedan na drugoga, ali s pauzom od nekoliko milisekundi, tako da se stvori utisak da neka nevidljiva olovka piše slovo po ekranu otprilike onom brzinom kojom ga piše i dijete u prvome razredu. Krugovi su svi isti - cca 5 px promjera, a koordinate središta čitaju se iz neke datoteke. Za svako slovo će ih biti cca oko 1000.
- Kod: Označi sve
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTime>
int crtaj;
void cekaj(int);
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
crtaj=0;//flag da se ne crta kod pokretanja programa
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *e)
{
if(crtaj==1)
{
QPainter painter(this);
painter.setPen(Qt::red);
painter.setBrush(Qt::red);
painter.drawEllipse(QPoint(100,100),10,10);
//cekaj(3000);
painter.drawEllipse(QPoint(130,130),10,10);
}
}
void MainWindow::on_pushButton_clicked()
{
if(crtaj==0)
crtaj=1;
else
crtaj=0;
this->update();
}
void cekaj( int milisekunde )
{
QTime dieTime = QTime::currentTime().addMSecs( milisekunde );
while( QTime::currentTime() < dieTime )
{
QCoreApplication::processEvents( QEventLoop::AllEvents, 100 );
}
}
Radi prema očekivanju, ali ako uključim onu liniju cekaj(3000); koja bi trebala ubaciti pauzu između crtanja dva kruga, on mi kaže: QWidget::repaint: Recursive repaint detected
Edit:
Zapravo se stvar svodi na pitanje kako nacrtati neki određeni broj ispunjenih krugova koji se gusto nižu jedan na drugoga, ali s pauzom od nekoliko milisekundi, tako da se stvori utisak da neka nevidljiva olovka piše slovo po ekranu otprilike onom brzinom kojom ga piše i dijete u prvome razredu. Krugovi su svi isti - cca 5 px promjera, a koordinate središta čitaju se iz neke datoteke. Za svako slovo će ih biti cca oko 1000.
Riješio sam tu nesretnu pauzu od 8 milisekundi koju trebam između krugova. Budući da pauza ne pali unutar paintEventa, smjestio sam je izvan u nekoj petlji, ali to zapravo znači da to slovo crtam ispočetka onoliko puta koliko krugova čini jedno slovo (cca 1000 puta).
Jer:
Ovo mi čini jako čudno da u Qt sve ono što misliš nacrtati na formi moraš nacrtati u istom času i kasnije više ne možeš "docrtavati" što te volja. U svakom slučaju, dok ne nađem bolje rješenje (da baš ne kažem - normalno rješenje - da docrtavam kad me volja), ovo neka stoji. Radi fino, a to što jedno isto slovo crtam oko 1000 puta ispočetka, da bih ga nacrtao do kraja - nek stoji...
...jer imam novi problem. Nikako mi to sada ne uspijeva smjestiti na scrollArea. Čačkam po stranim forumima, ali kad se zbroje moje dvije skromnosti (znanje Qt-a i znanje engleskog), rezultat su samo dani čačkanja... Ima li negdje neki primjer kako nacrtati krug na scrollArea? Ili da mi netko tko zna to napiše na brzinu - iz primjera ću najlakše skužiti.
Unaprijed zahvaljujem...
Jer:
stefan je napisao/la:Onda u paintEvent-u crtaj sve krugove koje je potrebno vidjeti u tom trenutku, a ne samo "nadodati" nove.
Ovo mi čini jako čudno da u Qt sve ono što misliš nacrtati na formi moraš nacrtati u istom času i kasnije više ne možeš "docrtavati" što te volja. U svakom slučaju, dok ne nađem bolje rješenje (da baš ne kažem - normalno rješenje - da docrtavam kad me volja), ovo neka stoji. Radi fino, a to što jedno isto slovo crtam oko 1000 puta ispočetka, da bih ga nacrtao do kraja - nek stoji...
...jer imam novi problem. Nikako mi to sada ne uspijeva smjestiti na scrollArea. Čačkam po stranim forumima, ali kad se zbroje moje dvije skromnosti (znanje Qt-a i znanje engleskog), rezultat su samo dani čačkanja... Ima li negdje neki primjer kako nacrtati krug na scrollArea? Ili da mi netko tko zna to napiše na brzinu - iz primjera ću najlakše skužiti.
Unaprijed zahvaljujem...
Uf... odustao sam od crtanja krugova direktno na formu. Umjesto toga sam napravio potreban broj labela i u njih sa pixmap stavio slikicu kružića s diska i to u .png formatu, tako da je sve osim kružića prozirno. S time radim što hoću, jer svaku labelu mogu staviti na ->show() kad god mi paše.
Sljedeći problem:
Imam scrollArea u kojem podižem stranice pojedinog udžbenika. Pojavljuje mi se samo vertikalni scroll. Ako "spustim" scrollom neku stranicu do dolje i onda pozovem drugu, ta druga se pojavi spuštena do dolje. Kako da iz koda natjeram taj scroll da bude na vrhu, odnosno da se nova stranca opet prikazuje od vrha scrollArea?
Sljedeći problem:
Imam scrollArea u kojem podižem stranice pojedinog udžbenika. Pojavljuje mi se samo vertikalni scroll. Ako "spustim" scrollom neku stranicu do dolje i onda pozovem drugu, ta druga se pojavi spuštena do dolje. Kako da iz koda natjeram taj scroll da bude na vrhu, odnosno da se nova stranca opet prikazuje od vrha scrollArea?
Na mreži
Trenutno korisnika/ca: / i 9 gostiju.