2017-01-13 1 views
5

J'ai une fenêtre qui comprend tous les boutons et il y a des boutons qui sont cachés.Comment définir la propriété du bouton à visible du widget dans Qt

Maintenant, je veux définir la visibilité sur true à partir d'une autre boîte de dialogue.

Comment le faire? Je l'ai googlé mais je suis incapable de résoudre ce problème.

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include "rams.h" 
#include "abtdev.h" 
#include "syllabus.h" 
#include "login.h" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    setWindowFlags(Qt::Window | Qt::FramelessWindowHint); 
    QMainWindow::showFullScreen(); 

    **ui->but_save->setHidden(true); 
    ui->but_delete1->setHidden(true); 
    ui->but_delete2->setHidden(true); 
    ui->but_upload1->setHidden(true); 
    ui->but_upload2->setHidden(true);** 
} 

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

void MainWindow::on_but_abt_clicked() 
{ 
    abtdev a; 
    a.exec(); 
} 

void MainWindow::on_but_Syllabus_clicked() 
{ 
    syllabus s; 
    s.showFullScreen(); 
    s.exec(); 
} 

void MainWindow::on_but_admin_clicked() 
{ 
    login objlogin; 
    objlogin.exec(); 
} 

void MainWindow::on_but_rams_clicked() 
{ 
    // rams ramswin; 
    // ramswin.showFullScreen(); 
    // ramswin.exec(); 
} 

Je veux apparaître après cette boîte de dialogue se terminée!

#include "login.h" 
#include "ui_login.h" 
#include<QTimer> 
#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include<QObject> 

login::login(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::login) 
{ 
    ui->setupUi(this); 
    setWindowFlags(Qt::Window | Qt::FramelessWindowHint); 
    QTimer::singleShot(60000, this, SLOT(close())); 
    ui->password->setEchoMode(QLineEdit::Password); 
} 

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

void login::on_ok_clicked() 
{ 
    QString username = ui->username->text(); 
     QString password = ui->password->text(); 

     if(username == "123" && password == "123") 
     { 


     ***HERE, after this block executed i want that buttons visible on mainwindow*** 

      } 
     else 
     { 
      ui->label_4->setText("Username and password is not correct !!"); 
     } 
} 
+0

Utiliser les signaux et les fentes de la boîte de dialogue de la fenêtre, puis utilisez la méthode hide (false) sur le bouton. –

+0

comment monsieur, je suis nouveau en qt, s'il vous plaît dites-moi –

+1

Pour commencer, vous pouvez jeter un oeil à mon tutoriel/exemple sur la façon d'échanger des signaux et fente entre les fenêtres dans Qt ici sur stackoverflow: http://stackoverflow.com/documentation/qt/2136/signaux-et-slots/26119/multi-fenêtre-signal-slot-connexion # t = 201701131949329521175 –

Répondre

2

Le code dont vous avez besoin est le suivant:

Supposant que vous appelez votre boîte de dialogue par exemple de MainWindow::on_but_admin_clicked() fonction:

Sur mainwindow.cpp

void MainWindow::on_but_admin_clicked() 
{ 
    //Declare a private object in your mainwindow.h like this: 
    //login* objlogin; 
    objlogin = new login(); 
    //Connect signals to later call the method setHiden(false) 
    QObject::connect(objlogin, SIGNAL(stackoverflowAnswer()), this, SLOT(makeVisible())); 
    objlogin->show(); 
} 

//... 
// The function that will be called from login dialog to enable hidden buttons 
void MainWindow::makeVisible() 
{ 
    ui->but_save->setHidden(false); 
    ui->but_delete1->setHidden(false); 
    ui->but_delete2->setHidden(false); 
    ui->but_upload1->setHidden(false); 
    ui->but_upload2->setHidden(false); 
} 

Au login.cpp(fonction on_ok_clicked()):

void login::on_ok_clicked() 
{ 
    QString username = ui->username->text(); 
     QString password = ui->password->text(); 

     if(username == "123" && password == "123") 
     { 


     ***HERE, after this block executed i want that buttons visible on mainwindow*** 

      emit stackoverflowAnswer(); 
      //... 

Se souvenir de déclarer dans login.h les signaux et les slots:

signals: 
    void stackoverflowAnswer(); 
private slots: 
    void on_ok_clicked(); 
+0

ne pas oublier de marquer comme résolu @RakeshLanjewar! – tinkertime