【问题标题】:wxPopupTransientWindow not showing content correctlywxPopupTransientWindow 未正确显示内容
【发布时间】:2021-06-19 07:59:45
【问题描述】:

我正在创建一个 C++ wxWidgets 计算器应用程序。我正在实现三角函数,为了节省空间,我将它们全部重新组合在一个按钮中。如果您右键单击该按钮,则会创建一个弹出窗口,其中包含所有功能的按钮。我正在为这项工作使用派生的 wxPopupTransientWindow 类,问题是按钮显示不正确。

这是我的代码:

expandMenu.h

#include "wx/wx.h"
#include "wx/popupwin.h"

struct expandMenuInfo
{
    const wxString& label;
    wxWindowID id;

    expandMenuInfo(const wxString& l, wxWindowID i)
        : label{l}
        , id{i}
    {}
};

class expandMenu : public wxPopupTransientWindow
{
    wxWindow* panel;
    wxBoxSizer* sizer;

public:
    expandMenu(wxWindow* parent, wxPoint pos, std::vector<expandMenuInfo> buttons);
    ~expandMenu();
};

expandMenu.cpp

#include "expandMenu.h"

// PANNELLO ESTENSIONE

expandMenu::expandMenu(wxWindow* parent, wxPoint pos, std::vector<expandMenuInfo> buttons)
    : wxPopupTransientWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS)
{
    this->SetPosition(pos);
    this->SetSize(50 * buttons.size(), 50);

    this->SetBackgroundColour(wxColour(90, 93, 121));

    panel = new wxWindow(this, wxID_ANY);
    sizer = new wxBoxSizer(wxHORIZONTAL);

    // costruisci struttura
    for (unsigned int i = 0; i < buttons.size(); i++)
    {
        wxButton* btn = new wxButton(this, buttons.at(i).id, buttons.at(i).label);
        sizer->Add(btn, 1, wxEXPAND);
    }
    panel->SetSizer(sizer);
}

expandMenu::~expandMenu()
{
}

这是我用于自定义 wxButton 以实际创建弹出窗口的代码(它是临时的):

void ikeButton::rightClick(wxMouseEvent& evt) // CREA PANNELLO ESTENSIONE
{
    if (flags & EXPANDABLE)
    {
        std::vector<expandMenuInfo> buttons;
        buttons.push_back(expandMenuInfo(L"sin", 3001));
        buttons.push_back(expandMenuInfo(L"cos", 3002));
        buttons.push_back(expandMenuInfo(L"tan", 3003));

        expandMenu* menu = new expandMenu(this, wxGetMousePosition(), buttons);
        menu->Popup();
    }
}

提前感谢您的帮助,因为我对这个框架很陌生。

【问题讨论】:

  • 为什么?你不能为此创建wxComboBox 吗?
  • 我希望正弦按钮在左键单击时执行其操作并在右键单击时打开菜单。菜单内的按钮需要放在一个网格中,当其中一个被选中时,我希望正弦按钮变成被按下的按钮。所有这些都可以通过单个 wxComboBox 实现吗?
  • 我正在考虑使用 wxComboBox 来选择合适的功能。请查看文档以获取控制屏幕截图和widgets 示例以了解控制行为。

标签: c++ popup wxwidgets


【解决方案1】:

要让按钮在弹出窗口中布局,在expandMenu的构造函数中,我认为您只需将panel-&gt;SetSizer(sizer);更改为

    SetSizerAndFit(sizer);
    Layout();

从 UI 的角度来看,我认为 split button 可能是实现您所描述的功能的更好方法。 wxWidgets 目前没有这样的控件,但this post 显示了两种不同的创建方式。

【讨论】:

    【解决方案2】:

    我认为问题在于您为按钮的父级(即弹出窗口)指定了 this。我认为您希望他们的父母成为面板

    【讨论】:

      猜你喜欢
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多