Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Portuguese
  4. Como posso ativar meu QDialogButtonBox.
Forum Updated to NodeBB v4.3 + New Features

Como posso ativar meu QDialogButtonBox.

Scheduled Pinned Locked Moved Portuguese
10 Posts 2 Posters 3.2k 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.
  • N Offline
    N Offline
    Neutrox
    wrote on last edited by
    #1

    Olá.
    Estou fazendo uma GUI e eu inseri nela um buttonbox (OK e Cancel).
    Eu clico com o botão direito em cima do ícone(OK e Cancel) e seleciono go to slot . Nessa função eu quero programar para que o botão OK feche a janela e salve todas as alterações feitas e que o botão Cancel feche a janela e não salve as alterações feitas.
    Como posso fazer isso?

    1 Reply Last reply
    0
    • R Offline
      R Offline
      ReinaldoJr
      wrote on last edited by
      #2

      Neutrox, vamos ver:

      1. Você pode utilizar o QtCreator e fazer a "conexão" no Design. Acho mais complicado. Crie um projeto bem simples. No maiwindow observe que criei uma classe QTeste. Fiz um 'promote' em componente QWidget da ui. Adicionei uma ligação slot no Design (clicar no segundo icone parte superior do qtCreator, segurar no botao e arrastar para o widget).
      • "Exemplo aqui...":http://www.rjrsoftware.com.br/untitled.zip
      1. A melhor forma (para mim) é fazer o uso do connect diretamente no código. Em um projeto simples, criar dois slots (confirmar e cancelar) no mainwindow. e ligar os botoes a eles:

      @#include "mainwindow.h"
      #include "ui_mainwindow.h"

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

      connect(ui->pushButton,SIGNAL(clicked()),this,confirmar());
      connect(ui->pushButton_2,SIGNAL(clicked()),this,cancelar());
      }

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

      void MainWindow::confirmar()
      {
      }

      void MainWindow::cancelar()
      {
      }@

      De uma forma bem resumida, espero ter ajudado.

      1 Reply Last reply
      0
      • N Offline
        N Offline
        Neutrox
        wrote on last edited by
        #3

        Obrigado pela sua explicação, só que o ponto que eu tenho dúvida é exatamente este:
        Qual será a função que eu colocarei em MainWindow::confirmar() e MainWindow::concelar(), para que a primeira feche e salve as alterações e a segunda feche e não salve as alterações.
        Todas as formas que eu tentei agora, a função está salvando as anterações em MainWindow::cancelar() mas eu não desejo salvar nesta função.

        1 Reply Last reply
        0
        • R Offline
          R Offline
          ReinaldoJr
          wrote on last edited by
          #4

          Em primeiro lugar você terá que criar dois novos 'slots' uma para confirmar() e outro para cancelar().

          @//adicionar no mainwindow.h
          public slots:
          void confirmar();
          void cancelar();
          @

          @//adicionar no mainwindow.cpp
          void MainWindow::confirmar()
          {
          //aqui confirma e sai
          }

          void MainWindow::cancelar()
          {
          //aqui cancela e sai
          }@

          Depois você deve ligar os botões a esses slots, cada um no seu. Aí que está a questão, no exemplo que postei tem como fazer isso através do QtCreator, arrastar e soltar. Mais volto a dizer que a segunda opção - a de ligação no próprio código - é a mais fácil.

          1 Reply Last reply
          0
          • N Offline
            N Offline
            Neutrox
            wrote on last edited by
            #5

            fiz a ligação com o próprio código, dá um erro no meu connect:
            error: invalid use of void expression
            connect(ui->buttonBox,SIGNAL(clicked()),this,on_buttonBox_accepted());
            ^
            connect(ui->buttonBox,SIGNAL(clicked()),this,on_buttonBox_rejected());
            ^

            Coloquei exatamente no mesmo lugar que você.

            1 Reply Last reply
            0
            • R Offline
              R Offline
              ReinaldoJr
              wrote on last edited by
              #6

              Certo, vejamos sua linha:

              @connect(ui->buttonBox,SIGNAL),this,on_buttonBox_accepted());@

              O correto seria (veja a parte "(clicked()" que não existe em seu código) :

              @connect(ui->pushButton,SIGNAL(clicked()),this,on_buttonBox_accepted());@
              
              1 Reply Last reply
              0
              • N Offline
                N Offline
                Neutrox
                wrote on last edited by
                #7

                Me desculpe, eu que escrevi a linha errada aqui. No meu código há o parte "(clicked())" e aparece este erro que eu falei anteriormente.

                1 Reply Last reply
                0
                • R Offline
                  R Offline
                  ReinaldoJr
                  wrote on last edited by
                  #8

                  Exemplo de uso QButtonbox:

                  @#include "mainwindow.h"
                  #include "ui_mainwindow.h"

                  #include <QMessageBox>

                  MainWindow::MainWindow(QWidget *parent) :
                  QMainWindow(parent),
                  ui(new Ui::MainWindow)
                  {
                  ui->setupUi(this);
                  connect(ui->buttonBox,SIGNAL(accepted()),this,SLOT(confirmar()));
                  connect(ui->buttonBox,SIGNAL(rejected()),this,SLOT(cancelar()));
                  }

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

                  void MainWindow::confirmar()
                  {
                  QMessageBox::information(this,"Confirmado","Confirmado");
                  }

                  void MainWindow::cancelar()
                  {
                  QMessageBox::information(this,"Cancelado","Cancelado");
                  }@

                  1 Reply Last reply
                  0
                  • N Offline
                    N Offline
                    Neutrox
                    wrote on last edited by
                    #9

                    Eu fiz isso e até aparece a mensagem do QMessageBox mas nada acontece com o programa. Não fecha e nem salva :(

                    1 Reply Last reply
                    0
                    • N Offline
                      N Offline
                      Neutrox
                      wrote on last edited by
                      #10

                      Uma maneira que eu achei de resolver meu problema foi colocar na minha função @void MainWindow::on_buttonBox_accepted()@ a execução para escrever no meu arquivo de texto e em seguida utilizei o @qApp->quit()@ para fechar o programa.
                      E em @void MainWindow::on_buttonBox_rejected()@ coloquei apenas o @qApp->quit()@ para fechar e não executar nenhuma escrita no meu arquivo.

                      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