精华内容
下载资源
问答
  • QTableView+QComboBox简单使用。采用Qt代理的方式,用QComboBox做了指定列的代理。 功能: 1. 采用QComboBox作为QtableView某一列的代理 2. 可添加QtableView的项; 3. 可删除QtableView的项;
  • 今天小编就为大家分享一篇PyQt QCombobox设置行高的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 今天小编就为大家分享一篇PyQt5重写QComboBox的鼠标点击事件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 基于QCombBox实现下拉框可勾选多个,初始的QComboBox只能选择一个,需要资源可私信。
  • 继承QCombox,使用QLineEdit和QTableWidget所编写的一个颜色下拉列表,使用向用户提供一个带有预定义颜色选择的下拉框,也支持用户选择自定义颜色
  • 解决QComboBox下拉存在空白项的问题
  • PyQt5下拉列表框控件QComboBox介绍 QComboBox是一个集按钮和下拉选项于一体的控件,也称做下拉列表框 QComboBox类中的常用方法如表 方法 描述 addItem() 添加一个下拉选项 addItems() 从列表中添加下拉选项...
  • 自定义了QComboBox,将下拉框的原有左对齐的文字改为右对齐,包括下拉列表的文字,增大了下拉列表的高度,调整下拉列表的宽度的自适应。下拉框的下拉列表改成了仿手机的滑动操作方式,此为工程源码,Qt5亲测可用。
  • QComboBox绑定自定义结构数据,一个简单demo,需要的请带走。资源在于分享,技术在于交流。争取为中国IT行业做一点贡献。
  • QTableWidget控件中添加了Qcombobox控件,添加方法为代理方式(Qcombobox选中的内容就是QTableWidget表格中的内容),可以读取XML中的数据显示到表格中,也可以将表格中的文件保存到xml中,再次打开XML文件内容为...
  • qt之QComboBox定制

    2016-07-27 14:09:24
    下拉框到处可见,作为一个图形库,qt也提供了QtComboBox类来供我们使用,但是有些时候简单的下拉列表已经满足不了我们的需求,如58上选择岗位是一个下拉表格,这个时候就需要我们自己定制一下QComboBox
  • 有些下拉菜单使用QComboBox无法满足需求,比如移动弹出框位置、改变子项高度、宽度,这些东西使用样式表无法生效,那就自己定义吧,可以在此基础上增加功能
  • QComboBox

    2019-11-14 18:52:24
    ui.comboBox->addItem(“内容”,“userData”) QString mic = ui.comboBox->itemData(index).toString();

    ui.comboBox->addItem(“内容”,“userData”)

    QString mic = ui.comboBox->itemData(index).toString();

     
    展开全文
  • 主要介绍了pyqt5的QComboBox 使用模板的具体方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 自定义QComboBox,用Listwidget做Model,加上美化,有些细节写的还不是很好,大家可以参考下!!
  • 1. 支持多个同一类的ComboBox数据共享 2. 支持不同种类的ComboBox共享不同种类的数据 3. 如有需要可自行扩展 ... ... 4. 实例:https://blog.csdn.net/Ilson_/article/details/88725341
  • Qt之QComboBox委托

    热门讨论 2015-03-02 17:47:59
    使用QCombobox来实现QQ中多账号管理的操作 易用性很好 博客地址:http: blog sina com cn liang19890820
  • 列表下拉框、表格下拉框和城市列表下拉框。讲述博客:Qt之QComboBox定制(二)
  • QComboBox自定义设置

    2020-11-11 16:44:17
    QComboBox {     border: 1px solid gray;     border-radius: 3px;     padding: 1px 18px 1px 3px;     min-width: 6em; }   QComboBox:editable   { &...

    样式示例:

    QComboBox {
        border: 1px solid gray;
        border-radius: 3px;
        padding: 1px 18px 1px 3px;
        min-width: 6em;
    }
     
    QComboBox:editable   {
        background: white;
    }
     
    QComboBox:!editable,   QComboBox::drop-down:editable {
         background: qlineargradient(x1: 0, y1:   0, x2: 0, y2: 1,
                                     stop: 0   #E1E1E1, stop: 0.4 #DDDDDD,
                                     stop: 0.5   #D8D8D8, stop: 1.0 #D3D3D3);
    }
     
    /* QComboBox gets   the "on" state when the popup is open */
    QComboBox:!editable:on,   QComboBox::drop-down:editable:on {
        background: qlineargradient(x1: 0, y1: 0,   x2: 0, y2: 1,
                                    stop: 0   #D3D3D3, stop: 0.4 #D8D8D8,
                                    stop: 0.5   #DDDDDD, stop: 1.0 #E1E1E1);
    }
     
    QComboBox:on { /*   shift the text when the popup opens */
        padding-top: 3px;
        padding-left: 4px;
    }
     
    QComboBox::drop-down   {
        subcontrol-origin: padding;
        subcontrol-position: top right;
        width: 15px;
     
        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(/usr/share/icons/crystalsvg/16x16/actions/1downarrow.png);
    }
     
    QComboBox::down-arrow:on   { /* shift the arrow when popup is open */
        top: 1px;
        left: 1px;
    }
     
    //点击之后的样式
    QComboBox::drop-down:checked{}
     
    

    //设置下拉列表框样式

    方法一

    //QComboBox下拉列表不支持直接定义样式,需要在源代码中使用到样式委托对象QStyledItemDelegate
    //用于下拉框item的样式美化
    QStyledItemDelegate*   itemDelegate = new QStyledItemDelegate();
    ui.comboBox1->setItemDelegate(itemDelegate);
    //然后再在qss脚本中定义QAbstractItemView相关样式,以下是简易示例:
    QComboBox   QAbstractItemView
    {
         border: 1px solid rgb(161,161,161);
    }
     
    QComboBox   QAbstractItemView::item
    {
        height: 24px;
    }
     
    QComboBox   QAbstractItemView::item:selected
    {        
        background-color: rgba(54, 98, 180);
    }
     
    

    方法二

    //,当需要更加丰富的显示的时候,例如图片加文字等等,可以选择QListWidget;但是需要添加代理,才可以把数据写到combobox上。【使用listview时候,不需要代理】
       
    //事例代码
    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);//自定义的widget 类
    	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);
    }
    

    方法三:使用listview

    QComboBox *combox= new QComboBox();
    cbb->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    combox->setView(new QListView());
    int count = combox->count();
    for(int i=0; i<count; ++i)
    {
    	static_cast< QStandardItemModel* >( combox->view()->model() )->item( i )->setTextAlignment( Qt::AlignCenter );
    }
    //qss
    QComboBox QAbstractItemView{  
    	outline: 0px;
    	font: 11pt "PingFang SC Medium";
    	background-color: rgb(255, 255, 255);
    }  
    QComboBox QAbstractItemView::item{  
    	margin-left:10px; 
    	margin-right: 10px; 
    	margin-top: 5px;
    	margin-bottom: 5px;
    	height: 52px;
    	border-radius: 5px;
    	border: 1px outset rgb(212,212,212);
    	border: 1px solid rgb(212,212,212);
    	background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0.320, stop:0 rgba(234, 234, 234, 255), stop:1 rgba(255, 255, 255, 255));
    }  
    QComboBox QAbstractItemView::item:selected{
    	margin-left: 10px; 
    	margin-right: 10px;   
    	margin-top: 5px; 
    	margin-bottom: 5px;
    	height: 52px;
    	border-radius: 5px;
    	color: rgb(255, 255, 255);
    	border: 1px outset rgb(30,139,195);
    	border: 1px solid rgb(96,173,215);
    	background-color: rgb(72,186,248);
    }
    

    3D效果

    /* QComboBox gets   the "on" state when the popup is open */
     QComboBox:!editable:on,   QComboBox::drop-down:editable:on {
         background: qlineargradient(x1: 0, y1:   0, x2: 0, y2: 1,
                                     stop: 0   #D3D3D3, stop: 0.4 #D8D8D8,
                                     stop: 0.5   #DDDDDD, stop: 1.0 #E1E1E1);
     }
     QComboBox:on { /* shift the text when the   popup opens */
         padding-top: 3px;
         padding-left: 4px;
     }
    QComboBox::down-arrow:on   { /* shift the arrow when popup is open */
         top: 1px;
         left: 1px;
     }
    

    点击的时候,不是下拉而是弹窗的实现:使用事件过滤器

    QComboBox *cbb = new QComboBox();
    cbb->installEventFilter(this);
     
    //需要注册的控件才会触发该事件
    bool SampleProOptionDlg::eventFilter(QObject *obj, QEvent *ev)
    {
        if(ev->type() == QEvent::MouseButtonPress){
            QComboBox *cbb = qobject_cast<QComboBox*> (obj);
            if(nullptr != cbb){
                slotTestType(cbb);
                return true;//关键
            }
     
        }
        return QDialog::eventFilter(obj, ev);
    }
    

    使用技巧

    • 自动补全
    • 使用QLineEdit配合使用
    ui->comboBox->setLineEdit(ui->lineEdit);
    QCompleter *completer = new QCompleter(users, this);
    ui->lineEdit->setCompleter(completer);
    

    //自动补全下拉列表样式可以通过completer->popup()去设置。和QCombobox下拉列表一样
    如果需要把值自动填入需要加入槽函数实现

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        word_list<<"Java"<<"C++"<<"C#"<<"PHP"<<"Perl"<<"Python"<<"Delphi"<<"Ruby";
        search_line_edit = new QLineEdit(this);
        completer = new QCompleter(this);
        string_list_model = new QStringListModel(word_list, this);
        completer->setCaseSensitivity(Qt::CaseInsensitive);
        completer->setModel(string_list_model);
        search_line_edit->setCompleter(completer);
        connect(search_line_edit, SIGNAL(editingFinished()), this, SLOT(editComplete()));
    }
     
    void Widget::editComplete()
    {
        QString text = search_line_edit->text();
        if(QString::compare(text, QString("")) != 0) {
            bool is_contains = word_list.contains(text, Qt::CaseInsensitive);
            if(!is_contains) {
               word_list<<text;
               string_list_model->setStringList(word_list);
               //completer->setModel(new QStringListModel(wordList, this));
            }
        }
    }
    

    每次编译完成后按回车键,会将不存在列表中的文本加入到改列表中。Qt::CaseSensitivity取值,Qt::CaseInsensitive:大小写不敏感;Qt::CaseSensitive:大小写敏感。默认为:Qt::CaseSensitive。

    • 补全路径
    {    
        QDirModel *model = new QDirModel(this);
        search_line_edit = new QLineEdit(this);
        completer = new QCompleter(this);
        completer->setModel(model);
        search_line_edit->setCompleter(completer);
    }
    

    组合框QComboBox的定制

    https://www.cnblogs.com/csuftzzk/p/qss_combobox.html

    http://blog.sina.com.cn/s/blog_a6fb6cc90101en3a.html

    http://blog.sina.com.cn/s/blog_a6fb6cc90101ed6n.html

    /*普通常用*/
    QComboBox QAbstractItemView
    { 
        border: 1px solid #d2d2d2;
        outline: 0px;
        font: 13pt "思源黑体 CN Medium";
        background-color: rgb(255, 255, 255);
        border-top: 1px solid rgb(62, 179, 233);
    }  
      
    QComboBox QAbstractItemView::item
    {  
        margin-left:10px; 
        margin-right: 10px; 
        margin-top: 5px;
        margin-bottom: 5px;
        height: 52px;
        border-radius: 5px;
        border: 1px outset rgb(212,212,212);
        border: 1px solid rgb(212,212,212);
        background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0.320, stop:0 rgba(234, 234, 234, 255), stop:1 rgba(255, 255, 255, 255));
    }  
      
    QComboBox QAbstractItemView::item:selected
    {
        margin-left: 10px; 
        margin-right: 10px;   
        margin-top: 5px; 
        margin-bottom: 5px;
        height: 52px;
        border-radius: 5px;
        color: rgb(255, 255, 255);
        border: 1px outset rgb(30,139,195);
        border: 1px solid rgb(96,173,215);
        background-color: rgb(30,139,195);
    }
    QComboBox
    {
        height:41px;
        color: #444444;
        padding-left:5px;
        font: 13pt "思源黑体 CN Medium";
        border-radius: 2px;
        border: 1px solid rgb(195, 195, 195);
    }
    QComboBox:checked
    {
        border: 1px solid rgb(62, 179, 233);
    }
    QComboBox::drop-down
    {
        width:39px;
        height:41px;
        background-image: url(:/Style/img/QComboBox/comBox_uncheck(39x41).png);
    }
    QComboBox::drop-down:checked
    {
        background-image: url(:/Style/img/QComboBox/comBox_check(39x41).png);
    }
    QComboBox:disabled
    {
        height:41px;
        color: #444444;
        font: 13pt "思源黑体 CN Medium";
        border-radius: 2px;
        background-color: rgb(238, 238, 238);
        border: 1px solid rgb(195, 195, 195);
    }
    QComboBox::drop-down:disabled
    {
        width:39px;
        height:41px;
        background-image: url(:/Style/img/QComboBox/comBox_gray(39x41).png);
    }
    
    展开全文
  • QComboBox下拉框给选项增加删除按钮

    千次阅读 2020-06-04 22:22:32
    0.前言 ... 网上有不少 Qt 实现的例子,实现方式也很多,在参照了别人的思路后我也实现了选项带按钮...这种方式主要是把 QListWidget作为 QComboBox 的 View ,List 的 model 也设置为 QComboBox 的 model,这样展现出.

    0.前言

    给下拉框增加按钮是常见的功能,如 QQ 账号输入框的下拉:

    网上有不少 Qt 实现的例子,实现方式也很多,在参照了别人的思路后我也实现了选项带按钮的下拉框。中间遇到不少坑,最后效果也不完美。

    1.实现过程

    我选的是 QListWidget + QListWidgetItem 的方式,因为感觉相对简单点,而且和样式表更好搭配。这种方式主要是把 QListWidget作为 QComboBox 的 View ,List 的 model 也设置为 QComboBox 的 model,这样展现出来的选项就是一个 QListWidgetItem,我们只需要把按钮设置到 QListWidgetItem 的 widget 中就行了。

    这里面还有个问题是, 要让 QComboBox 读取到对应项的文本,还要给 QListWidgetItem 加一句这个:

    QListWidgetItem* item_widget = new QListWidgetItem();
    //设置显示的data,这样combox才有文字
    item_widget->setData(Qt::DisplayRole,"text");

    然后来看一下比较简单的实现:

        QListWidget *item_list=new QListWidget(this);
        ui->comboBoxA->setModel(item_list->model());
        ui->comboBoxA->setView(item_list);
    
        //添加选项
        for(int i=0;i<5;i++)
        {
            //组合一个带按钮的widget
            QWidget *item_widget=new QWidget();
            QHBoxLayout *layout=new QHBoxLayout(item_widget);
            layout->addStretch(); //弹簧
            QPushButton *btn=new QPushButton(item_widget);
            layout->addWidget(btn);
            layout->setMargin(0);
            layout->setSpacing(0);
    
            QListWidgetItem* item_wrap = new QListWidgetItem(item_list);
            //测试长文字
            QString text=(i==0)?"text long long long":"text";
            //设置显示的data,这样combox才有文字
            item_wrap->setData(Qt::DisplayRole,text);
            item_list->setItemWidget(item_wrap,item_widget);
    
            connect(btn,&QPushButton::clicked,this,[=](){
                ui->comboBoxA->hidePopup(); //没有刷新弹框大小
                item_list->takeItem(item_list->row(item_wrap));
                delete item_wrap;
            });
        }

    很快就发现了问题,文字足够长时,选项整体宽度被拉长了,导致按钮位置超出了显示范围(下图蓝色框部分):

     

    (按钮位置我是配合样式表的 margin 调整的,可见源代码) 

    索性我就继承了 QListWidget,重写了他的 visualRect 接口,在有滚动条时,rect 就去掉滚动条的宽度:

    QRect ComboView::visualRect(const QModelIndex &index) const
    {
        QRect rect=QListWidget::visualRect(index);
        int width=this->width();
        if(verticalScrollBar()->isVisible()){
            width-=verticalScrollBar()->width();
        }
        rect.setWidth(width);
        return rect;
    }

    这下就能把选项挤过来了:

     

    这里还有个滚动条占位得问题没解决,我的想法是显示或增删选项时去判断是否有滚动条,然后调整按钮的 margin。

    2.完整代码

    github 链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/MyComboBox

    主要实现(比较忙, demo 没怎么写注释):

    #ifndef MYCOMBOBOX_H
    #define MYCOMBOBOX_H
    
    #include <QComboBox>
    #include <QListView>
    #include <QListWidget>
    #include <QPushButton>
    #include <QLayout>
    #include <QStyledItemDelegate>
    
    class ComboView : public QListWidget
    {
        Q_OBJECT
    public:
        explicit ComboView(QWidget * parent=nullptr);
    
        QRect visualRect(const QModelIndex &index) const override;
    };
    
    class ComboItem : public QWidget
    {
        Q_OBJECT
    public:
        explicit ComboItem(const QString &text,QWidget *parent = nullptr);
        ~ComboItem();
        QString text() const;
    
    signals:
        void itemClicked(const QString &text);
    
    private:
        QString textValue;
        QPushButton *btn;
    };
    
    class MyComboBox : public QComboBox
    {
        Q_OBJECT
    public:
        explicit MyComboBox(QWidget *parent = nullptr);
    
        void setRemovableItems(const QStringList &items);
    
    signals:
        void itemRemoved(const QString &text);
    
    private:
        QListWidget *itemList;
    };
    
    #endif // MYCOMBOBOX_H
    
    #include "MyComboBox.h"
    
    #include <QMouseEvent>
    #include <QLineEdit>
    #include <QStyleOptionViewItem>
    #include <QStyle>
    #include <QScrollBar>
    
    #include <QDebug>
    
    ComboView::ComboView(QWidget *parent)
        : QListWidget(parent)
    {
    
    }
    
    QRect ComboView::visualRect(const QModelIndex &index) const
    {
        QRect rect=QListWidget::visualRect(index);
        int width=this->width();
        if(verticalScrollBar()->isVisible()){
            width-=verticalScrollBar()->width();
        }
        rect.setWidth(width);
        return rect;
    }
    
    ComboItem::ComboItem(const QString &text, QWidget *parent)
        : QWidget(parent),
          textValue(text),
          btn(new QPushButton(this))
    {
        QHBoxLayout *layout=new QHBoxLayout(this);
        layout->addStretch();
        layout->addWidget(btn);
        layout->setMargin(0);
        layout->setSpacing(0);
    
        connect(btn,&QPushButton::clicked,[this]{
            emit itemClicked(textValue);
        });
    }
    
    ComboItem::~ComboItem()
    {
        qDebug()<<"~delete"<<textValue;
    }
    
    QString ComboItem::text() const
    {
        return textValue;
    }
    
    MyComboBox::MyComboBox(QWidget *parent)
        : QComboBox(parent),
          itemList(new ComboView(this))
    {
        //itemList->setTextElideMode(Qt::ElideNone);
        setModel(itemList->model());
        setView(itemList);
    }
    
    void MyComboBox::setRemovableItems(const QStringList &items)
    {
        //combox的additem insertitem不是虚函数
        //实现里时调用的model->insertRow,但是懒得再去重写listmodel-view,就新增一个接口
        itemList->clear();
        if(items.isEmpty())
            return;
    
        for(int i=0;i<items.count();i++)
        {
            QListWidgetItem* widget_item = new QListWidgetItem(itemList);
            ComboItem *item=new ComboItem(items.at(i),itemList);
            widget_item->setData(Qt::DisplayRole,items.at(i));
            //widget_item->setData(Qt::TextAlignmentRole,int(Qt::AlignRight|Qt::AlignVCenter));
            itemList->setItemWidget(widget_item,item);
    
            connect(item,&ComboItem::itemClicked,this,[this,item,widget_item](){
                //take移除item后没有刷新弹框大小,干脆隐藏掉先
                hidePopup();
    
                itemList->takeItem(itemList->row(widget_item));
                delete widget_item;
                emit itemRemoved(item->text());
            });
        }
    }
    
    

     

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    #include "MyComboBox.h"
    
    #include <QListWidget>
    #include <QDebug>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        //【1】 ui上的QComboBox
        QListWidget *item_list=new QListWidget(this);
        ui->comboBoxA->setModel(item_list->model());
        ui->comboBoxA->setView(item_list);
    
        //添加选项
        for(int i=0;i<5;i++)
        {
            //组合一个带按钮的widget
            QWidget *item_widget=new QWidget();
            QHBoxLayout *layout=new QHBoxLayout(item_widget);
            layout->addStretch(); //弹簧
            QPushButton *btn=new QPushButton(item_widget);
            layout->addWidget(btn);
            layout->setMargin(0);
            layout->setSpacing(0);
    
            QListWidgetItem* item_wrap = new QListWidgetItem(item_list);
            //测试长文字
            QString text=(i==0)?"text long long long":"text";
            //设置显示的data,这样combox才有文字
            item_wrap->setData(Qt::DisplayRole,text);
            item_list->setItemWidget(item_wrap,item_widget);
    
            connect(btn,&QPushButton::clicked,this,[=](){
                ui->comboBoxA->hidePopup(); //没有刷新弹框大小
                item_list->takeItem(item_list->row(item_wrap));
                delete item_wrap;
            });
        }
    
    
        //【2】ui上的combobox提升为自定义子类
        QStringList str_list{
            "1234567891011+++++++++++++",
            "2234567891011",
            "323",
            "423",
            "523",
            "623",
            "723",
            "823",
            "123",
            "123",
            "123"
        };
        ui->comboBoxB->setRemovableItems(str_list);
        //ui->comboBoxB->setMaxVisibleItems(20);
    
        connect(ui->comboBoxB,&MyComboBox::itemRemoved,this,[=](const QString &text){
            qDebug()<<"item remove"<<text;
            //ui->comboBox_2->clear();
        });
    }
    
    /*下拉框*/
    QComboBox{
    min-width:1px;
    min-height:26px;
    padding-left: 5px;
    padding-right: 2px;
    color: white;
    border:1px solid rgb(128, 128, 128);
    background-color:  rgb(100 ,100 ,100);
    }
    QComboBox:on{
    /*弹出为on*/
    }
    QComboBox:hover{
    border:1px solid rgb(255, 170, 0);
    }
    QComboBox:disabled{
    color: rgb(230, 230, 230);
    background-color:rgb(150, 150, 150);
    }
    QComboBox:editable{
    background-color:rgb(100, 100, 100);
    }
    QComboBox:editable:disabled{
    background-color:rgb(150, 150, 150);
    }
    /*下拉按钮-配合贴图*/
    QComboBox::drop-down{
    min-width:24px;
    }
    /*下拉框弹出项*/
    QComboBox QAbstractItemView{
    font: 15px "宋体";
    background-color:rgb(110, 110, 110);
    }
    QComboBox QAbstractItemView::item{
    height:24px;
    color:white;
    }
    QComboBox QAbstractItemView::item:hover{
    background-color: rgb(255, 170, 0);
    }
    QComboBox QAbstractItemView::item:selected{
    background-color: rgb(255, 170, 0);
    }
    /*按钮样式*/
    QComboBox QAbstractItemView QPushButton{
    max-width:20px;
    min-width:20px;
    max-height:20px;
    min-height:20px;
    border:0;
    margin-right:20px;
    background-color:white;
    }
    QComboBox QAbstractItemView QPushButton:hover{
    background-color:cyan;
    }

     3.参考

    博客:https://blog.csdn.net/wukai_std/article/details/60144318

    博客:http://blog.sina.com.cn/s/blog_a6fb6cc90102vces.html

    展开全文
  • 49.QComboBox

    2021-07-23 09:42:39
    此时创建了一个空的QComboBox 点击下按钮不会出现下拉菜单 2数据操作 以下使用的userData并非显示在界面中的数据,而是可以传递的数据,可以为任何变量类型 当然也可以不加userData,不加userData默认...

    是一个组合控件

    是一个文本框带一个下拉选择框

    继承QWeight

    长这样

    目录

    1  构造函数

    2  数据操作

    2.1  添加条目项

    2.1.1  添加纯字符条目 additem(str,userData)

    2.1.2  添加字符与图标混合条目 addItem(QIcon,str,userData)

    2.2  添加批量纯字符条目 addItems(Iterable[str])

    2.3  插入条目项

    2.3.1  插入纯字符条目 insertitem(int,str,userData)

    2.3.2  插入字符与图标混合条目 insertitem(int,QIcon,str,userData)

    2.3.3  插入批量纯字符条目 insertitems(int,iterable[str]))

    2.4  设置条目项

    2.4.1  设置指定条目图标 setItemIcon(int,QIcon)

    2.4.2  设置指定条目内容 setItemText(int,str)

    2.4.3  插入用户数据 setItemData(int,userDate,int(which user))

    2.5  删除指定的条目项 removeItem()

    2.6  插分割线 insertSeparator()

    2.7  设置当前文本

    2.7.1  设置指定位数条目作为当前文本 setCurrentIndex()

    2.7.2  设置条目中的字符串为当前文本 setCurrentText(str)

    2.7.3  设置任意字符串为当前文本 setEditText(str)

    3  模型操作

    4  视图操作

    5  代理设置

    6  数据获取

    6.1  获取条目个数 count()

    6.2  获取指定条目图标对象 itemIcon(int)

    6.3  获取指定条目的内容 itemText()

    6.4  获取指定条目的用户数据 itemData(int)

    6.5  获取当前数据的索引 currentIndex()

    6.6  获取当前数据的内容 currentText()

    7  数据限制

    7.1  最大条目数

    7.1.1  设置 setMaxCount()

    7.1.2  获取 maxCount()

    7.2  最大显示条目数

    7.2.1  获取 maxVisbleItems()

    7.2.2  设置 setMaxVisibleItems()

    8  常规操作

    8.1  可编辑

    8.1.1  设置 setEditable()

    8.1.2  获取 isEditable()

    8.2  条目可重复

    8.2.1  设置 setDuplicatesEnabled()

    8.2.2  获取 duplicatesEnabled()

    8.3  有框架

    8.3.1  设置 setFrame()

    8.3.2  获取 hasFrame()

    8.4  图标尺寸

    8.4.1  设置 setIconSize()

    8.4.2  获取 iconSize()

    8.5  清空

    8.5.1  清空所有条目 clear()

    8.5.2  清空正在编辑的内容 clearEditText()

    8.6  弹出 showPopup()

    8.7  完成器

    8.7.1  设置 setCompleter()

    8.7.2  获取 completer()

    8.8  验证器

    8.8.1  设置 setValidator()

    8.8.2  获取 validator()

    9  尺寸调整策略

    9.1  设置 setSizeAdjustPolicy()

    9.1.1  QComboBox.AdjustToContents 根据最长内容进行调整

    9.1.2  QComboBox.AdjustToContentsOnFirstShow 根据第一次显示的内容进行调整(默认值)

    9.1.3  最小长度

    9.1.4  QComboBox.AdjustToMinimumContentsLength 根据最小长度内容进行调整

    9.1.5  QComboBox.AdjustToMinimumContentsLengthWithIcon 根据带图标的最小长度进行调整

    9.2  获取尺寸政策 sizeAdjustPolicy()

    10  信号

    10.1  任意条目被选中时触发 activated 会传递一个int

    10.2  任意条目被选中时触发 activated[str] 会传递一个str

    10.3  选中的索引发生改变时 currentIndexChanged() 会传递一个int

    10.4  选中的索引发生改变时 currentIndexChanged[str] 会传递一个str

    10.5  当前文本内容发生改变 currentTextChanged 会传递一个str

    10.6  编辑的文本发生改变时 editTextChanged 会传递一个str

    10.7  移动到下拉菜单任意条目触发 highlighted 会传递一个Int

    10.8  移动到下拉菜单任意条目触发 highlighted[str] 会传递一个str


    1  构造函数

    此时创建了一个空的QComboBox

    点击下按钮不会出现下拉菜单

    2  数据操作

    以下使用的userData并非显示在界面中的数据,而是可以传递的数据,可以为任何变量类型

    当然也可以不加userData,不加userData默认userData为None

    2.1  添加条目项

    2.1.1  添加纯字符条目 additem(str,userData)

    运行结果

    点击下拉菜单后可展示添加的条目项

    2.1.2  添加字符与图标混合条目 addItem(QIcon,str,userData)

    点击下拉菜单后可展示条目项

    2.2  添加批量纯字符条目 addItems(Iterable[str])

    参数为可迭代的str对象就行

    点击下拉菜单可以查看所有的条目

    2.3  插入条目项

    我们插入条目项中,第一个参数是插入后该条目所在的位置

    我们使用刚刚创建的所有条目

    2.3.1  插入纯字符条目 insertitem(int,str,userData)

    我们现在在第0位插入一个条目

    点开下拉菜单时发现成功插入

    2.3.2  插入字符与图标混合条目 insertitem(int,QIcon,str,userData)

    我们在3号位插入图文混合条目

    成功在3号位插入

    2.3.3  插入批量纯字符条目 insertitems(int,iterable[str]))

    我们在5号位插入批量纯字符条目

    2.4  设置条目项

    2.4.1  设置指定条目图标 setItemIcon(int,QIcon)

    我们给7号位的条目添加图标

    发现第7位已经添加了图标

    2.4.2  设置指定条目内容 setItemText(int,str)

    我们设置第4个条目的内容

    2.4.3  插入用户数据 setItemData(int,userDate,int(which user))

    用户数据在界面内是不显示的

    我们在6.数据获取中会讲怎么获取它

    2.5  删除指定的条目项 removeItem()

    删除前是这样的

    我们删除第0位的条目项

    发现已被删除

    2.6  插分割线 insertSeparator()

    我们现在在1号位和2号位之间分割线

    • 注:此处是在指定位数的上面插入分割线

    2.7  设置当前文本

    我们当前编辑的文本默认为第一个加入条目的文本

    2.7.1  设置指定位数条目作为当前文本 setCurrentIndex()

    我们现在把第四个条目设置为当前文本

    2.7.2  设置条目中的字符串为当前文本 setCurrentText(str)

    • 不能使用条目外的字符串作为当前文本

    2.7.3  设置任意字符串为当前文本 setEditText(str)

    如果像使setEditText()有效,我们需要先将控件设置为可编辑状态

    2.7.3.1  设置可编辑状态 setEditable()

    设置过后,我们使用setEditText()

    如果设置的字符串不在条目之中,我们输入完成后按下回车

    发现会被加入到下拉菜单中

    3  模型操作

    由于涉及到QAbstractItemModel控件,我们先用这个控件举个例子,关于这个控件的详细用法之后再讲

    首先我们创建一个基础模型对象,之后创建三个条目,之后将条目3作为条目2的自条目,条目1条目2为模型的根条目

    之后将模型作为参数给cbb

    现在我们运行之后是这样的

    我们并没有看到item3,这个是因为视图的原因,下面我们对视图进行操作

    4  视图操作

    我们在这里使用树形视图

    这个时候运行之后是这样

    把控件尺寸改大一点就可以全部展示出来

    5  代理设置

    这个放到后面学这个控件的时候讲

    6  数据获取

    我们新建一个QComboBox,然后放三个条目进去

    6.1  获取条目个数 count()

    6.2  获取指定条目图标对象 itemIcon(int)

    我们首先给一个条目一个图标

    在这里我们如果获取图标前没有设置图标,该方法会返回一个空的QIcon对象,我们可以也可以对这个QIcon对象进行操作

    6.3  获取指定条目的内容 itemText()

    6.4  获取指定条目的用户数据 itemData(int)

    首先我们对0号条目设置用户数据

    之后再获取它

    6.5  获取当前数据的索引 currentIndex()

    • 我们在这里获取了当前条目的索引,就可以使用6.2,6.3,6.4中的方法去获得当前条目的相关信息

    6.6  获取当前数据的内容 currentText()

    7  数据限制

    我们现在搞20个条目,内容为1-20的数字

    7.1  最大条目数

    7.1.1  设置 setMaxCount()

    我们限制最大条目数为5

    条目数为最大值时,此时再添加新的条目添加不进去

    7.1.2  获取 maxCount()

    7.2  最大显示条目数

    7.2.1  获取 maxVisbleItems()

    默认情况下,我们最大显示条目数为10

    7.2.2  设置 setMaxVisibleItems()

    我们现在将其设置为15

    8  常规操作

    8.1  可编辑

    默认状态下是不可编辑的

    8.1.1  设置 setEditable()

    8.1.2  获取 isEditable()

    8.2  条目可重复

    默认状态下是不可重复的

    如果用代码加入条目的话可以重复,用户手动输入进去则默认不能重复

    我们运行后输入一个1

    发现已经加入到条目中了,现在我们再输入一个1

    此时我们发现加入不了了

    8.2.1  设置 setDuplicatesEnabled()

    运行后,我们输入一个1,然后按两下回车

    发现可以加入了

    8.2.2  获取 duplicatesEnabled()

    8.3  有框架

    这个设置设置有无框架时只有在可编辑状态下才有区别

    默认情况下是有框架的

    8.3.1  设置 setFrame()

    8.3.2  获取 hasFrame()

    8.4  图标尺寸

    我们首先搞一个有图标的条目

    8.4.1  设置 setIconSize()

    我们将图标大小设置为50,50

    8.4.2  获取 iconSize()

    8.5  清空

    8.5.1  清空所有条目 clear()

    我们搞一个按钮试一下下面这个方法

    运行开始时,我们发现有一个之前创建的气球条目

    现在我点一下按钮

    发现条目没了

    8.5.2  清空正在编辑的内容 clearEditText()

    首先我们需要让组合框为可编辑状态

    然后搞一个按钮,连接clearEditText()

    初始状态是这样的,此时该条目已处于编辑状态

    我们按一下按钮

    发现文字没有了

    8.6  弹出 showPopup()

    我们搞一个按钮连接showPopup()

    起始状态是这样的

    我们点一下弹出

    发现弹出了条目

    8.7  完成器

    首先我们先搞一个完成器

    第一个参数是提示的字段,第二个参数为父对象

    8.7.1  设置 setCompleter()

    运行之后我们输入大写的S

    完成器是不出现在条目中的

    8.7.2  获取 completer()

    8.8  验证器

    我们先搞一个子类继承QValidator

    用的还是34.QLineEdit中使用的验证器

    8.8.1  设置 setValidator()

    当我们输入1800,我们发现只能输入到180

    8.8.2  获取 validator()

    9  尺寸调整策略

    9.1  设置 setSizeAdjustPolicy()

    可选参数为下面这四个

    • QComboBox.AdjustToContents 根据最长内容进行调整
    • QComboBox.AdjustToContentsOnFirstShow 根据第一次显示的内容进行调整(默认值)

    下面两个是没有作用的

    • QComboBox.AdjustToMinimumContentsLength 根据最小长度内容进行调整(效果同QComboBox.AdjustToContentsOnFirstShow)
    • QComboBox.AdjustToMinimumContentsLengthWithIcon 根据带图标的最小长度进行调整

    我们先给组合框设置可编辑,这样效果更好

    9.1.1  QComboBox.AdjustToContents 根据最长内容进行调整

    我们输入一个1,之后按回车

    我们输入hello,然后按回车

    我们输入2,然后按回车

    发现不会再变小了

    9.1.2  QComboBox.AdjustToContentsOnFirstShow 根据第一次显示的内容进行调整(默认值)

    我们输入一个1,然后按回车

    发现不会变小了,这个控件第一次展示出来什么样子,后面就一直会是什么样子,我们再输入hello world

    没有变化

    下面的几个方法(9.2之前)经测试都是没有什么用的了

    9.1.3  最小长度

    9.1.3.1  设置最小长度 setMinimumContentsLength()

    9.1.3.2  获取最小长度 minimumContentsLength()

    9.1.4  QComboBox.AdjustToMinimumContentsLength 根据最小长度内容进行调整

    运行后,我们输入一个1

    没变,说明它认定当前就是最小状态了

    9.1.5  QComboBox.AdjustToMinimumContentsLengthWithIcon 根据带图标的最小长度进行调整

    没有用,并不是按照带图标调整的

    9.2  获取尺寸政策 sizeAdjustPolicy()

    会返回一个int

    10  信号

    我们首先搞三个条目进去

    10.1  任意条目被选中时触发 activated 会传递一个int

    运行之后我们依次选择hello,world和2

    10.2  任意条目被选中时触发 activated[str] 会传递一个str

    运行之后我们依次选择hello,world和2

    10.3  选中的索引发生改变时 currentIndexChanged() 会传递一个int

    运行之后我们依次选择hello,world和2

    10.4  选中的索引发生改变时 currentIndexChanged[str] 会传递一个str

    运行之后我们依次选择hello,world和2

    10.5  当前文本内容发生改变 currentTextChanged 会传递一个str

    运行之后我们依次选择hello,world和2

    10.6  编辑的文本发生改变时 editTextChanged 会传递一个str

    首先要让组合框变为可编辑状态

    运行后我们按三个退格

    10.7  移动到下拉菜单任意条目触发 highlighted 会传递一个Int

    运行后点开下拉菜单,将鼠标移动到hello

    之后再移动到world和2

    10.8  移动到下拉菜单任意条目触发 highlighted[str] 会传递一个str

    运行后点开菜单,分别移动到hello,world和2的条目

    展开全文
  • QComboBox和QListWidget结合,输入自动提示功能(仿Google搜索提示)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,124
精华内容 2,849
关键字:

QComboBox