2014-11-20 6 views
1

Когда я запускаю следующую функцию, диалоговое окно показывает все на своем месте. Проблема в том, что кнопки не будут подключаться. OK и Отмена не реагируют на щелчки мыши.Кнопки QDialogButtonBox не отвечают

void MainWindow::initializeBOX(){ 

     QDialog dlg; 
     QVBoxLayout la(&dlg); 
     QLineEdit ed; 
     la.addWidget(&ed); 


     //QDialogButtonBox bb(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); 
     //btnbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); 
     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |  QDialogButtonBox::Cancel); 

     connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); 
     connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); 

     la.addWidget(buttonBox); 
     dlg.setLayout(&la); 


     if(dlg.exec() == QDialog::Accepted) 
     { 
      mTabWidget->setTabText(0, ed.text()); 
     } 

     } 

Во время выполнения ошибка в CMD показывает: Нет таких слотов, как принять() и отвергнуть().

+0

У вас есть 'accept()' и 'reject()' слоты в вашем 'MainWindow'? – Nejat

+0

нет, это то, что я пытаюсь сделать. Я добавил Void accept(), но он не работает. Я новичок в Qt, не могли бы вы показать мне, как добавить SLOT спасибо @Nejat – AAFF

ответ

2

Вы указываете неправильный приемник в соединении. Это диалоговое окно, в котором есть слоты и reject(), а не главное окно (то есть this).

Таким образом, вместо этого, вам просто нужно:

connect(buttonBox, SIGNAL(accepted()), &dlg, SLOT(accept())); 
connect(buttonBox, SIGNAL(rejected()), &dlg, SLOT(reject())); 

И теперь при нажатии кнопки, диалог закроется, и exec() будет возвращать либо QDialog::Accepted для ОК, или QDialog::Rejected для Отмена.

+0

СПАСИБО ВАМ ТАК БОЛЬШЕ @ekhumoro IT отлично работает сейчас. – AAFF