【问题标题】:QDialogButtonBox buttons not respondingQDialogBu​​ttonBox 按钮没有响应
【发布时间】:2015-01-17 20:19:00
【问题描述】:

当我运行以下函数时,对话框会显示所有内容。问题是按钮无法连接。 OK 和 Cancel 不响应鼠标点击。

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()这样的槽。

【问题讨论】:

  • 您的MainWindow 中有accept()reject() 插槽吗?
  • 不,这就是我想要做的。我添加了 Void accept(),但它不起作用。我是 Qt 新手,你能告诉我如何添加 SLOT 谢谢@Nejat

标签: c++ qt signals-slots qt-designer qdialog


【解决方案1】:

您在连接中指定了错误的接收器。这是具有accept()reject() 插槽的对话框,而不是主窗口(即this)。

因此,您只需要:

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

现在,当您单击按钮时,对话框将关闭,exec() 将返回QDialog::Accepted 表示确定,或返回QDialog::Rejected 表示取消。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多