C+中的面板类模块初始化+;GUIapp 我是C++和WxWIDGET的新手,使用WXFrimeBu建器帮助我创建GUI。
我喜欢将类似的功能放在一个模块中,这意味着我的应用程序有多个模块。 其中一个模块用于GUI(它现在包含主框架的代码(只有一个菜单和任务栏)和 一个面板(带有两个静态文本控件和一个按钮)。 按钮增加一个计数器,数值显示在面板上的一个静态文本中 如此之好。(编译无误) 我可以使面板显示/隐藏,但我似乎错过了使面板按钮工作的基本知识。 我尝试过的方法都与主模块的编码方式相似,但都不起作用 我了解它如何与同一文件中的GUI类元素一起工作。 但是,我喜欢将所有GUI代码保存在一个模块(GUIFrame.h/.cpp)中, 以及面板模块(MyPanel.h/.cpp)中的所有“功能”代码 只是因为我不确定我在哪里犯了错误,我在这篇文章中展示了所有代码。 如果太多的话,我会告诉你 希望有人能帮助我弥合我对这种工作方式的认识差距 问候,, 路德 ==GUIFrame.hC+中的面板类模块初始化+;GUIapp 我是C++和WxWIDGET的新手,使用WXFrimeBu建器帮助我创建GUI。,c++,wxwidgets,C++,Wxwidgets,我喜欢将类似的功能放在一个模块中,这意味着我的应用程序有多个模块。 其中一个模块用于GUI(它现在包含主框架的代码(只有一个菜单和任务栏)和 一个面板(带有两个静态文本控件和一个按钮)。 按钮增加一个计数器,数值显示在面板上的一个静态文本中 如此之好。(编译无误) 我可以使面板显示/隐藏,但我似乎错过了使面板按钮工作的基本知识。 我尝试过的方法都与主模块的编码方式相似,但都不起作用 我了解它如何与同一文件中的GUI类元素一起工作。 但是,我喜欢将所有GUI代码保存在一个模块(GUIFrame.h
#pragma once
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/string.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/menu.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/statusbr.h>
#include <wx/frame.h>
#include <wx/stattext.h>
#include <wx/button.h>
#include <wx/sizer.h>
#include <wx/panel.h>
///////////////////////////////////////////////////////////////////////////
#define idMenuQuit 1000
///////////////////////////////////////////////////////////////////////////////
/// Class GUIFrame
///////////////////////////////////////////////////////////////////////////////
class GUIFrame : public wxFrame
{
private:
protected:
wxMenuBar* mbar;
wxMenu* mainMenu;
wxStatusBar* statusBar;
// Virtual event handlers, overide them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void m_menuItemPanelMainOnMenuSelection( wxCommandEvent& event ) { event.Skip(); }
virtual void OnQuit( wxCommandEvent& event ) { event.Skip(); }
public:
GUIFrame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("Test application"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,500 ), long style = wxDEFAULT_FRAME_STYLE );
~GUIFrame();
};
///////////////////////////////////////////////////////////////////////////////
/// Class PanelMAIN
///////////////////////////////////////////////////////////////////////////////
class PanelMAIN : public wxPanel
{
private:
protected:
wxStaticText* m_staticText3;
// Virtual event handlers, overide them in your derived class
virtual void m_btn_Counter_OnButtonClick( wxCommandEvent& event ) { event.Skip(); }
public:
wxStaticText* m_staticTextPMain;
wxButton* m_buttonPMain;
PanelMAIN( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxPoint( 3,3 ), const wxSize& size = wxSize( 350,300 ), long style = wxBORDER_RAISED, const wxString& name = wxEmptyString );
~PanelMAIN();
};
==wxPanelMain.h
#ifndef WXPANELMAIN_H
#define WXPANELMAIN_H
#include "wxPanelApp.h"
#include "GUIFrame.h"
#include "MyPanel.h"
#include <iostream>
class wxPanelFrame: public GUIFrame
{
public:
wxPanelFrame(wxFrame *frame);
~wxPanelFrame();
wxPanel *m_wxpMain = new PanelMAIN(this, wxID_ANY);
private:
virtual void OnClose(wxCloseEvent& event);
virtual void OnQuit(wxCommandEvent& event);
void m_menuItemPanelMainOnMenuSelection( wxCommandEvent& event );
};
#endif // WXPANELMAIN_H
==MyPanel.h
#ifndef MYPANEL_H
#define MYPANEL_H
#include "GUIFrame.h"
#include <iostream>
class MyPanel : public PanelMAIN
{
public:
MyPanel(wxPanel *panel);
virtual ~MyPanel();
int i{0};
protected:
private:
void m_btn_Counter_OnButtonClick( wxCommandEvent& event );
};
#endif // MYPANEL_H
#如果取消我的面板#
#定义MYPANEL_H
#包括“GUIFrame.h”
#包括
类MyPanel:PublicPanelMain
{
公众:
MyPanel(wxPanel*面板);
虚拟~MyPanel();
int i{0};
受保护的:
私人:
无效m_btn_计数器按钮单击(wxCommandEvent&event);
};
#endif//MYPANEL\u H
==MyPanel.cpp
#include "MyPanel.h"
MyPanel::MyPanel(wxPanel *panel) : PanelMAIN(panel)
{
std::cout << "MyPanel::MyPanel /*CONSTRUCTOR*/\n";
}
MyPanel::~MyPanel()
{
std::cout << "MyPanel::~MyPanel /*DESTRUCTOR*/\n";
}
void MyPanel::m_btn_Counter_OnButtonClick( wxCommandEvent& event )
{
wxString wxs_Count{};
i++;
wxs_Count << i;
m_staticText3->SetLabelText(wxs_Count);
}
#包括“MyPanel.h”
MyPanel::MyPanel(wxPanel*panel):PanelMAIN(panel)
{
std::cout在派生类MyPanel中定义事件处理程序,但从未创建它的实例
wxPanel *m_wxpMain = new PanelMAIN(this, wxID_ANY);
仅在基类的对象上创建
你应该把这个改成
MyPanel *m_wxpMain = new MyPanel(this);
MyPanel的构造函数也有问题。父项必须是wxWindow
而不是wxPanel
。因此声明应该类似于
MyPanel(wxWindow *panel);
MyPanel::MyPanel(wxWindow *panel) : PanelMAIN(panel)
{
std::cout << "MyPanel::MyPanel /*CONSTRUCTOR*/\n";
}
身体应该看起来像
MyPanel(wxWindow *panel);
MyPanel::MyPanel(wxWindow *panel) : PanelMAIN(panel)
{
std::cout << "MyPanel::MyPanel /*CONSTRUCTOR*/\n";
}
MyPanel::MyPanel(wxWindow*panel):PanelMAIN(panel)
{
天哪,我离正确的代码如此之近,但又如此之远。我现在知道我的想法在哪里出现了错误。谢谢你的澄清。
MyPanel(wxWindow *panel);
MyPanel::MyPanel(wxWindow *panel) : PanelMAIN(panel)
{
std::cout << "MyPanel::MyPanel /*CONSTRUCTOR*/\n";
}