Tichu Counter for Symbian
-
Το δοκίμασα μεχρι να ανοίξει ο διάλογος..
ο κώδικας που πρέπει να προσθεσεις είναι:στη 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();
}
@ -
Οκέι, μετέτρεψα όλο μου τον κώδικα, δηλαδή και τα 2 QWidgets που είχα κάνει σε QDialogs, και πάλι όμως δεν μπορώ να πάρω την τιμή από το 2ο παράθυρο... Αυτό που καταλαβαίνω τελικά είναι πως δεν έχει σημασία το αν είναι QWidget, QDialog ή οτιδήποτε, απλά κάπου το χάνω και δεν ξέρω που......
Δείτε λίγο τους Νέους κώδικες σε 2 QDialog αυτή τη φορά:
-
MainWindow1.h
@#ifndef MAINWINDOW1_H
#define MAINWINDOW1_H
#include <QDialog>
#include <QPushButton>
#include <mainwindow2.h>namespace Ui {
class MainWindow1;
}class MainWindow1 : public QDialog
{
Q_OBJECTpublic:
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();
}@
Και τώρα αυτό που μένει είναι να συνδέσουμε και το 2ο QDialog με όνομα MainWindow2, oύτως ώστε να τερματίζει όταν πατάμε το κουμπί Done και να στέλνει την τιμή που εισήγαγε ο χρήστης. Ο τρόπος σου λειτουργεί μέχρι στιγμής
-
[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_OBJECTpublic:
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();
}@
Και τώρα αυτό που μένει είναι να συνδέσουμε και το 2ο QDialog με όνομα MainWindow2, oύτως ώστε να τερματίζει όταν πατάμε το κουμπί Done και να στέλνει την τιμή που εισήγαγε ο χρήστης. Ο τρόπος σου λειτουργεί μέχρι στιγμής[/quote]
-
[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: Φευγω τωρα... Το βραδακι παλι
-
Κακά τα ψέματα ο προγραμματισμός είναι διαδραστικός... Αυτό που προτείνω είναι να το λύσουμε μέσω Skype ή κάτι τέτοιο, και αφού το λύσουμε(και είσαι διατεθιμένος βέβαια) να ανεβάσω εδώ την "απάντηση" στο ερώτημα μιας και δεν υπάρχει σε κανένα φόρουμ κάτι παρόμοιο(έχω ψάξει σχεδόν τα πάντα).
-
Θα σου έχω ετοιμάσει τα MainWindow (class QWidget) και Dialog(class QDialog) εγώ οπότε το μόνο που θα έχουμε να κάνουμε είναι εντολή και τεστ. Πιστεύω θα βγει άκρη πολύ πιο γρήγορα από το να ανταλάσσουμε post στο φόρουμ
-
Λοιπον,
αν ενδιαφέρεται και κανεις αλλος για το προβλημα που λεγαμε,
η λύση είναι πολύ πιο απλη:
Μετα απο συνεργασια με τον VPellas, αποφασίσαμε το εξής απλό.
Αντι να φτιάξουμε καινούρια Widjets στο πρότυπα του QInputlDialog,
περάσαμε την τιμη που θελαμε σαν external int.Αυτος ο τροπος έχω διαβάσει πως δεν ειναι και ο καλύτερος απο άποψη
προγραμματισμου. Οι external μεταβλητες, θα επρεπε να αποφευγονται.
Εγώ παντως τις αγάπησα....ΥΓ: Λογικά ο VPellas θα ανεβάσει αυτες τις μέρες και τη λύση στο πρόβλημα
για οποιονδηποτε ενδιαφερεται. -
Λοιπόν, λόγω υποχρεώσεων καθυστέρησα να γράψω την απάντηση αλλά εδώ είναι. Μετά από συνεργασία με τον 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);
}@ -
Μια παρατήρηση στον παραπάνω κώδικα, είναι πως αν θελουμε να δώσουμε αρχική
τιμη στην exterrnal μεταβλητη μας, πρεπει να το κάνουμε μετά τον ορισμό της
για να μην μας βγάζει warning o compiler.Επίσης παρατήρησα πως και στο Dialog.cpp του
παραπάνω κώδικα, θα ήταν καλύτερα να δηλώσουμε την c
ως extern int c και όχι απλώς Int c.Τέλος, αν κάποιος δε θελει να χρησιμοποιήσει external μεταβλητες
στο πρόγραμμα του, μπορεί να ορίσει μια public function μεσα στο Dialog.cpp
και να την καλέσει απο το MainWindow αμεσως μετα που θα τρέξει το διάλογο
(Ο κώδικας είνα διαθέσιμος σε οποιον τον ζητήσει)