代码之家  ›  专栏  ›  技术社区  ›  teukkam

如何从QDialog传递数据?

  •  7
  • teukkam  · 技术社区  · 14 年前

    在Qt中,当您需要传递比布尔或整数返回码更复杂的数据时,将数据从QDialog子类传递到启动对话框的组件的最优雅的方法是什么?

    我在想从卫星发射一个自定义信号 accept() 但是还有别的吗?

    2 回复  |  直到 14 年前
        1
  •  13
  •   tibur    14 年前

    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();
    }
    
        2
  •  5
  •   Caleb Huitt - cjhuitt    14 年前

    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.
    }