Advertentie

Auteur Topic: Qt GUI programmering a.d.h. QSlider  (gelezen 1755 keer)

Offline GroundZero

  • Zeer actief lid
  • *****
  • Berichten: 381
  • Aantal ++: 5
    • Devbizz - webdevelopment
Qt GUI programmering a.d.h. QSlider
« Gepost op: januari 01, 2012, 20:58:08 pm »
Beste,

ik ben een beetje begonnen met GUI programmeren, ik moet zeggen dat het me wel een beetje tegenvalt.
Is toch vrij moeilijk om allemaal zo maar te onthouden haha, maar als je dan iets gemaakt hebt wel super gaaf!

Anyways. Ik heb een slider met de naam slider. Ik wil nu dat wanneer er op de knop "GO" geklikt word dat hij
een aantal muisklikken uitvoert. Deze maak ik door gebruik te maken van WinAPI.

Kan iemand mij vertellen hoe dit precies werkt? ik heb dus een slider die een value heeft. Als ik dan op OK klik
dan moet hij de loop uitvoeren aan de hand van het gekozen aantal.

Ik weet nu dus alleen niet waar ik mijn code moet plaatsen en deze moet koppelen aan de knop :P

Offline Divendo

  • Administrator
  • Zeer gerespecteerd lid
  • ********
  • Berichten: 2899
  • Aantal ++: 72
    • Divendo Webs
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #1 Gepost op: januari 01, 2012, 22:18:50 pm »
Heb je al over de signals en slots gelezen van Qt?
Misschien goed om deze tutorial over Qt even te lezen, dan heb je iig de basics van Qt door en weet je hoe het in elkaar steekt: http://doc.qt.nokia.com/4.7/gettingstartedqt.html
Admin - http://divendo-webs.com
[C++][Java][PHP][C#][JavaScript][jQuery][HTML][XML][CSS][SQL][Bash][GML][Nederlands][Engels][Latijn]

"Leren is proberen."

Offline GroundZero

  • Zeer actief lid
  • *****
  • Berichten: 381
  • Aantal ++: 5
    • Devbizz - webdevelopment
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #2 Gepost op: januari 01, 2012, 22:53:01 pm »
Yeah klopt, mooi stukje :)
Dat gedeelte snap ik wel SIGNAL en SLOT, echter gaan ze een stuk verder wat uitgebreider. Ze gooien dan alles in een classe en vanaf dat punt raak ik het een klein beetje kwijt haha.
Ik dacht echter dat wanneer je het eerste gedeelte hebt, dus dat stukje code met die dropdown en slider, dat je dan al een C++ code kan toevoegen welke uitgevoerd word voor het gekozen aantal keer maar dat is dus toch nog niet zo makkelijk? :P

Offline Divendo

  • Administrator
  • Zeer gerespecteerd lid
  • ********
  • Berichten: 2899
  • Aantal ++: 72
    • Divendo Webs
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #3 Gepost op: januari 04, 2012, 15:49:19 pm »
Sorry voor de late reactie, ik was dit bericht vergeten :P

In dat tweede deel gaan ze idd overerven, dat heb jij nog niet nodig.
Eerst moet ik even weten: heb je in Qt Creator je GO-button en slider via zo'n form (drag & drop) gemaakt of met de hand geprogrammeerd zoals in de tutorial voor is gedaan?
Admin - http://divendo-webs.com
[C++][Java][PHP][C#][JavaScript][jQuery][HTML][XML][CSS][SQL][Bash][GML][Nederlands][Engels][Latijn]

"Leren is proberen."

Offline GroundZero

  • Zeer actief lid
  • *****
  • Berichten: 381
  • Aantal ++: 5
    • Devbizz - webdevelopment
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #4 Gepost op: januari 04, 2012, 19:03:54 pm »
Ik heb het met de hand geprogrammeerd ;)
Weet niet of alles goed is, ben pas net begonnen met leren maar mijn code die ik net geschreven heb:

Code: C++
  1. #include <QApplication>
  2. #include <QHBoxLayout>
  3. #include <QSlider>
  4. #include <QSpinBox>
  5. #include <QLabel>
  6.  
  7. int main( int argc, char *argv[] )
  8. {
  9.     // create a new application
  10.     QApplication app(argc, argv);
  11.  
  12.     // create a new widget (main window)
  13.     QWidget *window = new QWidget;
  14.     window->setWindowTitle("My program");
  15.     window->setFixedWidth(500);
  16.  
  17.     // create more widgets (slider and spinbox)
  18.     QLabel *label1 = new QLabel("Amount:");
  19.     QSlider *slider = new QSlider(Qt::Horizontal);
  20.     QSpinBox *spinbox = new QSpinBox;
  21.  
  22.     // set default values for the widgets
  23.     slider->setRange(1, 199);
  24.     spinbox->setRange(1, 199);
  25.  
  26.     // link the slider to the spinbox
  27.     QObject::connect(slider, SIGNAL(valueChanged(int)), spinbox, SLOT(setValue(int)));
  28.     QObject::connect(spinbox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
  29.  
  30.     // set default start value which will set both
  31.     // widgets on this value since they are synced
  32.     spinbox->setValue(20);
  33.  
  34.     // create a new layout holder
  35.     QHBoxLayout *layout = new QHBoxLayout;
  36.     layout->addWidget(label1);
  37.     layout->addWidget(slider);
  38.     layout->addWidget(spinbox);
  39.  
  40.     // display the layout holder on the main widget
  41.     window->setLayout(layout);
  42.  
  43.     // show the window
  44.     window->show();
  45.  
  46.     // return the state
  47.     return app.exec();
  48. }

Offline Divendo

  • Administrator
  • Zeer gerespecteerd lid
  • ********
  • Berichten: 2899
  • Aantal ++: 72
    • Divendo Webs
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #5 Gepost op: januari 04, 2012, 22:55:51 pm »
Nu moet je dus een eigen class maken, met daarin een slot.
Dan verbind je de signal clicked() van de knop (die je trouwens nog moet maken zie ik, je zoekt de QPushButton) met de slot van je eigen class.
Zo'n slot is verder gewoon een normale member-functie, het enige wat er anders aan is is dat je hem dus aan zo'n signal kan linken zodat hij automatisch wordt aangeroepen.

Je class zou er dan ongeveer zo uit zien:
Code: C++ (QT)
  1. class mijnClass : public QObject
  2. {
  3.     Q_OBJECT
  4.  
  5.     public slots:
  6.         void mijnSlot();
  7. };
  8.  
  9. void mijnClass::mijnSlot()
  10. {
  11.     // Doe iets...
  12. }
  13.  

PS: Wist je dat je je code op dit forum ook met de Qt syntax op kan maken?
Dan worden alle Qt classes automatisch herkend en worden ze links naar de desbetreffende documentatie pagina (weliswaar van Qt 4.8 b├Ęta, maar da's weinig anders).
Bovendien snapt ie dan de begrippen signals en slots ;)
Admin - http://divendo-webs.com
[C++][Java][PHP][C#][JavaScript][jQuery][HTML][XML][CSS][SQL][Bash][GML][Nederlands][Engels][Latijn]

"Leren is proberen."

Offline GroundZero

  • Zeer actief lid
  • *****
  • Berichten: 381
  • Aantal ++: 5
    • Devbizz - webdevelopment
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #6 Gepost op: januari 04, 2012, 23:45:37 pm »
Geen idee hoe ik dit nu moet doen hahaha, ik ga even iets maken en dan laat ik dat wel zien.
Zal wel totaal fout zijn maar als je het dan een keer voor wilt doen dan snap ik het gegarandeerd ;)

Code: C++ (QT)
  1. #include <QApplication>
  2. #include <QHBoxLayout>
  3. #include <QSlider>
  4. #include <QSpinBox>
  5. #include <QLabel>
  6. #include <QPushButton>
  7.  
  8.  
  9. class initiateProcess : public QObject {
  10.     Q_OBJECT
  11.  
  12.     public:
  13.     void startProcess( QLabel *label );
  14. };
  15.  
  16. void initiateProcess::startProcess( QLabel *label ){
  17.     //label1->setText("testz0r");
  18. }
  19.  
  20. int main( int argc, char *argv[] )
  21. {
  22.     // create a new application
  23.     QApplication app(argc, argv);
  24.  
  25.     // create a new widget (main window)
  26.     QWidget *window = new QWidget;
  27.     window->setWindowTitle("My tool");
  28.  
  29.     // create more widgets (slider and spinbox)
  30.     QLabel *label1 = new QLabel("Amount:");
  31.     QSlider *slider = new QSlider(Qt::Horizontal);
  32.     QSpinBox *spinbox = new QSpinBox;
  33.     QPushButton *startButton = new QPushButton;
  34.  
  35.     // set default values for the widgets
  36.     slider->setRange(1, 199);
  37.     spinbox->setRange(1, 199);
  38.     startButton->setText("Start");
  39.  
  40.     // link the slider to the spinbox and vise versa
  41.     QObject::connect(slider, SIGNAL(valueChanged(int)), spinbox, SLOT(setValue(int)));
  42.     QObject::connect(spinbox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
  43.  
  44.     // link the button to the function
  45.     QObject::connect(startButton, SIGNAL(clicked()), startButton, SLOT(initiateProcess::startProcess(label1)));
  46.  
  47.     // set default start value which will set both
  48.     // widgets on this value since they are synced
  49.     spinbox->setValue(20);
  50.  
  51.     // create a new layout holder
  52.     QHBoxLayout *layout = new QHBoxLayout;
  53.     layout->addWidget(label1);
  54.     layout->addWidget(slider);
  55.     layout->addWidget(spinbox);
  56.     layout->addWidget(startButton);
  57.  
  58.     // display the layout holder on the main widget
  59.     window->setLayout(layout);
  60.  
  61.     // show the window
  62.     window->show();
  63.  
  64.     // return the state
  65.     return app.exec();
  66. }

Ik heb een start knop toegevoegd en een class.
Ik wil wanneer de start knop ingedrukt word dat de text van de label aangepast word.
Echter zegt hij nu (nog al logisch) het volgende: "Label1 was not declared in this scope".

Verder weet ik dus niet hoe ik op regel 45 mijn slot aan deze classe moet koppelen.
En waarom moet ik public QObject mee geven, dus overerven van de QObject classe?
Verder is het wel duidelijk allemaal haha ;)
« Laatst bewerkt op: januari 05, 2012, 00:34:17 am door GroundZero »

Offline vetyst

  • Lid
  • ***
  • Berichten: 75
  • Aantal ++: 3
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #7 Gepost op: januari 05, 2012, 00:26:50 am »
ik kan je wel helpen om het gedeelte op te lossen van
Code: C++ (QT)
  1. initiateProcess::startProcess()

in
Code: C++ (QT)
  1. class initiateProcess : QObject
heb je een functie genaamt
Code: C++ (QT)
  1. void startProcess()
de variables die je mee geeft is een
Code: C++ (QT)
  1. QLabel *label

je class ziet er dan zo uit :
Code: C++ (QT)
  1. class initiateProcess : public QObject {
  2.     Q_OBJECT
  3.  
  4.     public:
  5.     void startProcess(QLabel *label);
  6. };
verder moet je dat dan ook in de functie zelf veranderen dus
Code: C++ (QT)
  1. void initiateProcess::startProcess()
  2.  
word nu
Code: C++ (QT)
  1. void initiateProcess::startProcess(QLabel *label)
  2.  
om deze aan te roepen doe je simpelweg :
Code: C++ (QT)
  1. initiateProcess::startProcess(label1)

hoe je de functie kan aan roepen na dat de button is gebruikt weet ik helaas nog niet

Mvg,
Veyst
<html5> - .#css3 - JavaScript - $(jQuery) - SQL - $php5 - C++ - C# - Java - <XML>

Offline GroundZero

  • Zeer actief lid
  • *****
  • Berichten: 381
  • Aantal ++: 5
    • Devbizz - webdevelopment
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #8 Gepost op: januari 05, 2012, 00:31:19 am »
Super! dankjewel ik ga meteen even kijken hoe verder :P had het al bijna opgelost alleen zegt hij nu:

Object::connect: No such slot QPushButton::initiateProcess::startProcess(label1) in ..\GUI-2-LEREN\main.cpp:45

Ik ga even jou post na lopen dankjewel! (PS. heb bovenstaande code van mij geupdate)
« Laatst bewerkt op: januari 05, 2012, 00:34:02 am door GroundZero »

Offline vetyst

  • Lid
  • ***
  • Berichten: 75
  • Aantal ++: 3
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #9 Gepost op: januari 05, 2012, 01:05:02 am »
Btw, in de functie
QObject::connect();

Wat is de member die nodig is ?
ik zou dan eventueel wat meer kunnen
<html5> - .#css3 - JavaScript - $(jQuery) - SQL - $php5 - C++ - C# - Java - <XML>

Offline GroundZero

  • Zeer actief lid
  • *****
  • Berichten: 381
  • Aantal ++: 5
    • Devbizz - webdevelopment
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #10 Gepost op: januari 05, 2012, 01:09:29 am »
bedoel je de regel:

Code: C++ (QT)
  1. QObject::connect(startButton, SIGNAL(clicked()), startButton, SLOT(initiateProcess::startProcess(label1)));

? want anders geen idee wat je bedoeld haha.

Enigste wat ik graag wil is dat wanneer er op de knop gedrukt word dat hij de tekst van die label veranderd zegt maar.
Dus als ik op de knop startButton click (clicked()) dan moet hij de functie met de naam startProcess uitvoeren met als argument de naam\
van de desbetreffende label zeg maar :)
« Laatst bewerkt op: januari 05, 2012, 01:16:39 am door GroundZero »

Offline vetyst

  • Lid
  • ***
  • Berichten: 75
  • Aantal ++: 3
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #11 Gepost op: januari 05, 2012, 01:19:46 am »
Ja dat ben ik op het moment ook aan het proberen maar om een of andere reden haalt hij de startprocess uit de QPushButton class die dus niet bestaat

dus inplaats van void initiateProcess::startProcess()
doet hij QPushButton::startProcess()
<html5> - .#css3 - JavaScript - $(jQuery) - SQL - $php5 - C++ - C# - Java - <XML>

Offline GroundZero

  • Zeer actief lid
  • *****
  • Berichten: 381
  • Aantal ++: 5
    • Devbizz - webdevelopment
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #12 Gepost op: januari 05, 2012, 01:22:25 am »
ja klopt haha dat zag ik, snapte het ook al niet om eerlijk te zijn.
Als ik een oplossing vind post ik het hier, ik ga niet slapen voor ik het heb hahaha :P

Offline vetyst

  • Lid
  • ***
  • Berichten: 75
  • Aantal ++: 3
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #13 Gepost op: januari 05, 2012, 01:31:22 am »
ik denk dat ik de rede al weet waarom hij dit doet.

Nu alleennog testen ... gaat 30 min duren haha

PS: ik heb je een pm gestuurd
<html5> - .#css3 - JavaScript - $(jQuery) - SQL - $php5 - C++ - C# - Java - <XML>

Offline GroundZero

  • Zeer actief lid
  • *****
  • Berichten: 381
  • Aantal ++: 5
    • Devbizz - webdevelopment
Re: Qt GUI programmering a.d.h. QSlider
« Reactie #14 Gepost op: januari 05, 2012, 01:33:53 am »
oke super, ben benieuwd of het werkt!!!
Zal meteen even kijken naar de PM thanks ;)

Advertentie