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
Forum Update on Monday, May 27th 2025

Costruttore

Scheduled Pinned Locked Moved Solved Italian
8 Posts 2 Posters 2.2k 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.
  • PollyP Offline
    PollyP Offline
    Polly
    wrote on 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
    • VRoninV Offline
      VRoninV Offline
      VRonin
      wrote on 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
      • PollyP Offline
        PollyP Offline
        Polly
        wrote on 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
        • VRoninV Offline
          VRoninV Offline
          VRonin
          wrote on 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
          • PollyP Offline
            PollyP Offline
            Polly
            wrote on 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
            • PollyP Offline
              PollyP Offline
              Polly
              wrote on 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
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on 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
                • PollyP Offline
                  PollyP Offline
                  Polly
                  wrote on last edited by
                  #8

                  Funzionato .
                  Perfetto

                  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