【问题标题】:wxGauge was nullptr out of constructorwxGauge 在构造函数中为 nullptr
【发布时间】:2021-06-30 13:16:55
【问题描述】:

首先对不起我的英语,它不是我的母语

我是 c++ 的 wxWidgets 的初学者,我开始开发一个带有进度条和一些后台进程的简单应用程序

不幸的是,当我调用 wx_MyGauge->SetValue(20) 时,出现异常“wx_MyGauge was nullptr”

这只发生在构造函数之外,如果我从构造函数调用该函数,则可以正常工作

我做错了什么?

//标题

#pragma once
#include "wx/wx.h"

class testGauge : public wxFrame
{
public:
    testGauge();
    ~testGauge();

    wxGauge* wx_MyGauge;
    wxPanel* pnl;

    void Importar(wxMouseEvent& event);
};

//cpp

#include "testGauge.h"
testGauge::testGauge() : wxFrame(nullptr, wxID_ANY, "blabla", wxDefaultPosition, wxSize(500, 400))
{
    pnl = new wxPanel(this, wxID_ANY, wxPoint(10, 10), wxSize(500, 400));

    wx_MyGauge= new wxGauge(pnl, 1001, 100, wxPoint(10,10), wxSize(100,20), wxGA_HORIZONTAL);
    wx_MyGauge->SetValue(10);// here OK

    wxButton* btn = new wxButton(pnl,wxID_ANY,"Teste",wxPoint(10,30),wxSize(50,30));
    btn->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(testGauge::Importar));
    

    this->Layout();
    this->Centre(wxBOTH);
}


void testGauge::Importar(wxMouseEvent& WXUNUSED(event))
{
    testGauge::wx_MyGauge->SetValue(20);// here Error 
}

testGauge::~testGauge()
{

}

在 Windows 10、Visual Studio 2019、wxWidgets 3.1.5 上工作

【问题讨论】:

  • 您可以尝试在连接、布局和中心之后的每一步之后设置仪表的值,看看哪一个可能正在删除它;或者如果是。您还可以在指针上设置手表。

标签: c++ wxwidgets


【解决方案1】:

您调用pnl 的方法Connect 并且不传递Importar 是哪个事件处理程序。因此,Connect 方法将鼠标事件加入到pnl 而不是testGuage

btn->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(testGauge::Importar));

必须

btn->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(testGauge::Importar), nullptr, this);

【讨论】:

  • 是的,就是这样,对我来说有点菜鸟,但这是有道理的,谢谢!
  • BindConnect 好,而且不易出错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2019-11-24
相关资源
最近更新 更多