当我运行以下功能时,对话框将显示所有内容。问题在于按钮无法连接。单击确定和取消不响应鼠标单击。

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(取消)。

10-04 15:04