gpt4 book ai didi

c++ - 我如何处理 wxEVT_GRID_COL_SORT 事件来对网格进行排序?

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:13 25 4
gpt4 key购买 nike

我正在尝试对 wxGrid 进行排序。现在,the documentation告诉我它不支持排序,但它确实会生成一个事件。该文档告诉我该事件称为 wxEVT_GRID_COL_SORT。很公平!

现在的问题是我根本不知道如何让事件开始。我的框架有一个事件表,看起来像这样:

BEGIN_EVENT_TABLE(MainWindow, wxFrame)
EVT_BUTTON(XRCID("toevoegknop"), MainWindow::openAddWindow)
// A few other events that work
END_EVENT_TABLE()

那里列出的事件已经工作得很好。在我的 MainWindow 类中,我声明了一个函数:

void sortColumn(wxGridEvent& event);

现在,我想添加上述 wxEVT_GRID_COL_SORT 事件。从我的角度来看,文档对于我应该做什么并不是很清楚,所以我只是尝试通过将以下行添加到事件表来添加事件。

wxEVT_GRID_COL_SORT(MainWindow::sortColumn)

出现语法错误,因此不正确。我注意到其他事件只是从 EVT 开始,所以我尝试删除 wx,但我仍然不走运。

通过广泛搜索互联网,我找到了一个 pastebin post它通过将以下行添加到框架的构造函数来处理事件(在我的例子中是 MainWindow)

Grid->Connect(wxEVT_GRID_COL_SORT,(wxObjectEventFunction)&Frame::OnGridColSort);

我这样改编的(MainWindow 的几乎整个构造函数)

MainWindow::MainWindow(const wxString& title, const wxPoint& pos, const wxSize& size, Collection* library, MovieDB* database)
: wxFrame(), library_(library), database_(database) {
wxXmlResource::Get()->LoadFrame(this, NULL, _T("hoofdvenster"));

SetSize(size);
grid_ = (wxGrid *)FindWindowById(XRCID("filmtabel"));
// Irrelevant code removed, setting up the grid labels etc.

grid_->Connect(wxEVT_GRID_COL_SORT,(wxObjectEventFunction)&MainWindow::sortColumn);
}

引发错误:

‘wxEVT_GRID_COL_SORT’ was not declared in this scope

所以现在我不知道还能尝试什么。请记住,我几天前才开始弄乱 wxWidgets,所以对任何 wxWidgets 用户来说微不足道的事情可能不适合我。

提前致谢!

最佳答案

看来您正在使用未实现 wxEVT_GRID_COL_SORTwx 2.8.12。它是在 wx 2.9 中添加的,因此您必须获得最新的开发版本 (2.9.4) 才能使用它。

但是,在 wx 2.8 中,您可以处理 wxEVT_GRID_LABEL_LEFT_CLICK 并相应地调度事件以模拟事件。

要么将事件添加到事件映射中,

EVT_GRID_CMD_LABEL_LEFT_CLICK(ID_GRID,Frame::OnGridLabelLeftClick)

或者在你的构造函数中连接它:

grid->Connect(wxEVT_GRID_LABEL_LEFT_CLICK,
(wxObjectEventFunction)&Frame::OnGridLabelLeftClick);
void Frame::OnGridColSort(wxGridEvent& event) {}
void Frame::OnGridRowSort(wxGridEvent& event) {}

void Frame::OnGridLabelLeftClick(wxGridEvent& event) {
// GetCol and GetRow will return the index of the col/row label clicked
event.Skip(); // the next handler will select col/row/everything, based
// on the label clicked; remove to prevent selection
if( event.GetCol() >= 0 )
OnGridColSort(event);
else if( event.GetRow() >= 0 )
OnGridRowSort(event);
else
; // if both are -1, the upper left corner was clicked (select all)
}

这与 EVT_GRID_COL_SORT 的行为类似。

关于c++ - 我如何处理 wxEVT_GRID_COL_SORT 事件来对网格进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14048043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com