对话框打开,有两个按钮,确定和取消。没有任何按钮响应用户点击。我必须按右上角的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());
}
}
答案 0 :(得分:0)
不是从事件文件管理器启动对话框,而是通过在代码中重载该虚函数来捕获QWidget::mouseDoubleClickEvent。只要它是一个回调,你就可以立即从那里做更多的事情,包括对话。或者可能将信号发送到执行对话的插槽(更清洁)。我会从mouseDoubleClickEvent事件处理程序执行信号并使父QWidget :: mouseDoubleClickEvent使用该事件以避免可能的复杂情况,尤其是在将代码移植到其他平台时。
事件过滤器用于非标准事件处理。你的情况没有任何不标准。