如何处理wxEVT_GRID_COL_SORT事件来对网格进行排序?
How do I handle the wxEVT_GRID_COL_SORT event to sort a grid?
我正在尝试排序wxGrid。现在,文档告诉我它不支持排序,但它确实生成了一个事件。该文档告诉我该事件名为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文章,该文章通过向框架的构造函数(在我的例子中是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 '
所以现在我不知道我还能尝试什么。请记住,我几天前才开始摆弄wxWidgets,所以对于任何wxWidgets用户来说都是微不足道的事情可能不适合我。
提前感谢!
看来你正在使用的wx 2.8.12
不实现wxEVT_GRID_COL_SORT
。它是在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
的行为类似。
相关文章:
- Android NDK传感器向事件队列报告奇怪的间隔
- 从文本文件中读取时钟时间和事件时间并进行处理
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 处理闪烁窗口事件
- C++Builder中的OnClick事件签名存在问题
- 跟踪滚动条上的鼠标事件
- 什么是事件表 (wxWidgets)?
- 如何在 MFCaptureEngine 中获取"Camera removed"事件
- 给定顺序中的事件处理
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- 如何创建事件驱动的 SDL2 应用程序
- Windows 进程间同步类似事件?
- 使用对象文件读取三角形数据网格
- 如何从C++端挂接到 QML 项的 onClick 事件
- 如何从 Skia 路径几何体中获取网格?
- 如何通过多类"Union variable" (sfml) 使用轮询事件
- 如何在Maya中选择自定义网格组件后立即发布用户事件
- 如何处理wxEVT_GRID_COL_SORT事件来对网格进行排序?