2017-01-31 1 views
-4

일부 코드를 작성했습니다. 고객으로 로그인하면 customer (해당 열의 값은 1)을 숨겨야합니다. 신호에 매개 변수를 전달해야합니다. 내 customerLoginisSa입니다. 이러한 매개 변수를 신호 및 슬롯에 전달하는 방법은 무엇입니까?신호 및 슬롯

Main.cpp :

int main(int argc, char *argv[]) 
    { 
    QApplication a(argc, argv); 

    initialize(); 

    SafeOTPWindow w; 
    Login login; 
    login.connect(&login, SIGNAL(loggedIn()), &w, SLOT(show()) ); 
    login.connect(&login, SIGNAL(loginCancelled() ), &w, SLOT(close())); 

    login.show(); 
    a.exec(); 
} 

Login.h 다음의 경우

void SafeOTPWindow::initLogTable() 
    { 

    QList<OtpLog> logs; 
    int ret = otpRepo.fetchOtpLogs(logs); 
    if(ret != errorCodes::SUCCESS) 
    { 
     QMessageBox msgBox(QMessageBox::Critical, QString("SafeOTP"), 
         QString("OTPLogs could not be fetched"),QMessageBox::Ok, this); 
     msgBox.exec(); 
     QLOG_ERROR() << "fetchLogs error " << ret; 
     return; 
    } 

    QStandardItemModel *model = new QStandardItemModel(0,5,this); //5 columns 
    model->setHorizontalHeaderItem(0, new QStandardItem(QString("Date"))); 
    model->setHorizontalHeaderItem(1, new QStandardItem(QString("Customer"))); 
    model->setHorizontalHeaderItem(2, new QStandardItem(QString("Server"))); 
    model->setHorizontalHeaderItem(3, new QStandardItem(QString("Authorized by"))); 
    model->setHorizontalHeaderItem(4, new QStandardItem(QString("Description"))); 


     for(QList<OtpLog>::Iterator lIt = logs.begin(); lIt != logs.end(); lIt++) 
     { 
      OtpLog& log = *lIt; 
      QList<QStandardItem*> row; 
      row.push_back(new QStandardItem(log.when.toString("dd MMM yyyy, hh:mm"))); 
      row.push_back(new QStandardItem(QString(log.customer))); 
      row.push_back(new QStandardItem(QString(log.server))); 
      row.push_back(new QStandardItem(QString(log.author))); 
      row.push_back(new QStandardItem(QString(log.reason))); 

      model->appendRow(row); 
     } 
    // set the data model 
    ui->tblLog->setModel(model); 
    //Set the column to hide 
    ui->tblLog->setColumnHidden(1,true); 


    // set the column widths 
    int tw = ui->tblLog->width() - 5; 
    int w = tw/6; 

     for(int i=0; i<4;i++) 
     { 
     ui->tblLog->setColumnWidth(i,w); 
     tw -= w; 
     } 
    ui->tblLog->setColumnWidth(4,tw); 
    } 
+1

신호 및 슬롯에 대한 Qt 문서를 읽으려고 했습니까? 그것들은 값이 바뀔 때 신호를 내보내는 간단한 'Counter'클래스를 가지고 있으며 신호는 새로운 값을가집니다. http://doc.qt.io/qt-5/signalsandslots.html –

+0

시도해 보았습니다.하지만 위의 예에서 사용하는 방법을 혼동합니다. – cyley

+2

두 번째 예를 삭제하고 하나의 문제 만 고집하는 것이 좋습니다. 일단 당신이 그것을위한 해결책을 가지고 있다면, 당신은 스스로 두 번째 문제를 해결할 수 있어야합니다. – Tas

답변

0

: 여기

#ifndef LOGIN_H 
#define LOGIN_H 

#include <QDialog> 

namespace Ui { 
class Login; 
} 

class Login : public QDialog 
{ 
    Q_OBJECT 

public: 
    explicit Login(QWidget *parent = 0); 
    ~Login(); 
    bool isSa; 

    signals: 
    void loggedIn(); 
    void loginCancelled(); 

    private slots: 
    void on_buttonBox_accepted(); 

    void on_buttonBox_rejected(); 

    private: 
    Ui::Login *ui; 
    }; 

#endif // LOGIN_H 

그리고 내가 열 (Customer을) 숨길 필요 내 다른 파일, OtpWindow.cpp입니다 슬롯/신호 예제, 당신은 o 동일한 매개 변수를 갖는 두 객체를 연결합니다. 당신은 같은 것입니다 귀하의 로그인 방법에

signals: 
void loginStatusChanged(bool isLoggedIn); 

:

bool status = checkLogin(); 
emit loginStatusChanged(status); 

을 그리고 당신은 전용 슬롯이 있어야합니다의 당신이 있다고 가정 해 봅시다

: 그래서 내가 조금 당신의 예를 수정할 수 있습니다 SafeOTPWindow에서 다음과 같이하면됩니다 :

void SafeOTPWindow::UpdateTableAfterLogin(bool isLoggedIn) 
{ 
    ui->tblLog->setColumnHidden(1,isLoggedIn); 
} 

그리고 평소와 같이 연결하십시오 :

connect(&login, SIGNAL(loginStatusChanged()), &w, SLOT(UpdateTableAfterLogin(bool)) );