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

GUI不显示所有组件(C++)

  •  1
  • Calax  · 技术社区  · 10 月前

    我正在学习如何用C++创建简单的GUI。(我在这里使用的教程系列视频( https://www.youtube.com/watch?v=_2FMt_0wVMM&list=PLFk1_lkqT8MbVOcwEppCPfjGOGhLvcf9G&index=4 ).

    为此,我使用Visual Studio 2022

    这是主机的代码。

    #include "MainFrame.h"
    #include <wx/wx.h>
    
    MainFrame::MainFrame(const wxString& title) : wxFrame(nullptr, wxID_ANY, title) {
        wxPanel* panel = new wxPanel(this);
    
        wxButton* button = new wxButton(this, wxID_ANY, "Button", wxPoint(150, 50), wxSize(100, 35));
    
        wxCheckBox* checkBox = new wxCheckBox(panel, wxID_ANY, "CheckBox", wxPoint(550, 55));
    
        wxStaticText* staticText = new wxStaticText(panel, wxID_ANY, "Static Text - NOT editable", wxPoint(120, 150));
    }
    

    代码运行100%正常,但是当我在调试时弹出GUI时,GUI只显示按钮,而不显示文本或复选框。 No checkbox or static text to be seen.

    请帮帮我,我正在为一个学校项目学习这个,我真的很想继续学习这一切。

    2 回复  |  直到 10 月前
        1
  •  2
  •   Ted Lyngmo    10 月前

    您需要将面板放大,以便可以看到您放置在其中的控件。您当前正在使用 mxDefaultSize ,它很小,如图片左上角所示。

    您使用的构造函数是:

    wxPanel::wxPanel(
        wxWindow* parent,
        wxWindowID id = wxID_ANY,
        const wxPoint& pos = wxDefaultPosition,
        const wxSize& size = wxDefaultSize,       // <- set this to something bigger
        long style = wxTAB_TRAVERSAL,
        const wxString& name = wxPanelNameStr 
    )
    

    例子:

    wxPanel* panel = new wxPanel(
        this,
        wxID_ANY,
        wxDefaultPosition,
        {1000, 1000}
    );
    
        2
  •  1
  •   Calax    10 月前

    很容易修复,我为此切换了wxPanel构造函数:

    wxPanel* panel = new wxPanel(
        this,
        wxID_ANY,
        wxDefaultPosition,
        {1000, 1000}
    );
    

    并将wxButton上的指针从“this”更改为“panel”,现在一切都按预期显示。以下是新代码:

    #include "MainFrame.h"
    #include <wx/wx.h>
    
    
    MainFrame::MainFrame(const wxString& title) : wxFrame(nullptr, wxID_ANY, title) {
        wxPanel* panel = new wxPanel(
            this,
            wxID_ANY,
            wxDefaultPosition,
            { 2000, 2000 }
        );
    
        wxButton* button = new wxButton(panel, wxID_ANY, "Button", wxPoint(150, 50), wxSize(120, 50));
    
        wxCheckBox* checkBox = new wxCheckBox(panel, wxID_ANY, "CheckBox", wxPoint(550, 55));
    
        wxStaticText* staticText = new wxStaticText(panel, wxID_ANY, "Static Text - NOT editable", wxPoint(120, 150));
    }
    

    谢谢大家的帮助,非常感谢:)