Page 1 of 1
wxauinotebook изменение страницы
Posted: Sat Aug 22, 2020 8:36 pm
by CatUser13
Здравствуйте,
Подскажите пожалуйста, как можно достать добавленный объект из wxauinotebook, чтобы совершить над ним какие-либо действия?
Например:
Code: Select all
wxAuiNotebook* nb = new wxAuiNotebook(this, ID_AUINotebook);
wxGrid* mygrid = new wxGrid(nb, wxID_ANY);
//настраиваю таблицу
nb->AddPage(mygrid, wxT("Page");
И вот теперь, как можно обратиться к mygrid через nb, чтобы, например, добавить новую строчку?
Пишу на Ubuntu 19
wxWidgets: 3.0.4
Re: wxauinotebook изменение страницы
Posted: Sun Aug 23, 2020 12:17 am
by ONEEYEMAN
Доброго времени суток,
А где?
Интересует в каком обработчике хотите это сделать?
Спасибо.
Re: wxauinotebook изменение страницы
Posted: Sun Aug 23, 2020 7:19 am
by Kvaz1r
Если планируете использовать грид и дальше, то проще всего сделать его членом класса (как собственно и wxauinotebook).
Но вообще есть функция
GetPage/1, которая вернет указатель на страницу, кастанете его к указателю на грид и все должно получится.
Re: wxauinotebook изменение страницы
Posted: Sun Aug 23, 2020 10:11 am
by CatUser13
ONEEYEMAN,
Есть главная функция в которой инициализируется объект nb, чтобы обрабатывать события, там же использую Connect(). По нажатию кнопки в функции создаю объект wxGrid, заполняю его, после чего добавляю его в nb. Чтобы обрабатывать событии кнопок Добавить, Удалить и тд, (изменение таблицы) также использую Connect(). По идеи, я хочу получить доступ к таблице и ее как либо изменить.
Re: wxauinotebook изменение страницы
Posted: Sun Aug 23, 2020 2:57 pm
by CatUser13
Kvaz1r
Можешь пожалуйста показать пример? А то я чет не соображаю как правильно это сделать
Re: wxauinotebook изменение страницы
Posted: Sun Aug 23, 2020 4:37 pm
by ONEEYEMAN
Доброго времени суток,
Code: Select all
class MyWindow
{
public:
MyWindow();
wxAuiNotebook *GetNotebook() { return book; }
wxGrid *GetGrid() { return mygrid; }
private:
wxAuiNotebook *book;
wxGrid *mygrid;
};
MyWindow::MyWindow()
{
book = new wxAuiNotebook(this, ID_AUINotebook);
mygrid = new wxGrid(nb, wxID_ANY);
//настраиваю таблицу
book->AddPage(mygrid, wxT("Page");
}
Спасибо.
Re: wxauinotebook изменение страницы
Posted: Sun Aug 23, 2020 5:45 pm
by Kvaz1r
Пример:
Code: Select all
#include <wx/wx.h>
#include <wx/aui/auibook.h>
#include <wx/grid.h>
class MyFrame : public wxFrame
{
public:
MyFrame() : wxFrame(NULL, wxID_ANY, "Test", wxDefaultPosition, wxSize(800, 600))
{
wxBoxSizer* topSizer;
topSizer = new wxBoxSizer(wxVERTICAL);
m_auinotebook = new wxAuiNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_NB_DEFAULT_STYLE);
topSizer->Add(m_auinotebook, 1, wxEXPAND | wxALL, 5);
m_grid = new wxGrid(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0);
m_grid->CreateGrid(0, 1);
m_grid->SetColLabelValue(0, "Значение");
m_auinotebook->AddPage(m_grid, "Грид");
wxBoxSizer* bSizer1 = new wxBoxSizer(wxHORIZONTAL);
m_Hint = new wxStaticText(this, wxID_ANY, wxT("Введите значение:"), wxDefaultPosition, wxDefaultSize, 0);
bSizer1->Add(m_Hint, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
m_Value = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
bSizer1->Add(m_Value, 0, wxALL | wxEXPAND, 5);
bSizer1->Add(0, 0, 1, wxEXPAND, 5);
m_Add = new wxButton(this, wxID_ANY, wxT("Добавить"), wxDefaultPosition, wxDefaultSize, 0);
bSizer1->Add(m_Add, 0, wxALL, 5);
topSizer->Add(bSizer1, 0, wxEXPAND, 5);
this->SetSizer(topSizer);
this->Layout();
this->Centre(wxBOTH);
m_Add->Bind(wxEVT_BUTTON, [&](wxCommandEvent&)
{
auto value = m_Value->GetValue();
if (!value.empty())
{
m_grid->AppendRows();
m_grid->SetCellValue(m_grid->GetNumberRows() - 1, 0, value);
this->Layout();
}
});
}
protected:
wxAuiNotebook* m_auinotebook;
wxGrid* m_grid;
wxStaticText* m_Hint;
wxTextCtrl* m_Value;
wxButton* m_Add;
};
class MyApp : public wxApp
{
public:
bool OnInit()
{
(new MyFrame())->Show();
return true;
}
}; wxIMPLEMENT_APP(MyApp);
С GetPage я ошибся, не заметил, что это константный метод.