当我运行以下功能时,对话框将显示所有内容。问题在于按钮无法连接。单击确定和取消不响应鼠标单击。
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中的错误显示:没有诸如accept()和reject()之类的插槽。
最佳答案
您在连接中指定了错误的接收器。该对话框具有accept()
和reject()
插槽,而不是主窗口(即this
)。
因此,您只需要:
connect(buttonBox, SIGNAL(accepted()), &dlg, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), &dlg, SLOT(reject()));
现在,当您单击按钮时,对话框将关闭,并且
exec()
将返回QDialog::Accepted
(确定)或QDialog::Rejected
(取消)。