【问题标题】:wxWidgets - modeless wxDialogwxWidgets - 无模式的 wxDialog
【发布时间】:2012-12-07 07:56:37
【问题描述】:

我正在创建自己的 wxDialog 子类,它在用作无模式对话框时效果很好,如下所示:

AddDialog newAddDialog = new AddDialog(this, wxID_ANY, _T("Dialog Title"), wxDefaultPosition, wxDefaultSize, 0);
if (newAddDialog.ShowModal() == wxID_OK)
{
//do something
}

当使用 ShowModal() 时,程序的流程会停止,直到按下 OK 或 Cancel。我需要显示对话框,但不能停止 GUI 的流程,所以我尝试了这个:

AddDialog newAddDialog = new AddDialog(this, wxID_ANY, _T("Dialog Title"), wxDefaultPosition, wxDefaultSize, 0);
if (newAddDialog.Showl() == wxID_OK)
{
//do something
}

使用 Show() 时,对话框会短暂显示然后消失。我认为这可能是范围问题,所以我使用了 newAddDialog 的指针。然后,出现对话框,当我单击确定或取消时,对话框关闭,但即使单击确定,if 语句代码也不会执行。

有谁知道如何进行?谢谢。


进一步说明:

我的 Dialog 子类中有虚拟 void 函数,我在另一个类中覆盖了它。当我覆盖时,我似乎无法让事件工作,但是,如果我在实际的 Dialog 子类中有一个 void,我会收到事件调用。这似乎是一个过度的问题,但我不知道问题会是什么。这不是我在 OnInit() 调用中调用的主 GUI - 这可能是个问题吗?

【问题讨论】:

    标签: c++ user-interface pointers dialog wxwidgets


    【解决方案1】:

    ShowModal 阻止程序执行并返回结果(如 wxID_OK)。另一方面,Show 只显示对话框并立即返回,因此您无法从其返回值检查结果(用户按下按钮的内容)。相反,您必须通过从对话框中发送事件或类似的东西来传达该对话框的结果。

    【讨论】:

    • 我已经通过向 wxID_OK 按钮添加一个事件来完成它。但是,无论如何都不会调用事件函数。
    • 在我的主帖中添加了进一步的说明。
    【解决方案2】:
    AddDialog newAddDialog = new AddDialog(...
    

    这可以编译吗?真的吗?

    'new' 操作符返回一个指向 void 的指针,所以你发布的代码看起来确实很奇怪。

    通常的做法是:

    AddDialog * newAddDialog = (AddDialog *) new AddDialog( ...
    

    或者

    AddDialog newAddDialog( ...  
    

    【讨论】:

      猜你喜欢
      • 2014-05-19
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多