Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Costruttore
QtWS25 Last Chance

Costruttore

Scheduled Pinned Locked Moved Solved Italian
8 Posts 2 Posters 2.1k Views
  • 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.
  • P Offline
    P Offline
    Polly
    wrote on 12 Feb 2018, 16:15 last edited by
    #1

    Salve avrei bisogno di sapere una cosa:
    io all'avvio di un programma vorrei poter visualizzare una finestra e nel contempo sopra una finestra di dialogo che appare sopra la precedente.
    Come devo gestire il costruttore della MainWindow per poter visualizzare anche questa finestra di dialogo?
    Per la main window non ho avuto problemi a crearla, ma la finestra di dialogo (appartente ad una classe per esempio Dialogo) l'ho creata, ma non so come deve essere correttamente inizializzata e dove.
    Ho provato a creare un puntatore della classe Dialogo come membro privato di MainWindow, ma poi non sapevo come inizializzare l'oggetto.
    Qualcuno può suggerirmelo?

    1 Reply Last reply
    0
    • V Offline
      V Offline
      VRonin
      wrote on 12 Feb 2018, 18:27 last edited by
      #2

      Non e' mai una buona idea bloccare un costruttore quindi in MainWindow crea, sotto private:

      Q_SLOT void mostraDialogo(){
      Dialogo mioDialogo(this);
      mioDialogo.exec();
      }
      

      ora nel costruttore di MainWindow aggiungi QTimer::singleShot(0,this,&MainWindow::mostraDialogo); (ricordati #include <QTimer> in cima al file)

      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
      ~Napoleon Bonaparte

      On a crusade to banish setIndexWidget() from the holy land of Qt

      1 Reply Last reply
      0
      • P Offline
        P Offline
        Polly
        wrote on 12 Feb 2018, 20:55 last edited by
        #3

        Mi dice che l'inizializzazione membro non è valida , che single shot non è una base n.
        Ti metto il codice dove mi hai detto di modificare, in modo che puoi dirmi se ho fatto bene o ho commesso un errore madornale

        #include "dialog.h"
        #include <QTimer>
        
        
        namespace Ui {
        class MainWindow;
        }
        
        class MainWindow : public QMainWindow
        {
            Q_OBJECT
        
        public:
            explicit MainWindow(QWidget *parent = nullptr);
            ~MainWindow();
            QString ricezione;
        
        
        private slots:
            void on_pushButton_clicked();
        
        private:
            Ui::MainWindow *ui;
            Q_SLOT void MainWindow::mostraDialogo(){
            Dialog mioDialogo(this);
            mioDialogo.exec();
            }
        
        
        };
        
        #endif // MAINWINDOW_H
        
        
        #include "mainwindow.h"
        #include "ui_mainwindow.h"
        
        
        
        
        MainWindow::MainWindow(QWidget *parent) :
            QMainWindow(parent),QTimer::singleShot(0,this,&MainWindow::mostraDialogo),
            ui(new Ui::MainWindow)
        {
            ui->setupUi(this);
        }
        
        MainWindow::~MainWindow()
        {
            delete ui;
        }
        
        void MainWindow::on_pushButton_clicked()
        {
            ricezione = ui->ValoreNumerico->text();
            qDebug() << ricezione;
        }
        
        
        1 Reply Last reply
        0
        • V Offline
          V Offline
          VRonin
          wrote on 13 Feb 2018, 08:07 last edited by
          #4

          QTimer::singleShot(0,this,&MainWindow::mostraDialogo); va dopo ui->setupUi(this); non nella lista di inizializzazione

          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
          ~Napoleon Bonaparte

          On a crusade to banish setIndexWidget() from the holy land of Qt

          1 Reply Last reply
          0
          • P Offline
            P Offline
            Polly
            wrote on 13 Feb 2018, 10:16 last edited by
            #5

            Perfetto ha funzionato;
            grazie mille. Adesso una volta che ho finito provo a inserirla nel programma che mi interessa poi ti dico.

            1 Reply Last reply
            0
            • P Offline
              P Offline
              Polly
              wrote on 14 Feb 2018, 14:57 last edited by Polly
              #6

              Ecco allora il mio intento era quello di far apparire una finestra di dialogo con la quale io inserendo una stringa e poi dando OK andavo ad assegnare il valore ad una stringa membro della MainWindow.
              Tengo questo come un esercizio per poi applicarlo ad un software per database.
              Ora però mi sono trovato fregato perchè essendo di due classi diverse non so come gestire la cosa e ho provato una mezza sciocchezza (meglio sbagliare che non fare) e volevo sapere se l'idea era buona e se si come devo correggere:

              Provo con un signal/slot
              in Dialog.h aggiungo:

              public:
                  
               .....
                  void emissioneRiga (const QLineEdit &invio);//emissione del segnale
              signals:
                  void clicked(QLineEdit); // segnale emesso
              ......
              

              e in Dialog .cpp aggiungo:

              void emissioneRiga (const QLineEdit &invio)
              {
                  emit clicked(invio);
              }
              

              in MainWindow.h aggiungo:

              private slots:
                  ....
                  void ricezioneDaDialog(QLineEdit &Dialog::clicked());  
              

              In MaiWindow.cpp

              void MainWindow::ricezioneDaDialog(QLineEdit &Dialog::clicked())
              {
                  ricezione = Dialog::mioDialogo.text(); //ricezione è la stringa membro di MainWindow
                  qDebug() << ricezione;
              }
              

              mentre nel main.cpp

              QObject::connect(Dialog::mioDialogo, SIGNAL(clicked(QLineEdit)),MainWindow::w, SLOT (ricezioneDaDialog(QLineEdit &Dialog::clicked()));
              

              Non ho aggiunto la funzione perchè non mi convince molto questa scelta e vorrei qualche delucidazione

              1 Reply Last reply
              0
              • V Offline
                V Offline
                VRonin
                wrote on 14 Feb 2018, 15:07 last edited by
                #7

                L'hai fatto molto piu' difficile di quanto in realta' sia.

                in Dialogo crea sotto public: QString riga() const { return ui->lineEdit->text();}

                nella riga appena sotto mioDialogo.exec(); ti basta chamare mioDialogo.riga() per leggere il testo

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  Polly
                  wrote on 21 Feb 2018, 08:06 last edited by
                  #8

                  Funzionato .
                  Perfetto

                  1 Reply Last reply
                  0

                  2/8

                  12 Feb 2018, 18:27

                  topic:navigator.unread, 6
                  • Login

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