在Qt中,当你需要传递比布尔值或整数返回代码更复杂的内容时,在QDialog子类和启动对话框的组件之间传递数据的最优雅方式是什么?我认为可以从accept()槽中发出自定义信号,但还有其他方法吗?请注意保留HTML标记。
QDialog有自己的消息循环,由于它会停止您的应用程序工作流程,我通常使用以下方案:
MyQDialog dialog(this);
dialog.setFoo("blah blah blah");
if(dialog.exec() == QDialog::Accepted){
// You can access everything you need in dialog object
QString bar = dialog.getFoo();
}
accepted
信号,并在该槽中获取所需信息。缺点是你通常需要依赖存储指向对话框的指针,或使用sender()
技巧来确定触发槽的对象。void Foo::showDialog()
{
if ( !m_dlg )
{
m_dlg = new Dialog( this );
connect( m_dlg, SIGNAL( accepted() ), SLOT( onDialogAccepted() ) );
}
m_dlg->Setup( m_bar, m_bat, m_baz );
m_dlg->show();
}
void Foo::onDialogAccepted()
{
m_bar = m_dlg->bar();
m_bat = m_dlg->bat();
m_baz = m_dlg->baz();
// optionally destroy m_dlg here.
}
accept()
插槽中发出自定义信号。connect
信号似乎是合适的。 - tibur