Qt,QDialog按钮不是Respondig

Qt, QDialog buttons not Respondig

本文关键字:Respondig 按钮 QDialog Qt      更新时间:2023-10-16

对话框打开,有两个按钮,"确定"和"取消"。所有按钮都不会响应用户单击。我必须按右上角的 X 才能取消对话框。

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == mTabWidget && event->type() == QEvent::MouseButtonDblClick) 
    {
        // query and set tab(s) names
        QTabWidget *tab = qobject_cast<QTabWidget *>(obj);
        if(tab)
        {
            QDialog dlg;
            QVBoxLayout la(&dlg);
            QLineEdit ed;
            la.addWidget(&ed);
            QDialogButtonBox bb(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
            la.addWidget(&bb);
            dlg.setLayout(&la);
            if(dlg.exec() == QDialog::Accepted)
            {
                tab->setTabText(0, ed.text());
                return true;
            }
        }
    }
    // Standard event processing
    return QObject::eventFilter(obj, event);
}

我是否缺少任何connect()线路或信号?我试图阅读Qt文档,但据我所知,调用QDialogButtonBox::OK被处理为已接受。

更新:

新建对话框功能

好的,我已经创建了一个处理对话框的新函数,我从事件函数调用它。 它仍然没有响应,现在在终端上,我看到一个错误,说:没有这样的插槽 MainWindow::accept() 和另一个用于拒绝。我知道我在 .h 文件中没有这两个插槽。我试图找到如何构建插槽,但我做不到,任何帮助都会很棒。谢谢

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());
        }
       }
与其

从事件文件管理器启动对话框,不如通过在代码中重载该虚拟函数来捕获 QWidget::mouseDoubleClickEvent。只要它已经是一个回调,您就可以立即从那里做更多的事情,包括对话框。或者可以将信号发送到执行对话框的插槽(更干净一点)。我会从mouseDoubleClickEvent事件处理程序发出信号,并使父QWidget::mouseDoubleClickEvent使用事件以避免可能的复杂性,尤其是在将代码移植到其他平台时。

事件

筛选器用于非标准事件处理。在您的案例中,没有什么非标准的。