c++ - wxFrame 不处理 Tab 按钮

标签 c++ wxwidgets

我有一个带有 3 个按钮的简单 wxFrame。在我按下 Tab 之后什么也没有发生。在论坛上我发现wxFrame应该可以正常处理Tab按钮事件,并在控件之间切换焦点。我尝试了 wxTAB_TRAVERSAL 和没有它,但看起来没有结果。

这是我的代码。 wxWidgets 3.0.2。请帮忙。

class TabWnd
    : public wxFrame
{
public:
    TabWnd()
        : wxFrame(nullptr,
                  wxID_ANY,
                  wxEmptyString,
                  wxDefaultPosition,
                  wxDefaultSize,
                  wxDEFAULT_FRAME_STYLE | wxTAB_TRAVERSAL)
    {
        wxBoxSizer* sz = new wxBoxSizer(wxVERTICAL);

        wxButton* b1 = new wxButton(this, wxID_ANY, wxT("First"));
        sz->Add(b1, 0, wxALL, 5);

        wxButton* b2 = new wxButton(this, wxID_ANY, wxT("Second"));
        sz->Add(b2, 0, wxALL, 5);

        wxButton* b3 = new wxButton(this, wxID_ANY, wxT("Third"));
        sz->Add(b3, 0, wxALL, 5);

        SetSizer(sz);
        Layout();
        Centre(wxBOTH);
    }
};

class WxguiApp
    : public wxApp
{
public:
    bool OnInit() override
    {
        TabWnd* mainWnd = new TabWnd();
        mainWnd->Show();
        SetTopWindow(mainWnd);

        return true;
    }
};

IMPLEMENT_APP(WxguiApp);

最佳答案

尝试在框架和按钮之间添加一个面板,如下所示:

wxBoxSizer* sz = new wxBoxSizer(wxVERTICAL);

wxPanel* pnl = new wxPanel( this, wxID_ANY );
wxBoxSizer* sz2 = new wxBoxSizer( wxVERTICAL );

wxButton* b1 = new wxButton(pnl, wxID_ANY, wxT("First"));
sz2->Add(b1, 0, wxALL, 5);

wxButton* b2 = new wxButton(pnl, wxID_ANY, wxT("Second"));
sz2->Add(b2, 0, wxALL, 5);

wxButton* b3 = new wxButton(pnl, wxID_ANY, wxT("Third"));
sz2->Add(b3, 0, wxALL, 5);

pnl->SetSizer( sz2 );
sz->Add( pnl, 1, wxEXPAND );

SetSizer(sz);
Layout();
Centre(wxBOTH);

关于c++ - wxFrame 不处理 Tab 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40452591/

相关文章:

c++ - 错误 : ‘virtual bool wxTopLevelWindowGTK::Show(bool)’ is inaccessible

python - 在程序运行开始时填充 wxChoice | Python

wxwidgets - 为什么 wxWidgets 需要其他 GUI 库,例如 GTK 或 Motif?

仅使用点云作为查询点的 D 维 k 最近邻搜索的 C++ 数据结构

c++ - 将库链接在一起时的 boost::signals2 undefined-reference

c# - 将 C# 3D 数组作为 1D 字节数组传递给 C++ 库

c++ - 由于添加了 1 个 header 而导致大量错误

linux - 检测到程序和库构建版本不匹配

c++ - 重载的 Circle() 在 C++ Circle 类中不明确

c++ - 函数模板重载(不同数据类型验证函数作为参数)