Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Spanish
  4. Cambiar Propiedades entre Formularios
Forum Updated to NodeBB v4.3 + New Features

Cambiar Propiedades entre Formularios

Scheduled Pinned Locked Moved Spanish
5 Posts 2 Posters 5.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.
  • C Offline
    C Offline
    Cardlo
    wrote on last edited by
    #1

    Un saludo para todos.

    De antemano agradezco su atención.

    Tengo una situación con mi proyecto en Qt. Tengo dos formularios MainWindows y Form, en MainWindows existe un Botón que me lleva al formulario Form, y en este existe un conjunto de opciones que me configuran una tabla y me muestran los Qwidget que pordefecto estaban SetVisible(false) en el formulario MainWindows, En otras palabras me muestra lo que estaba escondido en el primer formulario.
    Mi pregunta específicamente es, como cambio las propiedades de un objeto de un formulario1 desde un formulario2.
    Yo intente implementar el siguiente código, pero no me funciono sin embargo lo dejo para que por favor me digan mis errores, agradezco algún ejemplo o cualquier información que me puedan brindar ya que soy novato en Qt.

    En MainWindows se encuentra el Qwidget que quiero mostrar.
    MainWindows.h
    @public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void fazer(); @

    MainWindows.cpp

    @void MainWindow::fazer(){
    ui->Widget->setVisible(true);
    }
    @

    Form.cpp

    @void Form::on_pushButton_clicked()
    {
    MainWindow *Vanta = new MainWindow(this);
    Vanta->fazer();
    Vanta->show();
    }@

    Bueno agradezco nuevamente su atención y espero ser claro en mi pregunta

    1 Reply Last reply
    0
    • juankiJ Offline
      juankiJ Offline
      juanki
      Moderators
      wrote on last edited by
      #2

      Hola

      Tienes un MainWindow, desde ahí abres un Form, y desde ese Form quieres cambiar algo del MainwWindow primero. Según el código que pones, en el método on_pushButton_clicked() estás creando otro MainWindow, por lo que no estás accediendo al primero.

      Para hacer lo que propones se me ocurre que puedas pasar un puntero del widget al que quieras modificar del MainWindow al Form, o usar señales, creas una señal en el Form y la conectas con un SLOT del MainWindow y así tan solo tendrás que emitir la señal cuando quieras que se modifique el widget.

      Saludos

      Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
      Procura escribir correctamente y sin faltas de ortografía.

      Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

      1 Reply Last reply
      0
      • C Offline
        C Offline
        Cardlo
        wrote on last edited by
        #3

        Puede ser un poco mas ilustrativo, tiene algún ejemplo que me pueda suministrar

        1 Reply Last reply
        0
        • juankiJ Offline
          juankiJ Offline
          juanki
          Moderators
          wrote on last edited by
          #4

          Hola

          Te pongo un pequeño ejemplo, no es muy difícil de implementar lo que te conté. El caso de las señales es muy sencillo, tan solo hay que definir una y emitirla cuando quieras, además, como setVisible es un SLOT, tan solo hay que conectar tu señal con ese SLOT.

          Por ejemplo, así sería la clase que emite la señal:

          el .h:
          @class Dialog : public QDialog
          {
          Q_OBJECT

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

          signals:
          // la señal que emitimos, lleva un parámetro bool porque el SLOT
          // setVisible lo requiere y así podemos usar la señal para ocultarlo
          // o mostrarlo
          void widgetVisible(bool);

          private slots:
          void on_pushButton_clicked();

          private:
          Ui::Dialog *ui;
          };
          @

          el .cpp:
          @void Dialog::on_pushButton_clicked()
          {
          // se emite la señal al pulsar el botón, en este caso el parámetro puse false,
          // pero puedes usarlo para mostrar/ocultar el widget
          emit widgetVisible(false);
          }
          @

          Ahora el .cpp del MainWindow, tan solo creamos la ventana y conectamos el la señal que acabamos de crear
          con el SLOT que queremos:
          @Dialog ventana(this);

          // widget es el nombre que yo le dí a un elemento de la interfaz
          connect(&ventana, SIGNAL(widgetVisible(bool)), ui->widget, SLOT(setVisible(bool)));

          ventana.exec();
          @

          El otro caso es si acaso más sencillo aun, tan solo hay que añadir un puntero al widget que queramos en el constructor de la segunda ventana y usar ese puntero para ocultar/mostrar el widget:

          .h:
          @class Dialog : public QDialog
          {
          Q_OBJECT

          public:
          // hay que añadir el nuevo parámetro en el constructor
          explicit Dialog(QWidget *widget, QWidget *parent = 0);
          ~Dialog();

          signals:

          private slots:
          void on_pushButton_clicked();

          private:
          Ui::Dialog *ui;

          // puntero al widget que ocultaremos
          QWidget *pWidget;
          

          };
          @

          el .cpp
          @void Dialog::on_pushButton_clicked()
          {
          // ahora tan solo usamos el puntero para ocultar el widget
          pWidget->setVisible(false);
          }
          @

          Y en el MainWindow tan solo hay que añadir el nuevo parámetro al crear la ventana:
          @void MainWindow::on_bAbrir_clicked()
          {
          Dialog ventana(ui->widget, this);

          ventana.exec();
          }
          @

          Personalmente me gusta más el sistema de SIGNALS/SLOT, este ejemplo es muy básico, pero imagina que quieres "controlar" varios widgets, habría que pasar varios parámetros o buscar otra alternativa.

          Saludos

          Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
          Procura escribir correctamente y sin faltas de ortografía.

          Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

          1 Reply Last reply
          0
          • C Offline
            C Offline
            Cardlo
            wrote on last edited by
            #5

            Juanki Agradezco tu ayuda y atención, afortunadamente resolví mi problema, con la ayuda que me diste, ademas de guiarme muy bien del siguiente video.
            Gracias por tomarte el tiempo para resolver mi duda ya que es algo muy importante para mi.
            "Video Signal and Slot entre Formularios":http://youtu.be/K4dOf6d9wP0

            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