2015-01-24 8 views
1
I 작동 내 코드를 강화하려는

를 연결하지만 난 그렇게 실패하고 내 문제가 제대로 인수를 전달하는 방법이다, 내 말은 : 이것은 지금까지 노력하고 있습니다Qt는 문

void pracownik2::on_pushButton_4_clicked(){ 

this->setWindowTitle("EKRAN"); 
QWidget *centralWidget = new QWidget; 
     int licznik=1; 
     QString licz; 
     //QString kolumny = ui->lineEdit->text(); 
     //QString wiersze = ui->lineEdit_2->text(); 
     miejsca2 = ui->lineEdit_3->text().toInt(); 
     //QPushButton *button[wiersze.toInt()][kolumny.toInt()]; 
     QPushButton *button[3][6]; 

     QGridLayout *controlsLayout = new QGridLayout; 
     for(int i=0;i<3;i++) 
     { 
      for(int j=0;j<6;j++) 
      { 
        licz = QString::number(licznik); 
        licznik++; 
        button[i][j] = new QPushButton(licz); 
        button[i][j]->setCheckable(1); 
         if(tab[i][j]==1) 
          button[i][j]->setEnabled(false); 
        controlsLayout->addWidget(button[i][j], i, j); 
      } 
     } 

     QPushButton *okej = new QPushButton("Zatwierdź"); 
     QPushButton *anul = new QPushButton("Anuluj"); 

     controlsLayout->addWidget(okej, 3, 0); 
     controlsLayout->addWidget(anul, 3, 1); 

     controlsLayout->setHorizontalSpacing(0); 
     controlsLayout->setVerticalSpacing(0); 
     centralWidget->setLayout(controlsLayout); 

     setCentralWidget(centralWidget); 



     for(int i=0;i<3;i++) 
     { 
      for(int j=0;j<6;j++) 
      { 
        connect(button[i][j],SIGNAL(toggled(bool)),this,SLOT(tescik(bool))); 
      } 
     } 



     connect(anul,SIGNAL(clicked()),this,SLOT(close())); 

     connect(okej,SIGNAL(clicked()),this,SLOT(okay2()));} 

void pracownik2::tescik(bool t){ 
if (t) 
{ 
    miejsca++; 
} 
else 
{ 
    miejsca--; 
}} 

내가 'tescik을 원하는 내가 '와'현재 QPushButton을의 J '인덱스와 내가 어떻게 편집하는 내 연결 라인 아무 생각이 없다'기능도 내 배열의 값을 설정하는

void pracownik2::tescik(bool t, int i, int j){ 
if (t) 
{tab[i][j]=1; 
    miejsca++; 
} 
else 
{tab[i][j]=0; 
    miejsca--; 
}} 

나는 전달할 수 없습니다 '

connect(button[i][j],SIGNAL(toggled(bool)),this,SLOT(tescik(bool,int,int))); 

그것은 int, int가 무엇을 의미하는지 아직도 모르겠다. 나는 어떻게 작동하는지 잘 모른다. :)

+0

당신은 다른 서명을 신호와 슬롯을 연결할 수 있습니다. QPushButton을 확장하여 실제로 이런 식으로 이것을 원할 경우 자체 신호를 제공 할 수 있습니다. – doc

+1

질문을 다시 게시하지 마십시오. 이전 질문 만 수정하십시오. Dup http://stackoverflow.com/questions/28125466/qt-disabling-dynamic-buttons – doc

+0

@doc 사실 수 있습니다. 예를 들어 다음과 같이 할 수 있습니다 :'connect (sender, signalWithThreeArgs (bool, int, int)), reciever, SLOT (slotWIthOneArg (bool)))' –

답변

1

신호와 슬롯을 연결할 때 인자가 일치하지 않아서 문제가 발생한다. bool 값 하나만 쓰면 슬롯이 3 개 걸리는 경우) - 응용 프로그램 출력에서 ​​해당 메시지를 수신해야합니다. 솔루션 중 하나는 QObject 동적 속성을 사용하는 것입니다.

button[i][j] = new QPushButton(licz); 
button[i][j]->setProperty("i", i); 
button[i][j]->setProperty("j", j); 

을 그리고 그 후에 당신은 당신의 슬롯에 다시 작성할 수 있습니다 : 당신의 버튼을 만들 때 당신이 뭔가를 할 수

void pracownik2::tescik(bool t) { 
int i = QObject::sender()->property("i").toInt(); 
int j = QObject::sender()->property("j").toInt(); 
if (t) 
{tab[i][j]=1; 
    miejsca++; 
} 
else 
{tab[i][j]=0; 
    miejsca--; 
}}