wxWidgets学习笔记:列表框wxListBox使用详解

这篇具有很好参考价值的文章主要介绍了wxWidgets学习笔记:列表框wxListBox使用详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

头文件

#include <wx/listbox.h>

方法

创建列表框

wxListBox* m_FootprintFilterListBox;
m_FootprintFilterListBox = new wxListBox( m_PanelFootprintFilter, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
bFpFilterLeftBoxSizer->Add( m_FootprintFilterListBox, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );

这个wxListBox控件的构造函数有以下参数:

  • m_PanelFootprintFilter:wxPanel类型的父窗口,表示将wxListBox添加到该窗口中。
    wxID_ANY:wxWidgets自动生成的唯一标识符,用于在事件处理程序中引用该控件。
    wxDefaultPosition:wxPoint类型的控件初始位置,表示该控件在父窗口中的初始位置。
    wxDefaultSize:wxSize类型的控件初始大小,表示该控件在父窗口中的初始大小。
    0:整数类型的控件标志,用于指定wxListBox控件的特性(例如多选、排序等),这里使用默认值0。
    NULL:指向wxArrayString类型的指针,表示初始化wxListBox时要添加到列表框中的字符串数组,这里使用默认值NULL。
    0:整数类型的控件ID,用于在事件处理程序中引用该控件,这里使用默认值0。

Append()

m_FootprintFilterListBox->Append( filterLine );
    m_FootprintFilterListBox->SetSelection( (int) m_FootprintFilterListBox->GetCount() - 1 );

GetCount()

GetSelection()

 int idx = m_FootprintFilterListBox->GetSelection();

GetStringSelection()

wxString filter = m_FootprintFilterListBox->GetStringSelection();

事件

wxEVT_LISTBOX事件

wxEVT_LISTBOX是一个wxListBox控件的选择事件。当用户选择wxListBox控件中的一个选项时,wxEVT_LISTBOX事件就会被触发。

当wxEVT_LISTBOX事件被触发时,程序可以执行相应的操作,例如更新其他控件的值或执行其他处理逻辑。可以通过连接到wxListBox控件的事件处理函数来处理wxEVT_LISTBOX事件。

m_termListBox->Connect( wxEVT_LISTBOX, wxCommandEventHandler( Term_View_BASE::OnEditListItem ), NULL, this );

wxEVT_COMMAND_LISTBOX_DOUBLECLICKED事件

wxEVT_COMMAND_LISTBOX_DOUBLECLICKED是一个事件类型,表示wxListBox控件的双击事件。当用户在一个wxListBox控件上双击鼠标左键时,该控件会生成一个wxEVT_COMMAND_LISTBOX_DOUBLECLICKED事件,并将其发送给事件处理程序进行处理。

在wxWidgets中,可以使用Bind()方法或Connect()方法将事件处理函数与wxEVT_COMMAND_LISTBOX_DOUBLECLICKED事件关联起来。例如:

m_FootprintFilterListBox->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnEditFootprintFilter ), NULL, this );

m_FootprintFilterListBox->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnEditFootprintFilter ), NULL, this );

在基类中定义虚函数:

virtual void OnEditFootprintFilter( wxCommandEvent& event ) { event.Skip(); }

在子类重写父类中的虚函数:

void OnEditFootprintFilter( wxCommandEvent& event ) override;
void DIALOG_LIB_SYMBOL_PROPERTIES::OnEditFootprintFilter( wxCommandEvent& event )
{
    int idx = m_FootprintFilterListBox->GetSelection();

    if( idx >= 0 )
    {
        wxString filter = m_FootprintFilterListBox->GetStringSelection();

        WX_TEXT_ENTRY_DIALOG dlg( this, _( "Filter:" ), _( "Edit Footprint Filter" ), filter );

        if( dlg.ShowModal() == wxID_OK && !dlg.GetValue().IsEmpty() )
        {
            m_FootprintFilterListBox->SetString( (unsigned) idx, dlg.GetValue() );
            OnModify();
        }
    }
}

wxEVT_LEFT_DCLICK事件

wxEVT_LEFT_DCLICK是一个事件类型,表示鼠标左键双击事件。当用户在一个wxWidgets控件上双击鼠标左键时,该控件会生成一个wxEVT_LEFT_DCLICK事件,并将其发送给事件处理程序进行处理。

在wxWidgets中,可以使用Bind()方法或Connect()方法将事件处理函数与wxEVT_LEFT_DCLICK事件关联起来。例如

m_FootprintFilterListBox->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnFilterDClick ), NULL, this );

m_FootprintFilterListBox->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnFilterDClick ), NULL, this );

在基类头文件中定义虚函数:

virtual void OnFilterDClick( wxMouseEvent& event ) { event.Skip(); }

在子类中声明和实现虚函数

void OnFilterDClick( wxMouseEvent& event ) override;
void DIALOG_LIB_SYMBOL_PROPERTIES::OnFilterDClick( wxMouseEvent& event )
{
    int idx = m_FootprintFilterListBox->HitTest( event.GetPosition() );
    wxCommandEvent dummy;

    if( idx >= 0 )
        OnEditFootprintFilter( dummy );
    else
        OnAddFootprintFilter( dummy );
}

案例

wxListBox每一行显示四列:name,value,display,description

要在wxListBox中每一行显示四列,你可以使用wxListBox的wxItemContainer类的Append()方法,将每一行作为一个字符串添加到wxListBox中。在每一行字符串中,你可以使用制表符(\t)或空格来分隔四列数据。

以下是一个示例代码:

Copy
// 创建一个wxListBox控件
wxListBox* listBox = new wxListBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize);

// 添加多行数据
listBox->Append("Name1\tValue1\tDisplay1\tDescription1");
listBox->Append("Name2\tValue2\tDisplay2\tDescription2");
listBox->Append("Name3\tValue3\tDisplay3\tDescription3");

在上面的示例中,我们将每一行数据作为一个字符串添加到wxListBox中,并使用制表符\t分隔四列数据。当用户选择某一行时,你可以使用GetString()方法获取该行的字符串,并使用字符串分割函数(如wxString::Split()或C++标准库中的std::string::find()和std::string::substr()等)来提取每一列的数据。文章来源地址https://www.toymoban.com/news/detail-636438.html

到了这里,关于wxWidgets学习笔记:列表框wxListBox使用详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go 跨平台GUI框架fyne 中文文档1 开始

    Fyne (go 跨平台 GUI ) 入门中文文档1开始 hello word A simple app starts by creating an app instance with app.New() and then opening a window with app.NewWindow(). Then a widget tree is defined that is set as the main content with SetContent() on a window. The app UI is then shown by calling ShowAndRun() on the window. 一个简单的应用程序首先

    2024年02月13日
    浏览(48)
  • 一款GUI跨平台自动化测试工具分享——Squish,支持Qt框架

    Squish GUI 测试自动化工具使跨平台测试应用程序变得容易,它对Qt的支持非常好。 点击获取Qt组件下载 在发布应用程序之前测试用户界面比以往任何时候都更加重要,当今用户需要从移动、桌面、Web和嵌入式应用程序中获得无缝的跨平台体验。由于应用程序经常在工厂、汽车

    2023年04月12日
    浏览(67)
  • wxWidgets(1):在Ubuntu 环境中搭建wxWidgets 库环境,安装库和CodeBlocks的IDE,可以运行demo界面了,继续学习中

    选择这个主要是因为完全的开源,不想折腾 Qt的库,而且打包的文件比较大。 网络上面有很多的对比,而且使用QT的人比较多。 但是我觉得wxwidgets 更加偏向 c++ 语法本身,也有助学习C++。 没有太多的特殊封装,而且商业化更加友好,打包软件也比较少。 更偏向原生的系统,

    2024年02月07日
    浏览(46)
  • Python学习笔记——PySide6设计GUI应用之UI与逻辑分离

    1、打开PySide6的UI设计工具pyside6-designer,设计一个主窗口,保存文件名为testwindow.ui 2、使用PySide6的RCC工具把testwindow.ui文件转换为testwindow_rc.py文件,此文件中有一个类Ui_MainWindow(包含各种控件对象) 一、通过类继承实现: class TestMainWindow(QMainWindow, Ui_MainWindow): 定义了一个新的

    2024年04月16日
    浏览(56)
  • wxwidgets Ribbon使用简单实例

    // RibbonSample.cpp : 定义控制台应用程序的入口点。 // #include \\\"stdafx.h\\\" #include wx/wx.h #include \\\"wx/wxprec.h\\\" #include \\\"wx/app.h\\\" #include \\\"wx/frame.h\\\" #include \\\"wx/textctrl.h\\\" #include \\\"wx/ribbon/bar.h\\\" #include \\\"wx/ribbon/buttonbar.h\\\" #include \\\"wx/ribbon/gallery.h\\\" #include \\\"wx/ribbon/toolbar.h\\\" #include \\\"wx/sizer.h\\\" #include \\\"wx/menu.h\\\"

    2024年02月14日
    浏览(35)
  • MATLAB GUI笔记(六):按钮组的使用

    选择Blank GUI,然后更改保存路径 然后拖动出来,同样把三个单选按钮拖动出来 改变字体大小和显示内容 依次更改三个单选按钮的字体大小和显示内容 将它拖动出来 右键,选择查看回调,选择SelectionChangeFcn, 这个函数是选项变换函数,即如果选中的选项变换,对应的图像也

    2024年02月06日
    浏览(31)
  • 【python学习笔记——列表】

    列表是写在方括号 [] 之间、用逗号分隔开的元素列表。 空列表 list=[] 非空列表 列表定义时例如list=[‘csdn’, ‘is’ ,‘good’ ,2023],直接给列表内赋值 列表名[start:stop:step],前闭后开,即取索引为start到索引为stop-step的元素,step默认为1。 1、从左到右,索引从 0 开始,第二个

    2024年02月08日
    浏览(34)
  • 【wxWidgets】使用布局控件进行窗口布局

    窗口布局基础 为了在各种环境中都能使窗口拥有合适的位置和大小,可能需要在OnSize事件中计算每一个窗口的大小并设置新位置,当然使用窗口布局控件可以更方便地实现 如果选择使用布局控件,可以通过自己编写或者使用工具来创建,也可以使用XRC文件布局的定义保存在

    2024年02月16日
    浏览(36)
  • 【网络协议详解】——GNS3的使用(学习笔记)

    📖 前言:在IT领域,网络协议的理解和掌握是至关重要的。GNS3和Wireshark是非常实用的工具,它们可以帮助你深入了解TCP/IP协议和网络的运作情况。 GNS3 是一款图形化的网络模拟软件。 模拟器的核心是 Dynamips 程序,通过构建一个虚拟的环境来运行真实的路由器网际操作系统(

    2024年02月02日
    浏览(52)
  • wxWidgets实战:使用mpWindow绘制阻抗曲线

    选择模型时,需要查看model的谐振频率,因此需要根据s2p文件绘制一张阻抗曲线。 如下图所示: 左侧使用mpWindow,右侧使用什么? https://forums.wxwidgets.org/viewtopic.php?t=44928 https://iwbnwif.github.io/freechart_docs/html/index.html

    2024年01月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包