当按下wxYES_NO中的按钮时如何执行功能?

问题描述 投票:1回答:1

也许我的标题不清楚,所以在这里我将给出更精确的解释:

我只是学习WxWidgets,现在我试图制作两个文件:main.cpp和Quit.h。 Main.cpp将具有应用程序的核心,而Quit.h将具有退出对话框的类:您是否真的要退出此应用程序(是/否)。

现在这是我的Quit.h文件(没有include部分:

class Quit : public wxFrame
{
public:
    Quit(const wxString& tekst);
};
Quit::Quit(const wxString& tekst)
{
    wxMessageDialog* dial = new wxMessageDialog(NULL, _("Do you really want to quit?"), _("Quit"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION);
    dial->ShowModal();
}

而我被困在这里。我尝试使用wxDECLARE_EVENT_TABLE(),但我不知道哪个事件代表此情况:“按下按钮(在wxYES_NO按钮系统中)”。我不能说:按下wxYES_NO,因为这是两个按钮(是和否)。

那么,当按YES按钮时如何执行功能?

谢谢!

P.S。我真的很抱歉这个不清楚的问题,但希望您能理解。请注意,我只是一个初学者,所以请不要在答案中使用太多“技术性”的词语。我阅读了文档,但是它使用了许多技术表达和解释。另外,我读了this书。

P.P.S。您是否注意到SE上现在有很多问题,而即将推出COVID-19?

EDIT:在打开程序时,出现了另一个错误。最小代码:

Quit.h

class Quit : public wxFrame
{
public:
    Quit(const wxWindow* parent, const wxString& text);
};

Quit::Quit(const wxWindow* parent, const wxString& text)
{
    int dialog_return_value = wxNO;
    wxMessageDialog* dial = new wxMessageDialog(NULL, text, _("Exit"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION);
    dialog_return_value = dial->ShowModal();

    switch (dialog_return_value)
    {
    case wxYES:
        Close(true);
        break;
    case wxNO:
        Close(false);
        break;
    default:
        Close(false);
    };
}

然后我在main.cpp中有这行:

void MyFrame::CloseWindow(wxCommandEvent& event)
{
    Quit* quit = new Quit(this, _("Do you really want to close the App?"));
}

然后它不起作用。我找不到解决方案,因此,如果您有时间,请提供帮助。

再次感谢您!

P.S。答案是出于其目的,而不是为了结束。

c++ events modal-dialog wxwidgets
1个回答
2
投票

我建议使用wxEvtHandler::Bind<>()处的wxWidgets文档中详细介绍的https://docs.wxwidgets.org/3.0/overview_events.html函数。 Bind()函数允许动态绑定事件,与设置将事件链接到对象的表相比,语法是一行代码。

另外请参见此wxWidgets用户论坛线程,该线程具有调用成员和非成员方法https://forums.wxwidgets.org/viewtopic.php?t=39817的详细说明。>

wxYES_NO是一个样式标志,它告诉wxWidgets框架您希望对话框中的是和否按钮。检查ShowModal()的返回值是否等于定义为wxYESwxNO的内置宏之一。

请参阅此处的宏定义https://docs.wxwidgets.org/trunk/defs_8h.html

而且您应该阅读wxDiaglog。从这里开始https://docs.wxwidgets.org/trunk/classwx_dialog.html

是否要将值返回给Quit::Quit()的调用者?构造函数不返回值,您可以将成员变量设置为该值,但请记住,如果对象被破坏,那么您的成员变量也将消失。您没有提供足够的信息来知道在Quit()时需要进行哪些清理工作,因此我将为您提供检查返回值的代码,仅在案例正文中填写您需要的内容。

这里是检查返回值的方式:

class Quit : public wxFrame
{
public:
    Quit(const wxString& tekst);
};
Quit::Quit(const wxString& tekst)
{
    int dialog_return_value = wxNO; // initialize to a sane default value
    wxMessageDialog* dial = new wxMessageDialog(NULL, _("Do you really want to quit?"), _("Quit"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION);
    dialog_return_value = dial->ShowModal();
    // You do not have cancel button so only check wxYES and wxNO
    switch( dialog_return_value) // Use switch, scales to more buttons later
    {
        case wxYES :
        /* do something */
        break;
        case wxNO :
        /* do something */
        break;
        default : /* ignore or handle error */ ;
    };
}

您正在执行一项技术任务,可以预期会涉及到学习“技术”字眼。

© www.soinside.com 2019 - 2024. All rights reserved.