2017-01-13 13 views
5

У меня есть одно окно, которое включает в себя все кнопки и некоторые скрытые кнопки.Как установить свойство кнопки на вид из виджета в Qt

Теперь я хочу установить видимость в true из другого диалогового окна.

Как это сделать? У меня есть googled, но я не могу решить эту проблему.

#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(); 
} 

И я хочу появляться после того, как это диалоговое окно получить завершен!

#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

использовать сигналы и слоты от диалога к и затем используйте кнопку hide (false) на кнопке. –

+0

как сэр, я новичок в qt, скажите, пожалуйста, –

+1

В качестве начального руководства вы можете взглянуть на мой учебник/пример о том, как обмениваться сигналами и слотом между окнами в Qt здесь, в stackoverflow: http://stackoverflow.com/documentation/qt/2136/signal-and-slots/26119/multi-window-signal-slot-connection # t = 201701131949329521175 –

ответ

2

код вам нужно, следующий:

Предположив, что вы называете диалог, например, из MainWindow::on_but_admin_clicked() функции:

На 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); 
} 

На login.cpp(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(); 
      //... 

Запомнить объявить в login.h сигналы и слоты:

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

не забывайте отмечать как решенные @ RakeshLanjewar! – tinkertime