Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Greek
  4. Tichu Counter for Symbian
Forum Updated to NodeBB v4.3 + New Features

Tichu Counter for Symbian

Scheduled Pinned Locked Moved Greek
20 Posts 2 Posters 13.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • V Offline
    V Offline
    VPellas
    wrote on last edited by
    #1

    Πρώτο μου post, πριν λίγο καιρό έμαθα το πως να χρησιμοποιώ C/C++ και έπεσα κατευθείαν στα βαθιά. Αυτό που προσπαθώ να κάνω είναι όπως λέω και στον τίτλο έναν μετρητή πόντων για το παιχνίδι Tichu. Ομολογώ να πω πως έψαξα πολύ κάποια πράγματα, κατάφερα κάποια μόνος μου αλλά σε ένα σημείο έχω κολλήσει και δεν μπορώ να βρω το πως να το καταφέρω. Αρχικά σας δείχνω μία εικόνα από το Design της εφαρμογής !http://s3.postimage.org/6gxryqrpv/image.jpg()! Και ακόμη μία για το πως αυτό φαίνετε στο κινητό . !http://s8.postimage.org/tm1zgntk5/image.jpg()! . Τώρα, όπως μπορείτε να δείτε υπάρχουν 2 κουμπιά Count και 2 Spinboxes αντίστοιχα. Αυτό που ψάχνω να βρω πως γίνετε είναι το να παίρνω την τιμή από τα Spinboxes με το κάθε κουμπί Count αντίστοιχα και να την εμφανίζω σε κάθε μία από τις 2 κεντρικές οθονούλες ακριβώς από πάνω. Αφού την εμφανίζει πάνω, θέλω όταν πατηθεί ξανά το Count να προσθέτει την τωρινή με την προηγούμενη τιμή. Έχω φάει τον τόπο και δεν μπορώ να καταλάβω τι γίνετε οπότε κάθε βοήθεια θα ήταν χρήσιμη... Ευχαριστώ εκ των προτέρων.

    1 Reply Last reply
    0
    • V Offline
      V Offline
      VPellas
      wrote on last edited by
      #2

      Να συμπληρώσω πως σε θέμα κώδικα δεν έχω προσθέσει τίποτα είναι ακριβώς όπως ήταν στην αρχή γι' αυτόν ακριβώς τον λόγο δεν τον έβαλα εδώ, Ευχαριστώ και πάλι

      1 Reply Last reply
      0
      • V Offline
        V Offline
        VPellas
        wrote on last edited by
        #3

        Αρχικά ευχαριστώ πολύ για την αποδοχή στο Group, καλώς σας βρήκα. Δεύτερον, για να κάνω αυτό που περιγράφω πάνω, μετά από πολύ κόπο και πολύ ψάξιμο, έκανα ένα νέο προγραμματάκι το οποιο περιέχει μόνο το Spinbox, ένα label και ένα κουμπί OK (σχετική εικόνα : !http://s3.postimage.org/my1zau9kj/image.jpg()! Αυτό που θέλω να πετύχω σε αυτό το στάδιο είναι να εμφανίζει με το ΟΚ την τιμή του Spinbox στο Label. Και αυτή τη φορά επεξεργάστηκα τους κώδικες τους οποίους και θα σας παραθέσω γιατί μου βγάζει error Ότι δεν υπάρχει η Slot στην εντολή QObject::connect

        mypage.h
        @#ifndef MYPAGE_H
        #define MYPAGE_H

        #include <QWidget>
        #include <QPushButton>
        #include <QLabel>
        #include <QSpinBox>

        class QLabel;
        class QSpinBox;
        class QPushButton;

        namespace Ui {
        class Mypage;
        }

        class Mypage : public QWidget
        {
        Q_OBJECT
        public:
        explicit Mypage(QWidget *parent = 0);
        ~Mypage();
        private slots:
        void pushButtonClicked();

        private:
        Ui::Mypage *ui;
        QLabel *label;
        QSpinBox *numberBox;
        QPushButton *pushButton;
        };

        #endif // MYPAGE_H
        @

        mypage.cpp
        @#include "mypage.h"
        #include "ui_mypage.h"
        #include <QtGui>
        #include <QPushButton>
        #include <QLabel>
        #include <QSpinBox>

        Mypage::Mypage(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Mypage)
        {

        numberBox = new QSpinBox;
        numberBox->setRange(0, 1000);
        QLabel *label= new QLabel;
        QPushButton *pushButton = new QPushButton;
        ui->setupUi(this);
        

        // ΕΔΩ ΕΙΝΑΙ ΤΟ ΣΗΜΕΙΟ ΠΟΥ ΜΟΥ ΒΓΑΖΕΙ ΣΤΟ Compilation Ότι δεν υπάρχει η Slot

        QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));
        

        }

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

        void Mypage::pushButtonClicked()
        {
        label -> setNum(numberBox->value());
        }
        @

        Αν καταφέρω και λύσω αυτό το πραγματάκι τότε θα μπορέσω να δημιουργήσω το πρόγραμμα, γι' αυτό σας παρακαλώ αν θα μπορούσατε να βοηθήσετε θα σας ήμουν ευγνώμων

        1 Reply Last reply
        0
        • K Offline
          K Offline
          koleygr
          wrote on last edited by
          #4

          Έφτιαξα ενα μικρο project που κανει αυτο που θελεις, αλλα το εφτιαξα με τον QtCreator και με επιλογή
          Qt Gui Application (που ειναι η μονη που χρησιμοποιω προς το παρον).
          Ο κώδικας είναι ο εξής:

          tichucounter.h :
          @#ifndef TICHUCOUNTER_H
          #define TICHUCOUNTER_H

          #include <QMainWindow>

          namespace Ui {
          class TichuCounter;
          }

          class TichuCounter : public QMainWindow
          {
          Q_OBJECT

          public:
          explicit TichuCounter(QWidget *parent = 0);
          ~TichuCounter();

          private:
          Ui::TichuCounter *ui;
          private slots:
          void pushButtonClicked();
          };

          #endif // TICHUCOUNTER_H@

          main.cpp:
          @#include <QtGui/QApplication>
          #include "tichucounter.h"

          int main(int argc, char *argv[])
          {
          QApplication a(argc, argv);
          TichuCounter w;
          w.show();

          return a.exec&#40;&#41;;
          

          }
          @

          tichucounter.cpp:
          @#include "tichucounter.h"
          #include "ui_tichucounter.h"

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

          ui->spinBox->setRange(0,1000);
          
          connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));
          

          }

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

          void TichuCounter::pushButtonClicked()
          {
          ui->label->setNum(ui->spinBox->value());
          }@

          εχει και το tichucounter.ui που το εφτιαξα στο design του Qt.

          Σου κανει αυτό?

          ΥΓ: τώρα ειδα την ημερομηνια... υποθετω πως εχεις ηδη λύσει το προβλημα...
          (Η διαφορά με τον δικο σου κωδικα, ειναι κυριως στο πως καλεις το connect και τα Objects).

          Using:Qt Creator 2.4.1 under UBUNTU

          1 Reply Last reply
          0
          • V Offline
            V Offline
            VPellas
            wrote on last edited by
            #5

            Ευχαριστώ πάρα μα πάρα πολύ για την απάντηση. Η αλήθεια είναι πως το συγκεκριμένο πρόβλημα το έχω λύσει. Η εφαρμογή είναι σχεδόν έτοιμη, θα έλεγα γύρω στο 80 % . Δοκίμασα τα Spinboxes και δεν μ' άρεσε το πως δουλεύει οπότε προσπάθησα να αντικαταστήσω τα Spinbox με ένα κουμπί που όταν το πατάς να σε μεταφέρει σε καινούριο παράθυρο στο οποίο να υπάρχει κάτι σαν στυλ "Calculator" στο οποίο ο χρήστης να βάζει τις τιμές. Τώρα για να μην ξαναεξηγώ το πρόβλημα θα σου βάλω το ποστ που έχω κάνει στο "Mobile & Embeded", το εξηγώ πολύ διεξοδικά(2η Σελίδα ο τελευταίος κώδικας που έβαλα). "Mobile and Embedded":http://qt-project.org/forums/viewthread/24982/P15/#120261 . Τα παιδιά από εκεί μου είπαν πως πρέπει να επεξεργαστώ τον Original Κώδικα της QInputDialog για να κάνω το 2ο παράθυρο σαν pop up dialog. Βρήκα τον κώδικα , απομόνωσα αυτό που θέλω αλλά δεν ξέρω τι πρέπει να κάνω και πως να συνεχίσω από αυτό το σημείο. Αν θέλεις να με βοηθήσεις μπορώ να σου γράψω και αυτούς τους κώδικες.

            1 Reply Last reply
            0
            • K Offline
              K Offline
              koleygr
              wrote on last edited by
              #6

              Καλημέρα...
              Έριξα μια σύντομη ματιά και τα συμπεράσματα μου είναι τα εξής:

              1. Η εφαρμογή σου χρειάζεται απλώς ενα MainWindow και ενα Dialog.
              2. Παρατήρησα οτι χρησιμοποιεις καπου SLOT με όρισμα (συγκεκριμενα στο MainWindow.h
                σειρα 22 @ void Proccess(int a);@

              Αυτο θα σου δημιουργήσει καποια προβληματακια:
              "Δες εδώ:":http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CD4QFjAB&url=http://www.qtcentre.org/threads/31116-Why-is-not-possible-call-slot-with-parameters&ei=Lw9iUf-oM4b8OYnYgJAJ&usg=AFQjCNEUp6CkooYC-Pw1EFl5oAfqUk2rzQ&sig2=tU1Fhe7dzJzgPxsjPT8L1g&bvm=bv.44770516,d.ZWU&cad=rja

              Δεν ειδα ομως παρακατω να τη χρησιμοποιεις σε connect και ισως εχω αδικο.

              1. Τα ονόματα των συναρτήσεων σου, φαινονται σαν να εχουν προελθει απο συνδεσεις μεσω του Design. Πρόσφατα, είχα ένα προβληματακι με αυτες τις συνδεσεις και εχω αποφασισει νατις κανω manual για να μπορω να κανω και αποσύνδεση αν χρειαστει. Ειμαι αρχαριος στο Qt και ισως κανω λαθος... αλλα καπου αποθηκευονται αυτες οι συνδεσεις και μετα δε μπορεις να τις χειριστεις.
                (Τουλαχιστον εγω, αναγκαστικα και εφτιαξα απο την αρχη όλο το MainWindow εξαιτιας μιας τετοιας συνδεσης που δεν εσβηνε απο πουθενα)

              2. Νομιζω πως πρεπει να ανοιγεις το δευτερο MainWindow (που μαλλον θα γινει Dialog) με
                exec() και οχι με show()... δε θες παραλληλη προσβαση και στα 2... τουλαχιστον ετσι καταλαβα.
                και έπειτα, για να γυρισεις στο MainWindow, απλα θα πρεπει να κλείσεις το διαλογο και θα γυρισει μονο του. (Η προταση μου, χωρις να ειμαι σιγουρος, ειναι να γινει ο διαλογος Int και κλεινοντας να επιστρεφει την καταλληλη τιμη αλλα δεν το εχω ψαξει και δεν ξερω ακομα αν και πως γινεται αυτο)

              3. Αυτο το:
                @ key2.on_Done_clicked();@

              στη γραμη 42 του MainWindow.cpp τι ειναι?

              ΥΓ: Θα μπορουσα να σε βοηθησω περισσοτερο αν ηξερα τι ακριβως θελεις να κανεις
              (Απλα ελληνικα... χωρις κωδικα... και μετα τον βλεπουμε και αυτον.)
              Δηλαδη:
              -Ξεκιναμε απο ενα MainWindow (το οποιο καλει αμεσως ενα διαλογο)
              -Ο διαλογος παιρνει μια τιμη και την επιστρεφει στo MainWindow για επεξεργασια
              (ή την επεξεργαζεται και αυτος πρωτα?)
              -Μετα το MainWindow τι επεξεργασια θελεις να κανει? κλπ

              Using:Qt Creator 2.4.1 under UBUNTU

              1 Reply Last reply
              0
              • V Offline
                V Offline
                VPellas
                wrote on last edited by
                #7

                Kαλημέρα,
                ας παρουσιάσω και εδώ το πρόβλημά μου στα ελληνικά μπας και μπορείς είτε εσύ είτε κάποιος άλλος να βοηθήσει.

                Αρχικά έχω δημιουργήσει 2 MainWindows (Class QWidget και τα 2)
                MainWindow1 : !http://s18.postimg.org/53h2p1w0p/Main_Window1.jpg()!
                MainWindow2 : !http://s22.postimg.org/oy6xeu7mp/Main_Window2.jpg()!

                Αυτό που θέλω να γίνεται όταν τρέχει το πρόγραμμα είναι το εξής :

                1. Ο χρήστης πατάει το "Recount" Button και βγαίνει το παράθυρο MainWindow2
                2. Βάζει μια τιμή στο "QLineEdit" Widget
                3. Όταν πατάει το "Done" Button θέλω το πρόγραμμα με κάποιον τρόπο να αποθηκεύει την τιμή και να την στέλνει στο MainWindow1 (Σε αυτό ακριβώς το σημείο υπάρχει το QInputDialog το οποίο όμως είναι standard. Εγώ θέλω να δημιουργήσω ένα δικό μου, βασισμένο στην διαδικασία αυτήν, με το οποίο όμως ο Χρήστης εισάγει τιμές χειροκίνητα στο πρόγραμμα, σύμφωνα με ένα "Calculator - type keyboard" που επίσης μόνος μου έφτιαξα, θα σας βάλω και εικόνα από το Πρόγραμμά μου να δείτε τι εννοώ.)
                4. Όταν πατηθεί το "Done" Button θέλω να έρχετε πάλι το παράθυρο MainWindow1
                5. Tέλος, όταν πατηθεί το κουμπί Count θέλω να εμφανίζεται σε κάποιο από τα QLabels η τιμή που εισήγαγε ο χρήστης.

                Τώρα, οι ενναλαγές των παραθύρων λειτουργούν κανονικά, απλά δεν λειτουργεί η διαδικασία αυτή, διότι απ' ότι κατάλαβα κάθε φορά που γίνετε εναλλαγή παραθύρων δημιουργούνται συνέχεια Νέα Widgets και έτσι χάνονται οι τιμές.

                Αυτό είναι το ScreenShot με το Keyboard (calculator - type) που έφτιαξα στο κυρίως πρόγραμμά μου :
                !http://s17.postimg.org/nh2sqs3wv/sadsad.jpg()!

                Και εδώ είναι ο κώδικας :

                MainWindow1.h

                @ #ifndef MAINWINDOW1_H
                #define MAINWINDOW1_H
                #include <QWidget>
                #include <QPushButton>
                #include<mainwindow2.h>
                namespace Ui {
                class MainWindow1;
                }

                class MainWindow1 : public QWidget
                {
                    Q_OBJECT
                 
                public:
                    explicit MainWindow1(QWidget *parent = 0);
                    ~MainWindow1();
                 
                public slots:
                    void openNewWindow();
                    void on_Count_clicked();
                    void on_Record_clicked();
                    void Proccess(int a);
                 
                 
                private:
                    Ui::MainWindow1 *ui;
                    class MainWindow2 *mMyNewWindow;
                 
                private slots:
                 
                };
                 
                #endif // MAINWINDOW1_H@
                

                MainWindow2.h
                @#ifndef MAINWINDOW2_H
                #define MAINWINDOW2_H
                #include <QWidget>
                #include<mainwindow1.h>
                #include <QPushButton>
                namespace Ui {
                class MainWindow2;
                }

                class MainWindow2 : public QWidget
                {
                Q_OBJECT

                public:
                explicit MainWindow2(QWidget *parent = 0);
                ~MainWindow2();

                public slots:
                void openOldWindow();
                void on_Done_clicked();
                int GetNumber();

                private:
                Ui::MainWindow2 *ui;
                class MainWindow1 *mMyOldWindow;

                private slots:
                };@

                MainWindow1.cpp
                @ #include "mainwindow1.h"
                #include "ui_mainwindow1.h"
                #include "mainwindow2.h"
                #include <QWidget>
                #include <QPushButton>

                MainWindow1::MainWindow1(QWidget *parent) :
                    QWidget(parent),
                    ui(new Ui::MainWindow1)
                {
                    ui->setupUi(this);
                    QObject::connect(ui->Record, SIGNAL( clicked() ), this, SLOT(on_Record_clicked()));
                    QObject::connect(ui->Count, SIGNAL( clicked() ), this, SLOT(on_Count_clicked()));
                }
                 
                MainWindow1::~MainWindow1()
                {
                    delete ui;
                }
                 
                void MainWindow1::openNewWindow()
                {
                    mMyNewWindow = new MainWindow2();
                    mMyNewWindow->show();
                 
                }
                 
                void MainWindow1::on_Record_clicked()
                {
                    openNewWindow();
                }
                 
                void MainWindow1::Proccess(int a)
                {
                    ui->Test->setNum(a);
                }
                 
                void MainWindow1::on_Count_clicked()
                {
                    int number;
                    MainWindow2 key2;
                    key2.on_Done_clicked();
                }
                

                @
                *
                MainWindow2.cpp*
                @ #include "mainwindow2.h"
                #include "ui_mainwindow2.h"
                #include <QWidget>
                #include <QPushButton>
                #include <QString>
                MainWindow2::MainWindow2(QWidget *parent) :

                    QWidget(parent),
                    ui(new Ui::MainWindow2)
                {
                    int p;
                    ui->setupUi(this);
                    p = GetNumber();
                    MainWindow1 key;
                    key.Proccess(p);
                 
                    QObject::connect(ui->Done, SIGNAL( clicked() ), this, SLOT(on_Done_clicked()));
                }
                 
                MainWindow2::~MainWindow2()
                {
                    delete ui;
                }
                 
                int MainWindow2::GetNumber()
                {
                    QString mystring1(ui->Score1->text());
                    int c = mystring1.toInt();
                 
                    ui->label->setNum(c);
                 
                    return c;
                }
                 
                void MainWindow2::on_Done_clicked()
                {
                    int k;
                    k = GetNumber();
                    MainWindow1 key1;
                    key1.Proccess(k);
                    openOldWindow();
                }
                 
                void MainWindow2::openOldWindow()
                {
                    mMyOldWindow = new MainWindow1();
                   mMyOldWindow->show();
                }
                

                @

                1 Reply Last reply
                0
                • V Offline
                  V Offline
                  VPellas
                  wrote on last edited by
                  #8

                  Τώρα koleygr , απαντώντας στις ερωτήσεις σου :

                  1) Η εφαρμογή σου χρειάζεται απλώς ενα MainWindow και ενα Dialog.

                  -Κάτι τέτοιο κατάλαβα και εγώ απλά δεν ξέρω πως μπορώ να δημιουργήσω ένα Dialog έχοντας υπόψιν σαν παράδειγμα το QInputDialog::GetInt .

                  2)Παρατήρησα οτι χρησιμοποιεις καπου SLOT με όρισμα (συγκεκριμενα στο MainWindow.h σειρα 22 )

                      @void Proccess(int a);@
                  

                  Δεν ειδα ομως παρακατω να τη χρησιμοποιεις σε connect και ισως εχω αδικο.

                  • Η συγκεκριμένη διαδικασία δεν είναι ενωμένη με κανένα κουμπί ούτως ώστε να χρειαστεί να την κάνω connect ή κάτι τέτοιο. Είναι μια διαδικασία που την έκανα μόνος μου για να παίρνει ένα όρισμα , στην περίπτωσή μας τον αριθμό που υποτίθετε κρατάμα από το 2ο παράθυρο και να τον βάζει στο Qlabel του πρώτου παραθύρου.

                  3) Τα ονόματα των συναρτήσεων σου, φαινονται σαν να εχουν προελθει απο συνδεσεις μεσω του Design. Πρόσφατα, είχα ένα προβληματακι με αυτες τις συνδεσεις και εχω αποφασισει νατις κανω manual για να μπορω να κανω και αποσύνδεση αν χρειαστει. Είμαι αρχαριος στο Qt και ισως κανω λαθος… αλλα καπου αποθηκευονται αυτες οι συνδεσεις και μετα δε μπορεις να τις χειριστεις (Τουλαχιστον εγω, αναγκαστικα και εφτιαξα απο την αρχη όλο το MainWindow εξαιτιας μιας τετοιας συνδεσης που δεν εσβηνε απο πουθενα)

                  • Ναι όλο το Design που έκανα το έκανα μέσω Qt Designer , μου είναι πολύ πιο εύκολο να χρησιμοποιώ αυτές τις μεθόδους παρά το QPushButton new *button1 e.t.c ... Δεν ξέρω γι' αυτό που λες πάντως δεν μου δημιούργησε πρόβλημα στο μέχρι τώρα πρόγραμμα που έχω φτιάξει...

                  4) Νομιζω πως πρεπει να ανοιγεις το δευτερο MainWindow (που μαλλον θα γινει Dialog) με exec() και οχι με show()… δε θες παραλληλη προσβαση και στα 2… τουλαχιστον ετσι καταλαβα. και έπειτα, για να γυρισεις στο MainWindow, απλα θα πρεπει να κλείσεις το διαλογο και θα γυρισει μονο του. (Η προταση μου, χωρις να ειμαι σιγουρος, ειναι να γινει ο διαλογος Int και κλεινοντας να επιστρεφει την καταλληλη τιμη αλλα δεν το εχω ψαξει και δεν ξερω ακομα αν και πως γινεται αυτο)

                  • Στην τωρινή του μορφή δηλαδή σαν MainWindow2 δεν τρέχει η εντολή exec(), συγκεκριμένα μου βγάζει το σφάλμα : 'class MainWindow2' has no member named 'exec'

                  5)Αυτο το:

                      @key2.on_Done_clicked(&#41;;@
                  

                  στη γραμη 42 του MainWindow.cpp τι ειναι?

                  • Ας πάρουμε για παράδειγμα αυτό το μέρος του προγράμματος :

                  @void MainWindow2::on_Done_clicked()
                  {
                  int k;
                  k = GetNumber();
                  //Θέτουμε την μεταβλητή key1 σαν class MainWindow1
                  MainWindow1 key1;
                  //Oύτως ώστε να μπορέσουμε από το MainWindow2 να χρησιμοποιήσουμε
                  // τις συναρτήσεις της MainWindow1 ( εδώ π.χ. η Proccess(k) )
                  key1.Proccess(k);
                  openOldWindow();
                  }@

                  1 Reply Last reply
                  0
                  • V Offline
                    V Offline
                    VPellas
                    wrote on last edited by
                    #9

                    ΥΓ: Θα μπορουσα να σε βοηθησω περισσοτερο αν ηξερα τι ακριβως θελεις να κανεις(Απλα ελληνικα… χωρις κωδικα… και μετα τον βλεπουμε και αυτον.)Δηλαδη:
                    -Ξεκιναμε απο ενα MainWindow (το οποιο καλει αμεσως ενα διαλογο)
                    -Ο διαλογος παιρνει μια τιμη και την επιστρεφει στo MainWindow για επεξεργασια(ή την επεξεργαζεται και αυτος πρωτα?)
                    -Μετα το MainWindow τι επεξεργασια θελεις να κανει? κλπ

                    • Νομίζω τώρα το εξήγησα και πάνω πριν τον κώδικα αλλά ας το ξαναπώ με λίγα λόγια :
                      1-- Ο χρήστης πατάει το κουμπί Recount και εμφανίζεται το 2ο παράθυρο
                      2-- Γράφει μια τιμή στο QLineEdit
                      3-- Πατώντας το Done επιστρέφει στο 1ο παράθυρο
                      4-- Πατώντας το Count η τιμή που έγραψε εμφανίζεται στο QLabel

                    Τέλος ευχαριστώ και πάλι μόνο και μόνο που ασχολήθηκες και εσύ και για όποιον άλλον θέλει να ασχοληθεί. Τώρα σαν ερώτηση δική μου. Πως θα μπορέσω να δημιουργήσω αυτό το Dialog που όλοι μου λέτε , και πως θα μπορέσω να το κάνω να συμπεριφέρετε σαν την MainWindow2(που στην συγκεκριμένη περίπτωση είναι class QWidget)

                    1 Reply Last reply
                    0
                    • K Offline
                      K Offline
                      koleygr
                      wrote on last edited by
                      #10

                      Βασικα δεν ασχολήθηκα αρκετά ακόμα...
                      και τώρα ετοιμαζομαι να πεσω για ύπνο.

                      Λοιπον... αν έχεις το Qt Creator:
                      Ξεκινας και φτιαχνεις project με το διάλογό σου
                      (Μην μπεις στα signals/slots απλα βαλε δυο κουμπια και ενα label)
                      Βέβαια νομιζω πως θα χρειαστεις ενα label για καθε ομαδα και ενα widjet
                      επιλογεα της ομαδας ή κατι τετοιο αλλα δεν εχουμε φτασει ακομα εκει...

                      Έπειτα... για να κατασκευασεις το διαλογο, πας απο το
                      file->new file or project->Qt->Qt Designer Form Class
                      και καπου εκει σου βγάζει το Dialog withowt buttons
                      και μετα το κανεις add στο project.

                      Σε βγαζει να δημιουργήσεις το διαλογο
                      και εδω νομίζω πως πρεπει να βαλλεις και τα κουμπιά που θα γραφει ο χρήστης
                      και αυτα που χρειαζεσαι απο το mainwindow2 που δειχνεις γιατι στην
                      πραγματικοτητα θες σε αυτό το διάλογο να μπορει να γραψει ο χρηστης...
                      δε νομιζω να θελεις ο διάλογος να ανοίγει καινουριο διαλογο για να γράψει ο χρηστης...
                      μετα ο πρωτος(πρωιν mainwindow2) τι ρολο παιζει?

                      Μετα, έχεις απλως να προσθεσεις(define) στο mainwindow.h το dialog.h
                      και τις slots που χρειαζεσαι
                      Έπειτα στο mainwindow.ccp κανεις τα connect...
                      Τελος... μπαινεις στα connect και φτιαχνεις τον υπολοιπο κωδικα σου

                      ΥΓ: θα δοκιμασω αυριο το βραδακι γιατι δε θα βρω χρονο νωριτερα
                      καλη τυχη μεχρι τοτε

                      Using:Qt Creator 2.4.1 under UBUNTU

                      1 Reply Last reply
                      0
                      • K Offline
                        K Offline
                        koleygr
                        wrote on last edited by
                        #11

                        Το δοκίμασα μεχρι να ανοίξει ο διάλογος..
                        ο κώδικας που πρέπει να προσθεσεις είναι:

                        στη mainwindow.h
                        @#include "dialog.h"@
                        και
                        @
                        private slots:
                        void pB_clicked();@

                        και στη mainwindow.cpp:
                        αμεσως μετα το setupUi
                        @
                        connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(pB_clicked()));@
                        και τη συνάρτηση:
                        @void MainWindow::pB_clicked()
                        {
                        Dialog *mDialog= new Dialog();
                        mDialog->setAttribute(Qt::WA_DeleteOnClose,true);

                        mDialog->exec&#40;&#41;;
                        

                        }
                        @

                        Using:Qt Creator 2.4.1 under UBUNTU

                        1 Reply Last reply
                        0
                        • V Offline
                          V Offline
                          VPellas
                          wrote on last edited by
                          #12

                          Οκέι, μετέτρεψα όλο μου τον κώδικα, δηλαδή και τα 2 QWidgets που είχα κάνει σε QDialogs, και πάλι όμως δεν μπορώ να πάρω την τιμή από το 2ο παράθυρο... Αυτό που καταλαβαίνω τελικά είναι πως δεν έχει σημασία το αν είναι QWidget, QDialog ή οτιδήποτε, απλά κάπου το χάνω και δεν ξέρω που......

                          Δείτε λίγο τους Νέους κώδικες σε 2 QDialog αυτή τη φορά:

                          1 Reply Last reply
                          0
                          • V Offline
                            V Offline
                            VPellas
                            wrote on last edited by
                            #13

                            MainWindow1.h
                            @#ifndef MAINWINDOW1_H
                            #define MAINWINDOW1_H
                            #include <QDialog>
                            #include <QPushButton>
                            #include <mainwindow2.h>

                            namespace Ui {
                            class MainWindow1;
                            }

                            class MainWindow1 : public QDialog
                            {
                            Q_OBJECT

                            public:
                            explicit MainWindow1(QWidget *parent = 0);
                            ~MainWindow1();

                            public slots:
                            void pB_clicked();
                            void on_Count_clicked();
                            void Proccess(int a);

                            private:
                            Ui::MainWindow1 *ui;
                            class MainWindow2 *mMyNewWindow;
                            };

                            #endif // MAINWINDOW1_H
                            @

                            MainWindow1.cpp
                            @#include "mainwindow1.h"
                            #include "ui_mainwindow1.h"
                            #include "mainwindow2.h"
                            #include <QDialog>
                            #include <QPushButton>

                            MainWindow1::MainWindow1(QWidget *parent) :
                            QDialog(parent),
                            ui(new Ui::MainWindow1)
                            {
                            ui->setupUi(this);
                            QObject::connect(ui->Record,SIGNAL(clicked()),this,SLOT(pB_clicked()));
                            QObject::connect(ui->Count, SIGNAL( clicked() ), this, SLOT(on_Count_clicked()));
                            }

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

                            void MainWindow1::on_Count_clicked()
                            {
                            int number;
                            MainWindow2 key2;
                            key2.on_Done_clicked();
                            }

                            void MainWindow1::Proccess(int a)
                            {
                            ui->label->setNum(a);
                            }

                            void MainWindow::pB_clicked()
                            {
                            mMyNewWindow = new MainWindow2();
                            mMyNewWindow->setAttribute(Qt::WA_DeleteOnClose,true);

                            mMyNewWindow->exec(&#41;;
                            

                            }@

                            Και τώρα αυτό που μένει είναι να συνδέσουμε και το 2ο QDialog με όνομα MainWindow2, oύτως ώστε να τερματίζει όταν πατάμε το κουμπί Done και να στέλνει την τιμή που εισήγαγε ο χρήστης. Ο τρόπος σου λειτουργεί μέχρι στιγμής

                            1 Reply Last reply
                            0
                            • K Offline
                              K Offline
                              koleygr
                              wrote on last edited by
                              #14

                              [quote author="VPellas" date="1365396062"]Οκέι, μετέτρεψα όλο μου τον κώδικα, δηλαδή και τα 2 QWidgets που είχα κάνει σε QDialogs, και πάλι όμως δεν μπορώ να πάρω την τιμή από το 2ο παράθυρο... Αυτό που καταλαβαίνω τελικά είναι πως δεν έχει σημασία το αν είναι QWidget, QDialog ή οτιδήποτε, απλά κάπου το χάνω και δεν ξέρω που......

                              Δείτε λίγο τους Νέους κώδικες σε 2 QDialog αυτή τη φορά:
                              [/quote]

                              [quote author="VPellas" date="1365396724"]MainWindow1.h
                              @#ifndef MAINWINDOW1_H
                              #define MAINWINDOW1_H
                              #include <QDialog>
                              #include <QPushButton>
                              #include <mainwindow2.h>

                              namespace Ui {
                              class MainWindow1;
                              }

                              class MainWindow1 : public QDialog
                              {
                              Q_OBJECT

                              public:
                              explicit MainWindow1(QWidget *parent = 0);
                              ~MainWindow1();

                              public slots:
                              void pB_clicked();
                              void on_Count_clicked();
                              void Proccess(int a);

                              private:
                              Ui::MainWindow1 *ui;
                              class MainWindow2 *mMyNewWindow;
                              };

                              #endif // MAINWINDOW1_H
                              @

                              MainWindow1.cpp
                              @#include "mainwindow1.h"
                              #include "ui_mainwindow1.h"
                              #include "mainwindow2.h"
                              #include <QDialog>
                              #include <QPushButton>

                              MainWindow1::MainWindow1(QWidget *parent) :
                              QDialog(parent),
                              ui(new Ui::MainWindow1)
                              {
                              ui->setupUi(this);
                              QObject::connect(ui->Record,SIGNAL(clicked()),this,SLOT(pB_clicked()));
                              QObject::connect(ui->Count, SIGNAL( clicked() ), this, SLOT(on_Count_clicked()));
                              }

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

                              void MainWindow1::on_Count_clicked()
                              {
                              int number;
                              MainWindow2 key2;
                              key2.on_Done_clicked();
                              }

                              void MainWindow1::Proccess(int a)
                              {
                              ui->label->setNum(a);
                              }

                              void MainWindow::pB_clicked()
                              {
                              mMyNewWindow = new MainWindow2();
                              mMyNewWindow->setAttribute(Qt::WA_DeleteOnClose,true);

                              mMyNewWindow->exec(&#41;;
                              

                              }@

                              Και τώρα αυτό που μένει είναι να συνδέσουμε και το 2ο QDialog με όνομα MainWindow2, oύτως ώστε να τερματίζει όταν πατάμε το κουμπί Done και να στέλνει την τιμή που εισήγαγε ο χρήστης. Ο τρόπος σου λειτουργεί μέχρι στιγμής[/quote]

                              Using:Qt Creator 2.4.1 under UBUNTU

                              1 Reply Last reply
                              0
                              • K Offline
                                K Offline
                                koleygr
                                wrote on last edited by
                                #15

                                [quote author="koleygr" date="1365414525"]
                                [quote author="VPellas" date="1365396062"]Οκέι, μετέτρεψα όλο μου τον κώδικα, δηλαδή και τα 2 QWidgets που είχα κάνει σε QDialogs, και πάλι όμως δεν μπορώ να πάρω την τιμή από το 2ο παράθυρο... Αυτό που καταλαβαίνω τελικά είναι πως δεν έχει σημασία το αν είναι QWidget, QDialog ή οτιδήποτε, απλά κάπου το χάνω και δεν ξέρω που......

                                Δείτε λίγο τους Νέους κώδικες σε 2 QDialog αυτή τη φορά:
                                [/quote]

                                Όπα! και τους δύο ε?
                                Sorry... δικο μου λαθος... To πρώτο πρεπει να μεινει MainWindow....
                                τυπογραφικο ηταν
                                (Μαλλον πως θα χρησιμοποιήσουμε το μενου του αργοτερα...)

                                Ξανα κανε το πρώτο MainWindow... και προσπαθησε να μην φτιαξεις μονος σου
                                κανενα cinnect μεσα απο το desighn...
                                μόνο το πρωτο connect που σου είπα εγω.

                                ΒΑΣΙΚΟ:
                                Έχεις το Qt Creator?
                                Αν ναι... πώς ξεκινάς? Τί ειδους project δημιουργεις?
                                Είχα καταλαβει πως ειναι αυτο που λεει για κινητά... αλλα εμενα μου το
                                έβγαλε αλλιώς.

                                Επισης αυτο το on_pbClicked() νομιζω πως ειναι το παλιο σου on_Record_Clickd...
                                ονομασε το οπως θελεις εσυ που να το βρισκεις ευκολα

                                Τέλος χρειαζομαι τον source της QInputDialog και δεν τον βρισκω ευκολα.
                                Είδα σε προηγούμενο ποστ σου πως τον εχεις βρει..
                                πες μου που ειναι ή ανεβασε τον εδω.

                                ΥΓ: Τελικα θα φτιάξεις και 2ο Dialog? εκεινο με τα κουμπακια?

                                ΥΓ2: Φευγω τωρα... Το βραδακι παλι

                                Using:Qt Creator 2.4.1 under UBUNTU

                                1 Reply Last reply
                                0
                                • V Offline
                                  V Offline
                                  VPellas
                                  wrote on last edited by
                                  #16

                                  Κακά τα ψέματα ο προγραμματισμός είναι διαδραστικός... Αυτό που προτείνω είναι να το λύσουμε μέσω Skype ή κάτι τέτοιο, και αφού το λύσουμε(και είσαι διατεθιμένος βέβαια) να ανεβάσω εδώ την "απάντηση" στο ερώτημα μιας και δεν υπάρχει σε κανένα φόρουμ κάτι παρόμοιο(έχω ψάξει σχεδόν τα πάντα).

                                  1 Reply Last reply
                                  0
                                  • V Offline
                                    V Offline
                                    VPellas
                                    wrote on last edited by
                                    #17

                                    Θα σου έχω ετοιμάσει τα MainWindow (class QWidget) και Dialog(class QDialog) εγώ οπότε το μόνο που θα έχουμε να κάνουμε είναι εντολή και τεστ. Πιστεύω θα βγει άκρη πολύ πιο γρήγορα από το να ανταλάσσουμε post στο φόρουμ

                                    1 Reply Last reply
                                    0
                                    • K Offline
                                      K Offline
                                      koleygr
                                      wrote on last edited by
                                      #18

                                      Λοιπον,
                                      αν ενδιαφέρεται και κανεις αλλος για το προβλημα που λεγαμε,
                                      η λύση είναι πολύ πιο απλη:
                                      Μετα απο συνεργασια με τον VPellas, αποφασίσαμε το εξής απλό.
                                      Αντι να φτιάξουμε καινούρια Widjets στο πρότυπα του QInputlDialog,
                                      περάσαμε την τιμη που θελαμε σαν external int.

                                      Αυτος ο τροπος έχω διαβάσει πως δεν ειναι και ο καλύτερος απο άποψη
                                      προγραμματισμου. Οι external μεταβλητες, θα επρεπε να αποφευγονται.
                                      Εγώ παντως τις αγάπησα....

                                      ΥΓ: Λογικά ο VPellas θα ανεβάσει αυτες τις μέρες και τη λύση στο πρόβλημα
                                      για οποιονδηποτε ενδιαφερεται.

                                      Using:Qt Creator 2.4.1 under UBUNTU

                                      1 Reply Last reply
                                      0
                                      • V Offline
                                        V Offline
                                        VPellas
                                        wrote on last edited by
                                        #19

                                        Λοιπόν, λόγω υποχρεώσεων καθυστέρησα να γράψω την απάντηση αλλά εδώ είναι. Μετά από συνεργασία με τον koleygr δώσαμε λύση σε ένα πρόβλημα που προσωπικά μου πήρε πολλές ώρες προσπάθειας και διαβάσματος... Συγκεκριμένα το πρόβλημα είναι το πως παίρνουμε τιμές από ένα QDialog σε μία QMainWindow(γίνεται και με άλλα π.χ. QWidgets αλλά με αυτά το καταφέραμε, αυτό θα παραθέσω.)

                                        Ας δούμε λίγο τους κώδικες:
                                        dialog.h
                                        @#ifndef DIALOG_H
                                        #define DIALOG_H
                                        #include <QDialog>
                                        namespace Ui {
                                        class Dialog;
                                        }
                                        class Dialog : public QDialog
                                        {
                                        Q_OBJECT
                                        public:
                                        explicit Dialog(QWidget *parent = 0);
                                        ~Dialog();
                                        private:
                                        Ui::Dialog *ui;
                                        private slots:
                                        void closeWindow();
                                        };
                                        #endif // DIALOG_H@

                                        MainWindow.h
                                        @#ifndef MAINWINDOW_H
                                        #define MAINWINDOW_H
                                        #include <QMainWindow>
                                        namespace Ui {
                                        class MainWindow;
                                        }

                                        class MainWindow : public QMainWindow
                                        {
                                        Q_OBJECT
                                        public:
                                        explicit MainWindow(QWidget *parent = 0);
                                        ~MainWindow();
                                        private:
                                        Ui::MainWindow *ui;
                                        private slots:
                                        void pushButtonClicked();
                                        };
                                        #endif // MAINWINDOW_H@

                                        Dialog.cpp

                                        @#include "dialog.h"
                                        #include "ui_dialog.h"
                                        #include <mainwindow.h>
                                        //dhlwnoume edw thn metavlhth c; (eksoteriki)
                                        int c;
                                        Dialog::Dialog(QWidget *parent) :
                                        QDialog(parent),
                                        ui(new Ui::Dialog)
                                        {
                                        ui->setupUi(this);
                                        connect(ui->, SIGNAL( clicked() ), this, SLOT(closeWindow()));
                                        }

                                        Dialog::~Dialog()
                                        {
                                        delete ui;
                                        }
                                        void Dialog::closeWindow()
                                        {
                                        QString mystring1(ui->lineEdit->text());
                                        c = mystring1.toInt();
                                        ui->label->setNum(c);
                                        this->reject();
                                        }@

                                        MainWindow.cpp

                                        @#include "mainwindow.h"
                                        #include "ui_mainwindow.h"
                                        #include "dialog.h"
                                        //kai edw kanoume tin metavlhth c extern gia na mporei na xrhsimopoih8ei
                                        extern int c;
                                        MainWindow::MainWindow(QWidget *parent) :
                                        QMainWindow(parent),
                                        ui(new Ui::MainWindow)
                                        {
                                        ui->setupUi(this);
                                        connect(ui->pushButton, SIGNAL( clicked() ), this, SLOT(pushButtonClicked()));
                                        }

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

                                        void MainWindow::pushButtonClicked()
                                        {
                                        QString mystring(ui->Screen->text());
                                        int k = mystring.toInt();
                                        Dialog *dialog= new Dialog();
                                        dialog->exec();
                                        ui->Screen->setNum(k+c);
                                        }@

                                        1 Reply Last reply
                                        0
                                        • K Offline
                                          K Offline
                                          koleygr
                                          wrote on last edited by
                                          #20

                                          Μια παρατήρηση στον παραπάνω κώδικα, είναι πως αν θελουμε να δώσουμε αρχική
                                          τιμη στην exterrnal μεταβλητη μας, πρεπει να το κάνουμε μετά τον ορισμό της
                                          για να μην μας βγάζει warning o compiler.

                                          Επίσης παρατήρησα πως και στο Dialog.cpp του
                                          παραπάνω κώδικα, θα ήταν καλύτερα να δηλώσουμε την c
                                          ως extern int c και όχι απλώς Int c.

                                          Τέλος, αν κάποιος δε θελει να χρησιμοποιήσει external μεταβλητες
                                          στο πρόγραμμα του, μπορεί να ορίσει μια public function μεσα στο Dialog.cpp
                                          και να την καλέσει απο το MainWindow αμεσως μετα που θα τρέξει το διάλογο
                                          (Ο κώδικας είνα διαθέσιμος σε οποιον τον ζητήσει)

                                          Using:Qt Creator 2.4.1 under UBUNTU

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved