精华内容
下载资源
问答
  • 易语言组合框基本属性方法事件

    千次阅读 2020-07-08 09:09:11
    本节视频教程录制了易语言组合框的取项目数、取项目数值、取项目文本、置项目文本、加入项目、插入项目、删除项目等属性。 组合框基本属性方法事件截图 视频链接: 76 属性: 左边 顶边 ...

    本节视频教程录制了易语言组合框的取项目数、取项目数值、取项目文本、置项目文本、加入项目、插入项目、删除项目等属性。

    组合框基本属性方法事件截图

    视频链接:

    76

    属性:

    左边

    顶边

    宽度

    高度

    标记

    可视

    禁止

    鼠标指针

    类型

    内容

    最大文本长度

    起始选择位置

    被选择字符数

    被选择文本

    自动排序

    行间距

    文本颜色

    背景颜色

    字体

    现行选中项

    列表项目

    项目数值

    数据源

    数据列

     

    方法:

    取顶端可见项目

    置顶端可见项目

    取项目数

    取项目数值

    置项目数值

    取项目文本

    置项目文本

    加入项目

    插入项目

    删除项目

    清空

    选择

     

    取顶端可见项目

    置顶端可见项目

    取项目数

    取项目数值

    置项目数值

     

    取项目文本

    置项目文本

     

    加入项目

    插入项目

    删除项目

     

    清空

    选择

    自有事件:

    列表项被选择

    编辑内容被改变

    将弹出列表

    列表被关闭

    双击选择

         

     

    列表项被选择

    编辑内容被改变

    将弹出列表

    列表被关闭

    双击选择        

    基本事件:

    鼠标左键被按下

    鼠标左键被放开

    被双击

    鼠标右键被按下

    鼠标右键被放开

    鼠标位置被移动

    获得焦点

    失去焦点

    按下某键

    放开某键

    字符输入

    滚轮被滚动

    组合框基本属性方法事件源码:

    .版本 2
    .支持库 spec
    
    .程序集 窗口程序集_启动窗口
    
    .子程序 _按钮1_被单击
    .局部变量 项目数量
    
    项目数量 = 组合框1.取项目数 ()
    信息框 (“组合框项目数量为:” + 到文本 (项目数量), #信息图标, , )
    
    .子程序 _组合框1_列表项被选择
    
    调试输出 (组合框1.现行选中项)
    
    .子程序 __启动窗口_创建完毕
    
    组合框1.现行选中项 = 0
    
    .子程序 _按钮2_被单击
    
    调试输出 (组合框1.取项目数值 (组合框1.现行选中项))
    
    .子程序 _按钮3_被单击
    
    调试输出 (组合框1.取项目文本 (组合框1.现行选中项))
    
    .子程序 _按钮4_被单击
    
    组合框1.置项目文本 (组合框1.现行选中项, 编辑框1.内容)
    
    .子程序 _按钮5_被单击
    
    调试输出 (组合框1.加入项目 (编辑框1.内容, ))
    
    .子程序 _按钮6_被单击
    
    组合框1.插入项目 (到整数 (编辑框2.内容), 编辑框1.内容, )
    
    .子程序 _按钮7_被单击
    
    组合框1.删除项目 (到整数 (编辑框2.内容))
    
    .子程序 _按钮8_被单击
    
    组合框1.清空 ()
    
    .子程序 _按钮9_被单击
    
    调试输出 (组合框1.选择 (组合框1.取项目文本 (组合框1.现行选中项)))

    源码:511遇见易语言教程

               511遇见易语言教程视频链接

               易语言教程组合框基本属性方法事件

     

    展开全文
  • 组合框控件CComboBox

    千次阅读 2011-01-22 22:48:00
    当用户列表框中选中项目时,该项目将显示静态文本或编辑框中。 CComboBox控件的主要方法、消息如下。 (1)GetTopIndex方法 该方法返回列表框中个可见项目的索引。 语法: int GetTopIndex( ) ...
    内容:

    CComboBox控件提供了Windows组合框的基本功能。组合框由一个列表框和一个静态文本控件或编辑控件组成。当用户在列表框中选中一个项目时,该项目将显示在静态文本或编辑框中。
    CComboBox控件的主要方法、消息如下。
    (1)GetTopIndex方法
    该方法返回列表框中第一个可见项目的索引。
    语法:
    int GetTopIndex( ) const;
    (2)SetTopIndex方法
    该方法将某一项设置为列表中的可见项。
    语法:
    int SetTopIndex( int nIndex );
    参数说明:
    nIndex:标识列表框中的选项。
    (3)Clear方法
    该方法用于删除编辑框中选中的文本。
    语法:
    void Clear( );
    (4)SetItemHeight方法
    该方法用于设置编辑框或列表框中项目的高度。
    语法:
    int SetItemHeight( int nIndex, UINT cyItemHeight );
    参数说明:
    nIndex:为-1,表示设置编辑框中的项目高度;为0,表示设置列表框中的项目高度。
    cyItemHeight:标识项目高度。
    (5)GetItemHeight方法
    该方法用于获取编辑框或列表框中项目的高度。
    语法:
    int GetItemHeight( int nIndex ) const;
    参数说明:
    nIndex:标识函数返回的是编辑框项目高度还是列表框项目高度。如果为-1,表示编辑框项目高度;如果为0,表示列表框项目高度。
    (6)GetLBText方法
    该方法用于获取列表框中指定位置的字符串。
    语法:
    int GetLBText( int nIndex, LPTSTR lpszText ) const;
    void GetLBText( int nIndex, CString& rString ) const;
    参数说明:
    nIndex:指定的项目索引(基于0开始)。
    lpszText:标识一个缓冲区指针,该指针必须有足够的空间接收字符串。
    rString:用于接收返回的字符串。
    返回值:函数返回值是字符串长度,不包括空结束符(/n)。
    (7)GetLBTextLen方法
    该方法用于返回列表框指定位置的字符串长度。
    语法:
    int GetLBTextLen( int nIndex ) const;
    参数说明:
    nIndex:指定的项目索引。
    (8)ShowDropDown方法
    该方法用于显示或隐藏组合框中的列表框。
    语法:
    void ShowDropDown( BOOL bShowIt = TRUE );
    参数说明:
    bShowIt:标识是否显示列表框,为TRUE显示列表框,为FALSE隐藏列表框。
    (9)CBN_EDITCHANGE消息
    该消息在组合框中的编辑框文本改变时发生。
    (10)CBN_CLOSEUP消息
    该消息在组合框中的列表框关闭时发生。
    (11)CBN_DBLCLK消息
    该消息在用户双击列表框中的字符串时发生。
    (12)CBN_DROPDOWN消息
    该消息在组合框中的列表框将要显示时发生。
    (13)CBN_EDITUPDATE消息
    该消息在组合框中的编辑框即将显示修改后的文本时发生。
    (14)CBN_ERRSPACE消息
    该消息在组合框不能分配足够的空间时发生。
    (15)CBN_KILLFOCUS消息
    该消息在组合框失去焦点时发生。
    (16)CBN_SELCHANGE消息
    该消息在用户改变列表框中选中的字符串时发生。
    (17)CBN_SELENDCANCEL消息
    该消息在用户选择一个字符串后,接着又选择了其他控件或关闭对话框时触发。
    (18)CBN_SELENDOK消息
    该消息在用户选择了一个列表框中的字符串或者选择一个字符串后又关闭了列表框时触发。
    (19)CBN_SETFOCUS消息
    该消息在组合框获得输入焦点时触发。
    组合框多用于提供一组数据,供用户选择。与列表框控件相比,组合框占用的屏幕空间少。因此,在程序中应用十分广泛。下面以一个实例来介绍组合框控件的应用。
    (1)新建一个基于对话框的应用程序。
    (2)在对话框中添加组合框、按钮等控件。
    (3)编写程序代码。
     “添加字符串”按钮单击事件代码。
    //添加字符串
    void CCMyComDlg::OnButton1() 

        CComboBox* combobox1 = (CComboBox*)GetDlgItem(IDC_COMBO1);
        combobox1->AddString("男");
        combobox1->AddString("女");
    }
    “清空字符串”按钮单击事件代码。
    //清空字符串
    void CCMyComDlg::OnButton2() 
    {
        CComboBox* combobox2 = (CComboBox*)GetDlgItem(IDC_COMBO2);
        combobox2->ResetContent();
    }
    “当前字符串”按钮单击事件代码。
    void CCMyComDlg::OnButton3()
    {
        CComboBox* combobox3 = (CComboBox*)GetDlgItem(IDC_COMBO3);
        CString text;
        combobox3->GetLBText(combobox3->GetCurSel(),text);
        MessageBox(text,"提示");
    }
    “列举盘符”按钮单击事件代码。
    void CCMyComDlg::OnButton4() 
    {
        CComboBox* combobox4 = (CComboBox*)GetDlgItem(IDC_COMBO4);
        combobox4->Dir(DDL_DRIVES|DDL_EXCLUSIVE,"c:/*.*");
    }

     

     

    参考资料:

     

    http://www.bcty365.com/looksetupstudy.php?id=415

    展开全文
  • MFC组合框控件总结及用法示例

    万次阅读 2014-04-26 23:01:50
    Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由个文本输入控件和个下拉菜单...组合框控件既可以进行输入,也可以列表框组成部分进行选择。打开组合框控件的属性窗口,下图所示:

    Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。编程时用到了组合框,这个控件用得不是很多,现将组合框控件的属性和方法做一个小结,供后续参考。

    组合框控件既可以进行输入,也可以在列表框组成部分中进行选择。打开组合框控件的属性窗口,下图所示:


    组合框控件属性对话框示意图

    (一)设置控件风格

    如图1所示,通过Styles(外观)选项卡中的Type属性可以设置组合框控件风格。组合框分为3种风格,即:

    1. Simple:包含一个编辑框和一个总是显示的列表框

    2. DropDown:在单击下拉箭头后才弹出列表框,这种风格的组合框的编辑框可编辑

    3. DropList:在单击下拉箭头后才弹出列表框,这种风格的组合框的编辑框是只读的 

     

    (二)调整列表部分的显示大小

    在使用组合框控件时,如果不经过调整,控件的列表框非常小,只能显示一项,操作不方便。需要调整显示的大小。

    长度调整:选中控件,拖拽右边框至合适的长度即可;

    高度调整:单击 下拉箭头 拖拽下边框只合适的高度即可。 

     

     (添加数据

    网上介绍可以直接通过属性窗口中的Data选项卡,向列表框中添加数据,编程工具是VC6.0,我没有验证过。我在VS2010上好像不能通过属性窗口为控件赋初值(只是自己没有实现)。现通过代码实现来为控件赋初值。

    通过下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。
    1、定义控件对应变量
    添加控件对应变量,如:CComboBox  m_cbExamble;

    2、向控件添加 Items
    1) Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。(这种方法我在VS2010没有实现)
    2) 利用函数 AddString() 向 Combo Box 控件添加 Items,如:
    //向组合框中添加Items

    m_cbExamble.AddString(_T("StringData1"));

    m_cbExamble.AddString(_T("StringData2"));

    m_cbExamble.AddString(_T("StringData3"));
    3) 也可以调用函数 InsertString() 将 Item 插入指定位置 nIndex,如:
    //将 Item 插入指定位置 nIndex

    m_cbExamble.InsertString( /*nIndex*/1, _T("StringData222222222")); 

    3、从控件得到选定的Item
    假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。这里会用到两个函数,如:处理组合框的CBN_SELCHANGE消息,当在组合框的列表框部分选择一项时,弹出消息框显示列表项的数据。为组合框控件条件消息响应事件,CBN_SELCHANGE消息,下图所示:


    图2 组合框控件条件消息响应事件

    代码如下:

    void CComboxTestDlg::OnCbnSelchangeCombo1()
    {
    //获得当前选择的列表项索引
    int nIndex = m_cbExamble.GetCurSel();
    CString strCBText;
    //根据指定的索引获得该项的数据
    m_cbExamble.GetLBText( nIndex, strCBText);
    MessageBox(strCBText);
    }

    这样,得到的内容就保存在 strCBText 中。

    注意:因为组合框是由一个编辑框和一个列表框组合而成,所以也可以使用(strCBText)方法直接获得组合框中当前显示的数据。 

    4、在控件中查找给定Item
    这种操作一般用于在程序中动态修改控件中该项的值,可以用函数FindStringExact() 精确匹配,如:
    int nIndex = m_cbExamble.FindStringExact( nStartAfter, “value to be found”);
    nStartAfter指明从哪一行开始查找。如果查找成功,返回的是该项的位置;否则,返回CB_ERR 

    //向组合框中添加Items
    m_cbExamble.AddString(_T("StringData1"));
    m_cbExamble.AddString(_T("StringData2"));
    m_cbExamble.AddString(_T("StringData3"));
    //将 Item 插入指定位置 nIndex
    m_cbExamble.InsertString( /*nIndex*/1, _T("StringData222222222"));
    //查找列表项数据为StringData1的项
    int nIndex = m_cbExamble.FindStringExact( /*nStartAfter*/0,_T("StringData2"));
    //nIndex 返回值为2

    也可以选中包含指定字符串的项,如:
    int nIndex = m_cbExamble.SelectString( nStartAfter, “value to be selected”);

    代码如下:

    void CComboxTestDlg::OnCbnSelchangeCombo1()
    {
    //获得当前选择的列表项索引
    int nIndex = m_cbExamble.GetCurSel();
    CString strCBText;
    //根据指定的索引获得该项的数据
    m_cbExamble.GetLBText( nIndex, strCBText);
    //查找列表项数据为StringData1的项
    int nIndex2 = m_cbExamble.FindStringExact( /*nStartAfter*/0,strCBText);
    CString str;
    str.Format(_T("%d"),nIndex2);
    //输出选中项的索引
    MessageBox(str);
    } 

    结果如下图所示


    图3 查找列表项中某项对应的索引

    5、删除控件中的Item
    该操作可以利用函数DeleteString(),需要指定被删除项的位置,如:
    m_cbExamble.DeleteString(nIndex);
    也可以使用函数ResetContent(),清除目前的所有项,如:
    m_cbExamble.ResetContent();

    这个比较简单,不必作示例介绍。


    6、显示控件中的某项
    int nIndex = m_cbExamble.GetCurSel(); //当前选中的项
    m_cbExamble.SetCurSel(nIndex); //设置第nIndex项为显示的内容


    7、得到或设置输入框中被选中的字符位置
    DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar );
    BOOL LimitText( int nMaxChars ); 设置输入框中可输入的最大字符数。


    8、列表框常用消息映射宏
    ON_CBN_DBLCLK 鼠标双击
    ON_CBN_DROPDOWN 列表框被弹出
    ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生
    ON_CBN_SELCHANGE 列表框中选择的行发生改变
    ON_CBN_EDITUPDATE 输入框中内容被更新 

    补充:

    一、如何添加/删除Combo Box内容
    1、在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。


    2、在程序初始化时动态添加
    如: //控件内容初始化
    CString strTemp;

    //消除现有所有内容 清空组合框数据

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();

    for(int i=1;i<=100;i++)

    {

    strTemp.Format(_T("%d"),i);

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);

    }

     

    3、下拉的时候添加
    如: 

    CString strTemp;

    //取得目前已经有的行数
    int iCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCount();

    if(iCount<1)//防止重复多次添加
    {
    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();
    for(int i=1;i<=100;i++)
    {
    strTemp.Format("%d",i);
    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
    }
    }


    4、删除
    DeleteString( UINT nIndex )//删除指定行.


    5、插入
    InsertString( int nIndex, LPCTSTR lpszItem )//将行插入到指定位置


    6、查找

    //可以在当前所有行中查找指定的字符传的位置

    //nStartAfter指明从那一行开始进行查找
    FindString( int nStartAfter, LPCTSTR lpszItem )

    //可以选中包含指定字符串的行

    int SelectString( int nStartAfter, LPCTSTR lpszItem )


    7选择其中的某行
    7.1选中

    //当前选中的行
    int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();

    7.2设置

    //设置第n行内容为显示的内容
    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)
    取得Combo Box框内容
    1取当前内容
    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);
    2取其他行内容
    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);


    8获得焦点
    通常要判断控件是否获得了焦点,可以用GetFocus()函数
    例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。
    但是combobox 的焦点不同,因为它是由editlistbox两部分组成的
    所以获得焦点要用GetParent()if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))


    9控制Combo Box的下拉长度
    9.1.点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。
    9.2.属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

    二、VC++ Combo Box/Combo Box Ex控件

      组合窗口是由一个输入框和一个列表框组成。创建一个组合窗口可以使用成员函数:

    BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
    其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。
    CBS_DROPDOWN  下拉式组合框
    CBS_DROPDOWNLIST  下拉式组合框,但是输入框内不能进行输入
    CBS_SIMPLE  输入框和列表框同时被显示
    LBS_SORT  所有的行按照字母顺序进行排序


    由于组合框内包含了列表框,所以列表框的功能都能够使用,如可以利用:
    int AddString( LPCTSTR lpszItem );添加行


    int DeleteString( UINT nIndex );删除指定行


    int InsertString( int nIndex, LPCTSTR lpszItem );将行插入到指定位置


    void ResetContent( );可以删除列表框中所有行


    int GetCount( );得到当前列表框中行的数量


    int GetCurSel( )/int SetCurSel(int iIndex);得到/设置当前被选中的行的位置

     

    int GetLBText( int nIndex, LPTSTR lpszText );得到列表框内指定行的字符串


    int FindString( int nStartAfter, LPCTSTR lpszItem );在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找


    int SelectString( int nStartAfter, LPCTSTR lpszItem );可以选中包含指定字符串的行


    此外输入框的功能都能够使用,如可以利用:
    DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar )得到或设置输入框中被选中的字符位置


    BOOL LimitText( int nMaxChars )设置输入框中可输入的最大字符数。
    输入框的剪贴板功能Copy,Clear,Cut,Paste动可以使用。


    最后介绍一下列表框几种常用的消息映射宏:
    ON_CBN_DBLCLK  鼠标双击
    ON_CBN_DROPDOWN  列表框被弹出
    ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生
    ON_CBN_SELCHANGE  列表框中选择的行发生改变
    ON_CBN_EDITUPDATE  输入框中内容被更新


    使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。如果在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。

     

    MFC 4.2中对组合框进行了增强,你可以在组合框中使用ImageList,有一个新的类CComboBoxEx(由CComboBox派生)来实现这一功能。

    CComboBoxEx类中添加了一些新的成员函数来实现新的功能:首先你需要调用CImageList* SetImageList( CImageList* pImageList );来设置ImageList,然后调用
    int InsertItem( const COMBOBOXEXITEM* pCBItem );

    来添加行,

    其中COMBOBOXEXITEM定义如下:
    typedef struct { 

    UINT mask; 

    int iItem; 

    LPTSTR pszText; 

    int cchTextMax; 

    int iImage; 

    int iSelectedImage; 

    int iOverlay; 

    int iIndent; 

    LPARAM lParam;

    } COMBOBOXEXITEM, *PCOMBOBOXEXITEM;

    你需要设置mask=CBEIF_IMAGECBEIF_TEXT,并设置iItem为插入位置,设置pszText为显示字符串,设置iImage为显示的图标索引。下面的代码演示了如何进行插入:
     
    m_list.Create(IDB_IMG,16,4,RGB(0,0,0));

    m_cbeWnd.SetImageList(&m_list);

    COMBOBOXEXITEM insItem;

    insItem.mask=CBEIF_IMAGECBEIF_TEXT;insItem.iItem=0; 

    insItem.iImage=0;insItem.pszText=_T("Line 1");

    m_cbeWnd.InsertItem(&insItem);

    insItem.iItem=1;insItem.iImage=1;

    insItem.pszText=_T("Line 2");

    m_cbeWnd.InsertItem(&insItem);

    通过调用int DeleteItem( int iIndex );来删除行,并指明行的位置。
    通过调用BOOL GetItem( COMBOBOXEXITEM* pCBItem )/BOOL SetItem( const COMBOBOXEXITEM* pCBItem );来得到/设置行数据。 

     

    三、提高篇(控件应用方案)
    1.功能
    组合框(ComboBox)是文本框(TextBox)和列表框(ListBox)的组合。用户可以从文本框中输入文本,也可以从列表框中选取列表项。
    2.属性
    ComboBox控件的常用属性如表1所示。
    1 ComboBox控件的常用属性
    编号  属性  说明
    1  IntegralHeight  返回或设置一个值,指示控件是否显示部分项目。运行时是只读的
    2  List  返回或设置控件列表部分的项目
    3  ListCount  返回控件的列表部分项目的个数
    4  ListIndex  返回或设置控件中当前选择项目的索引,在设计时不可用
    5  Locked  返回或设置一个值,以指定控件是否可被编辑
    6  Sorted  返回一个值,指定控件的元素是否自动按字母表顺序排序
    7  Style  返回或设置一个值,该值用来指示控件的显示类型和行为
    8  TabIndex  返回或设置父窗体中大部分对象的〈Tab〉键次序
    9  Text ComboBox 控件(Style属性设置为0(下拉组合框)或为1(简单组合框))返回或设置编辑域中的文本 



    展开全文
  • QComboBox的代理(订制QComboBox组合框)

    千次阅读 2017-03-03 18:12:47
    许多既需要用户选择、又需要用户手动输入的应用场景下,组合框能够很好的满足我们的需求。如我们经常使用的聊天软件QQ登录框,便是个很好的应用例子:  显然,用户既可以自己手动输入新的QQ号码,也可以...
    原文地址
    

    导读

         组合框是一个重要且应用广泛的组件,一般由两个子组件组成:文本下拉单部分和按钮部分。在许多既需要用户选择、又需要用户手动输入的应用场景下,组合框能够很好的满足我们的需求。如我们经常使用的聊天软件QQ登录框,便是一个很好的应用例子:

         显然,用户既可以自己手动输入新的QQ号码,也可以在列表框中选择历史输入记录。对于提高用户体验是一个不错的手段。这篇博文重点讲述如何用QSS对组合框进行定制。

    基本自定义

         组合框的使用非常简单,为了加快叙述速度,我们直接在Qt Designer中拖一个QComboBox控件放到主窗口中。此时,我们什么都不用做就有了一个简单的组合框,如下:

         但很显然,我们得添加一个文字,否则QComboBox不会显示任何内容。这样出现的组合框样式很普通:一个文本加一个带箭头号的按钮就完了。既然主题是用QSS来定制组合框,那么我们第一件事就是新建一个.qss文件并添加到资源文件中进行编译。.qss文件的内容初步编写如下:

    1
    2
    3
    4
    5
    6
    QComboBox {
        border: 1px solid gray;
        border-radius: 3px;
        padding: 1px 2px 1px 2px;  # 针对于组合框中的文本内容
        min-width: 9em;   # 组合框的最小宽度
    }

      我们给组合框3个像素的圆角,边框1个像素宽并将颜色设置为灰色。看看效果:

          文本框部分似乎还不错,但是右边的按钮外观实在是太丑了,和整体风格不搭。我们继续美化一下按钮。按钮是QComboBox的一个子组件,用::drop-down指代。编写如下QSS代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    QComboBox::drop-down {
        subcontrol-origin: padding;
        subcontrol-position: top right;
        width: 20px;
     
        border-left-width: 1px;
        border-left-color: darkgray;
        border-left-style: solid; /* just a single line */
        border-top-right-radius: 3px; /* same radius as the QComboBox */
        border-bottom-right-radius: 3px;
    }
     
    QComboBox::down-arrow {
        image: url(:/misc/down_arrow_2);
    }

      可以看到,我们分别将按钮右上角和右下角设置了3个像素的圆角,这是因为我们前面给组合框的整体边框设置了圆角。如果不给按钮设置圆角,那么按钮的棱角将会遮挡住整体边框的圆角效果。另外,我们改变了按钮上的箭头图标。::down-arrow也是一个子组件,我们用image属性替换了系统默认的图标。对比一下:

         嗯,整体风格上看起来协调些了。当然了,在::drop-down子组件的定制中,我们将subcontrol-position属性设置成了top, right。这样按钮就位于最右边了。如果希望将按钮置于最左边显然也很简单。只需要将subcontrol-position设置为top, left,然后改变一下QComboBox的padding值就可以达到目的了。我们再拉出下拉框看看:

         有什么问题呢?显然,下拉框中的选项高度太小了,看起来挺别扭的。那么如何对下拉框进行定制呢?我们有个很好的模仿对象:

         360安全卫士的登录框中的下拉框看起来就挺不错,而且还有图标出现在选项的右边。下面我们就进入高级定制部分。看看又该如何进行改进。

    高级自定义

         要实现上述效果,我们首先要做的就是将QComboBox设置为可以编辑的(setEditable())。这样,文本框中的内容才可以手动进行输入。另外,我们还注意到,下拉框中的选项右边还有图标出现,QQ的登录框中也出现了图标。我们最直观的想法就是用布局管理器(水平或垂直的)将所有组件组装成一个整体,然后再添加到下拉框中去。

         怎么做呢?幸运的是,QComboBox内部也是Model/View框架来维护下拉框内容的。因此,最直接的方法就是定义一个QListWidget,将这个QListWidget设置为QComboBox的View,而将QListWidget的Model设置为QComboBox的Model。QListWidget只是一个View类,因此我们还得自定义View类中的Item啊。

         那好,自QWidget派生一个子类,实现水平布局,将所有子组件添加到里面去:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ComboboxItem::ComboboxItem(QWidget *parent)
        : QWidget(parent)
    {
        m_img = new QLabel(this);
        QPixmap pic(QStringLiteral(":/misc/preference"));
        m_img->setPixmap(pic);
        m_img->setFixedSize(pic.size());
        m_label = new QLabel(this);
     
        m_layout = new QHBoxLayout(this);
        m_layout->addWidget(m_label);
        m_layout->addStretch();
        m_layout->addWidget(m_img);
     
        m_layout->setSpacing(5);
        m_layout->setContentsMargins(5, 5, 5, 5);
     
        setLayout(m_layout);
    }

      代码很简单,定义了两个标签QLabel,一个显示文本,一个显示图标。用水平布局管理器添加到QWidget中去。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    ThemeRoller::ThemeRoller(QWidget *parent)
        : QMainWindow(parent)
    {
        ui.setupUi(this);
     
        m_listWidget = new QListWidget(this);
            // 设置子项目代理,否则下拉框选项周围会出现虚线框
        m_listWidget->setItemDelegate(new NoFocusFrameDelegate(this));
        ui.comboBox->setEditable(true);
        ui.comboBox->setModel(m_listWidget->model());
        ui.comboBox->setView(m_listWidget);
            // 在下拉框中添加5个选项
        for (int i = 0; i < 5; ++i)
        {
            ComboboxItem* item = new ComboboxItem(this);
            item->setLabelContent(QString("Account") + QString::number(i, 10));
            connect(item, SIGNAL(chooseAccount(const QString&)), this, SLOT(onChooseAccount(const QString&)));
            QListWidgetItem* widgetItem = new QListWidgetItem(m_listWidget);
            m_listWidget->setItemWidget(widgetItem, item);
        }
    }

      我们还将ComboboxItem的chooseAccount()信号关联到了onChooseAccount()槽。这样,当用户点击了选项中的某一个选项时,能够在QComboBox的文本框中显示选中的项。那么,QSS该如何编写呢?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    QComboBox QAbstractItemView::item {
        height: 25px;
    }
     
    QListView::item {
        background: white;
    }
     
    QListView::item:hover {
        background: #BDD7FD;
    }

      也很简单,只是设置了选项中的高度,和QComboBox的高度保持一致,这样看起来不至于别扭。然后给选项设置了鼠标悬停背景色。至此,整个定制过程就结束了。看看效果如何:

    小结

          QComboBox分成三个定制部分:文本框(是否可编辑),按钮(箭头标记、边框),下拉框(选项高度、子组件布局)。由以上可见,我们利用QSS可以很好的实现出自己想要的效果,而且效果还不赖。

    展开全文
  • 组合框和列表框都可以界面上同时显示多项内容,并且允许用户选中其中的内容,列表框还允许同时选择多项。这两种控件的使用,有很多相似之处;2.3.1 技术要点: Windows 预先定义了系列“CB_ ”开头的消息...
  • 列表框和组合框 列表框是CListBox类的对象,组合框是CComboBox的对象。 列表框 属性设置 列表框的重要属性有: Selection 该属性决定用户的选择方式,缺省值为 Single 。属性值有: ①:Single ── 单项...
  • 显然,用户既可以自己手动... 组合框的使用非常简单,为了加快叙述速度,我们直接Qt Designer个QComboBox控件放到主窗口。此时,我们什么都不用做就有了个简单的组合框,如下:  但很显然,我们
  • VC编程之组合框

    千次阅读 2013-04-03 10:47:47
    1.如何正确的得到ComBox的指针 CComboBox *mComb = (CComboBox*)GetDlgItem(IDC_DuanCB); CComboBox *mComb = (CComboBox*)::GetDlgItem(m_...CComboBox控件又称作组合框控件,其有三种形态可供选择,1.简单组合框(Sim
  • 工作我们或多或少都需要自己搭建个框架,现在常见的Java开源框架组合方式主要为:SSH,spring+springMVC+JDBC,SSM。 其中SSM目前无论是培训机构培训亦或是招聘。都会将会使用SSM框架作为个重要能力来作为...
  • Combo Box (组合框)控件

    千次阅读 2014-03-31 15:25:01
    Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由个文本输入控件和个下拉菜单组成的。用户可以从个预先定义的列表里选择一个选项,同时也可以直接文本框里面输入文本。下面的...
  • 相应的下拉框表头combobox添加onSelect方法,js声明并且实现limitSelectNum方法通过$(this)指针获取到当前的元素,然后getValues方法获取到当前下拉框的值(这里我是多选所以是getValues,单选是getvalue方法),...
  • 第十五章 组合框QGroupBox和工具箱QToolBox 15.1 QGroupBox 15.2 QToolBox 15.3 小结 就跟分类一样,我们可以把相同的控件放在一起,也可以把达到项功能所需要的一些控件放在一起等等,合理运用这两个控件可以...
  • QT - qss(二)组合框QComboBox的定制

    千次阅读 2016-11-03 08:49:39
    许多既需要用户选择、又需要用户手动输入的应用场景下,组合框能够很好的满足我们的需求。如我们经常使用的聊天软件QQ登录框,便是个很好的应用例子:  显然,用户既可以自己手动输入新的QQ号码,也可以...
  • Win32字控件-组合框

    千次阅读 2013-09-29 16:52:02
    #define CBS_DROPDOWN 下拉式组合框,但是输入框内可以进行输入 #define CBS_DROPDOWNLIST 下拉式组合框,但是输入框内不能进行输入 #define CBS_OWNERDRAWFIXED 0x0010L 未完待续 #define CBS_OWNERDRAWVA
  • 许多既需要用户选择、又需要用户手动输入的应用场景下,组合框能够很好的满足我们的需求。如我们经常使用的聊天软件QQ登录框,便是个很好的应用例子:  显然,用户既可以自己手动输入新的QQ号码,也可以...
  • 列表框与组合框组件也被广泛的使用。列表框表示标准Windows列表框,它提供用户选的选择表。如果列表框包含更多的项,不能次显示,滚动栏提供存取列表框其余项。 New Term 一些列表框(list boxes)是自...
  • MFC 组合框ComboBox总结

    2012-07-10 20:54:14
    MFC 4.2组合框进行了增强,你可以在组合框中使用ImageList,有个新的类CComboBoxEx(由CComboBox派生)来实现这功能。CComboBoxEx类添加了一些新的成员函数来实现新的功能:首先你需要调用CImageList*...
  • 项目的定义与特性 临时性 独特性 渐进明细性 二、 运营 2.1 项目和运营的共性 2.2 项目和运营的差异 2.3 项目与运营具有相对性 2.3.1 项目与运营的承接关系 三、商业价值、组织战略、项目组合项目集 3.1 ...
  • 下拉列表框中显示树状结构

    千次阅读 2005-08-08 18:15:00
    作者:星轨(oRbIt) E_Mail :inte2000@163.com 转载请注明原作者,否则请勿转载 下拉列表框中显示树状结构 下拉列表(或称组合列表)是Windows系统下开发软件最常用的控件之,该控件适用性强且使用...
  •   按下特定的按键序列之后,启动某一个隐藏功能,或者是快捷启动某个东西。  那么我们如何实现这个触发过程呢?  我们通过需求分析,来定义个接口。接口要定义哪些方法呢?  首先,
  • 实际开发,很多表格的单元格都是以组合框作为编辑器的,组合框能带来很大的灵活性以下贴出实例代码:package com.acconsys.swing.chapter14;import java.awt.BorderLayout;/** * 这段代码展示如何使用组合...
  • 内容简介 本书从技术、工具与实战3个维度讲解了 Python 网络爬虫: 技术维度:详细讲解了 Python 网络爬虫实现的核心技术,包括网络爬虫的工作原理、如何用 urllib 库编写网络爬虫、爬虫的异常处理、正则表达式、...
  •  本文将介绍并对比5种主流大数据框架,助你更深层次了解这些框架,从而在项目中更好地使用它们。  本文首发于InfoQ垂直号「大数据杂谈」,转载已获授权。 简介  大数据是收集、整理、处理大容量数据集,并...
  • 前言 V- Layout 是阿里出品的基础 UI 框架,用于快速实现页面的复杂布局,手机天猫 Android... 五一假期我对V- Layout进行了详细分析,我将献上份 V- Layout的使用攻略 & 源码分析,希望你们会喜欢。 目录1. 为什
  • SpringBoot日志框架篇

    万次阅读 2019-11-27 09:49:49
    在项目的开发,日志是必不可少的个记录事件的组件,所以也会相应的在项目中实现和构建我们所需要的日志框架。 而市面上常见的日志框架有很多,比如:JCL、SLF4J、Jboss-logging、jUL、log4j、log4j2、logback...
  • Tangram:个基于MFC框架的柔性软件开发系统

    万次阅读 热门讨论 2005-04-05 02:00:00
    Tangram:个基于MFC框架的柔性软件开发系统孙 辉Tangram是个基于MFC类库的软件开发框架,用于解决Visual C++基于MFC的软件开发面临的若干问题, Tangram是个开源项目。网址:...
  • 项目组合管理(PPM)

    千次阅读 2019-03-06 15:14:08
    PMI对组合管理的定义为“Project Portfolio management refers to the selection and support of projects or program investments. These investments in projects and programs are guided by the organization’s...
  • C++实践项目一:学生信息管理系统(内附完整代码)

    万次阅读 多人点赞 2019-04-17 15:55:59
    引言 这几乎是任何一门语言的经典案例。 管理信息系统。 MIS(管理信息系统——...因为很多时候写代码就不是从头到尾,线性地写…… 为了让我这篇文章成为篇所谓的简单的教学版,我就把代码挑着贴了,以便...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 81,767
精华内容 32,706
关键字:

在组合框中选择某一项目内容