精华内容
下载资源
问答
  • 其实,在这里之前看了许多自定义颜色控件,有的是采用继承QPushButton。点击后,直接弹出 QColorDialog,然后重写 paintEvent()函数,绘制背景为选中的颜色。但是,都没有下拉选择颜色的感觉。 也有的继承 QCombox。...

    效果:
    在这里插入图片描述
    其实,在这里之前看了许多自定义颜色控件,有的是采用继承QPushButton。点击后,直接弹出 QColorDialog,然后重写 paintEvent()函数,绘制背景为选中的颜色。但是,没有下拉选择颜色的感觉。

    也有的继承 QCombox。在 item 项中添加颜色和文本。通过下拉数据项来选择。
    如下所示,
    在这里插入图片描述
    但是,如果通过下拉数据项来选择的话,如果颜色较多,则不适用。

    因此我采用继承QCombox。点击后,弹出一个 Popup 的窗体(通过 setWindowFlags(flags) 设置)。
    这样的话,点击窗体外面的部分,会自动关闭该窗体

    我们知道,继承 QCombox。如果重写 paintEvent()函数的话,则不会执行QCombox 中的 paintEvent,(子类重写父类的方法,调用子类方法时父类方法则不执行)。也就是原有QCombox 的样式会没有,需要我们在重新绘制。(类似此时就是一个QWidget样式)。

    而我们的需求只是需要改变 QCombox 中 LineEdit 中的背景颜色。其余的样式不变(下拉样式等)。

    因此我们需要了解QCombox的构成。

    Qt—自定义界面之QStyle 这里推荐这位老哥的文章,描述的很清楚,我这里也只是做一些用法上的引用。

    在这里插入图片描述
    这里我们重写了paintEvent()。为了保持原有的样式结构,我们可以查看QCombox 的源码,发现样式的绘制采用的是 QStyle。在这篇文章里我描述了一下 Qt QStyle

    this->initStyleOption(&butOpt);
    style->drawComplexControl(QStyle::CC_ComboBox,&butOpt,&painter,this);
    

    其实,上面这些代码,就可以通过QStyle 绘制 QCombox 原有的样式了。

    我们可以将该部分代码拷贝出来,复制到重写的 paintEvent()中,使它保持原有的样式,在原有样式的基础上在改造它。

    代码如下:

    void CustomCombox::initStyleOption(QStyleOptionComboBox *option) const
    {
        option->initFrom(this);
        option->editable = isEditable();
    
        if (hasFocus() && !option->editable)
            option->state |= QStyle::State_Selected;
    
        option->subControls = QStyle::SC_All;
        if (this->m_barrowState == QStyle::State_Sunken) {
            option->activeSubControls = QStyle::SC_ComboBoxArrow;
            option->state |= this->m_barrowState;
        } else {
            option->activeSubControls = this->hoverControl;
        }
    }
    
    void CustomCombox::paintEvent(QPaintEvent *e)
    {
        Q_UNUSED(e);
    
        QPainter painter(this);
    	//获取QStyle样式
        QStyle *style = QWidget::style();
    	//QCombox样式
        QStyleOptionComboBox butOpt;
        this->initStyleOption(&butOpt);
    	// 绘制文本
        style->drawControl(QStyle::CE_ComboBoxLabel, &butOpt, &painter, this);
        //绘制复杂Combox样式
        style->drawComplexControl(QStyle::CC_ComboBox,&butOpt,&painter,this);
    
        //获得子元素矩形范围
        QRect labelRect = style->subControlRect(QStyle::CC_ComboBox,&butOpt,QStyle::SC_ComboBoxEditField, this);
    
        QColor fillCol = backgroundColor;
        painter.fillRect(labelRect, fillCol);
    
        //返回指定像素值指标的值
    //    style->pixelMetric(QStyle::PM_ComboBoxFrameWidth)
    //    qDebug()<<"paintEvent";
    }
    

    上面,我们获取了 子元素(SC_ComboBoxEditField)矩形的范围:

    QRect labelRect = style->subControlRect(QStyle::CC_ComboBox,&butOpt,QStyle::SC_ComboBoxEditField, this);
    

    在通过绘制矩形区域修改颜色。

    展开全文
  • 在QTableView 中添加Combo控件,实现列表中的下拉选择控件,在Qt中Demo有了编辑框和spin的列表控件,我在demo中spin的工程中添加了combo,实现列表中的combo下拉选择控件,其他的控件也可以参考此方法开发,新加的为...
  • Qt自制像下拉列表那样点一下有东西出来点一下其他地方出来的东西就隐藏起来要怎么写,给我个大概思路
  • QComboBox *editor = new QComboBox(this); comboBox->addItems(QStringList()("Always")("Never")("Motion detection")(...comboBox->setItemData(2, Qt::lightGray, Qt::BackgroundColorRole); return editor;

    QComboBox *editor = new QComboBox(this);
    comboBox->addItems(QStringList()<<tr("Always")<<tr("Never")<<tr("Motion detection")<<tr("Timer recording"));
    QVariant v(0);
    // 序号为2的选项(第三个)不可选
    comboBox->setItemData(2, v, Qt::UserRole - 1);
    // 选项背景置灰
    comboBox->setItemData(2, Qt::lightGray, Qt::BackgroundColorRole);
    return editor;

    展开全文
  • Qt ComboBox下拉列框控件的用法

    千次阅读 2019-08-16 15:16:27
    QComboBox是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个 QLineEdit 用作输入。QComboBox 除了显示可见下拉列表外,每个项(item,或称列表项)还可以关联一个 QVariant 类型的变量,用于...

     原文链接:http://c.biancheng.net/view/1849.html     

     QComboBox 是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个 QLineEdit 用作输入。QComboBox 除了显示可见下拉列表外,每个项(item,或称列表项)还可以关联一个 QVariant 类型的变量,用于存储一些不可见数据。

    实例 samp4_6 演示 QComboBox(和 QPlainTextEdit,后续会讲)的使用,其运行时界面如图 1 所示。  
      
    实例 samp4_6 运行界面
    图 1 实例 samp4_6 运行界面

    QComboBox 的用法

    设计时属性设置

    QComboBox 主要的功能是提供一个下拉列表供选择输入。在界面上放置一个 QComboBox 组件后,双击此组件,可以出现如图 2 所示的对话框,对 QComboBox 组件的下拉列表的项进行编辑。在图 2 所示的对话框中,可以进行编辑,如添加、删除、上移、下移操作,还可以设置项的图标。


    QComboBox 组件设计时的列表项编辑器
    图 2 QComboBox 组件设计时的列表项编辑器

    用代码添加简单项

    窗口上的“初始化列表”按钮初始化下拉列表框的列表内容,其代码如下:

    1. void Widget::on_btnIniItems_clicked()
    2. { //"初始化列表"按键
    3. QIcon icon;
    4. icon.addFile(":/images/icons/aim.ico");
    5.  
    6. ui->comboBox->clear(); //清除列表
    7. for (int i=0;i<20;i++)
    8. ui->comboBox->addItem(icon,QString::asprintf("Item %d",i)); //带图标
    9. //ui->comboBox->addItem(QString::asprintf("Item %d",i)); //不带图标
    10. }

    添加一个项时可以指定一个图标,图标来源于资源文件。

    addItem() 用于添加一个列表项,如果只是添加字符串列表项,而且数据来源于一个 QStringList 变量,可以使用 addltems() 函数,示例代码如下:

    1. ui->comboBox->clear();
    2. QStringList strList;
    3. strList<<"北京"<<"上海"<<"天津"<<"河北省"<<"山东省"<<"山西省";
    4. ui->comboBox->addItems(strList);

    添加具有用户数据的项 QComboBox::addltem() 函数的两种参数的原型定义如下:

    void addItem (const QString &text, const QVariant &userData = QVariant())
    void addItem (const QIcon &icon, const QString &text, const QVariant &userData = QVariant())

    不管是哪一个 addItem() 函数,后面都有一个可选的 QVariant 类型的参数 userData,可以利用这个变量存储用户定义数据。

    界面上另一个 ComboBox 组件使用了用户数据,“初始化城市+区号”按钮的槽函数代码如下:

    
     
    1. void Widget::on_btnIni2_clicked()
    2. {//初始化具有自定义数据的comboBox
    3. //QMap自动根据 key排序
    4. QMap<QString, int> City_Zone;
    5. City_Zone.insert("北京",10);
    6. City_Zone.insert("上海",21);
    7. City_Zone.insert("天津",22);
    8. City_Zone.insert("大连",411);
    9. City_Zone.insert("锦州",416);
    10. City_Zone.insert("徐州",516);
    11. City_Zone.insert("福州",591);
    12. City_Zone.insert("青岛",532);
    13. ui->comboBox2->clear();
    14. foreach(const QString &str,City_Zone.keys())
    15. ui->comboBox2->addItem(str,City_Zone.value(str));
    16. }

    这里定义了一个关联容器类 QMap<QString,int> City_Zone,用于存储<城市,区号>映射表。为 City_Zone 填充数据后,给 comboBox2 添加项时,使用了 foreach 关键字遍历 City_Zone.keys()。添加项的语句如下:

    ui->comboBox2->addItem(str,City_Zone.value(str));

    城市名称作为项显示的字符串,电话区号作为项关联的用户数据,但是在列表框里只能看到城市名称。

    需要注意的是,将 City_Zone 的内容添加到列表框之后,列表框里显示的列表项的顺序与源程序中设置 City_Zone 的顺序不一致,因为 QMap<Key,T> 容器类会自动按照 Key 排序。

    QComboBox列表项的访问

    QComboBox 存储的项是一个列表,但是 QComboBox 不提供整个列表用于访问,可以通过索引访问某个项。访问项的一些函数主要有以下几种:

    • int currentlndex():返回当前项的序号,第一个项的序号为0。
    • QString currentText():返回当前项的文字。
    • QVariant currentData(int role = Qt::UserRole):返回当前项的关联数据,数据的缺省角色为 role = Qt::UserRole,角色的意义在后续章节会详细介绍。
    • QString itemText(int index):返回指定索引号的项的文字。
    • QVariant itemData(int index, int role = Qt%:UserRole):返回指定索引号的项的关联数据。
    • int count():返回项的个数。


    在一个 QComboBox 组件上选择项发生变化时,会发射如下两个信号:

    void currentlndexChanged(int index)
    void currentlndexChanged(const QString &text)

    这两个信号只是传递的参数不同,一个传递的是当前项的索引号,一个传递的当前项的文字。

    为使用方便,选择为 currentIndexChanged(const QString &text) 信号编写槽函数。窗体上只存储字符串列表的 comboBox 的槽函数代码如下:

    1. void Widget::on_comboBox_currentIndexChanged(const QString &arg1)
    2. {
    3. ui->plainTextEdit->appendPlainText(arg1);
    4. }

    关联有城市区号的 comboBox2 的槽函数代码如下:

    1. void Widget::on_comboBox2_currentIndexChanged(const QString &arg1)
    2. {
    3. QString zone=ui->comboBox2->currentData().toString() ;//项关联的数据
    4. ui->plainTextEdit->appendPlainText(arg1 + ":区号=" + zone);
    5. }
    展开全文
  • Qt下拉对话框 ComboBox的用法

    千次阅读 2019-03-30 10:45:34
    ComboBox是Qt下拉菜单的一个控件,通过下拉菜单选择不同的选项。 基本用法 m_ComBox = ui.comboBox; //设置默认显示值的索引,从0开始 m_ComBox->setCurrentIndex(1); //关联信号和槽 QObject::connect...
    介绍

    ComboBox是Qt的下拉菜单的一个控件,通过下拉菜单选择不同的选项,样式如图:

    在这里插入图片描述

    基本用法
    	m_ComBox = ui.comboBox;
    	//设置默认显示值的索引,从0开始
    	m_ComBox->setCurrentIndex(1);
    	
    	//关联信号和槽
    	QObject::connect(m_ComBox, SIGNAL(currentTextChanged(QString)), this, SLOT(SetSpeed(QString)));
    

    当选项变化时的实现函数

    void player_qt::SetSpeed(QString speed){
    	
    }
    

    【更多参考】

    展开全文
  •   在项目开发中,使用qt的原生控件可能打不到产品的需求。所以我们会经常自定义一些控件,以达到我们想要的效果。这个系列主要积累一些本人自定义过的控件的开发。   可复选的ComboBox,如下图所示:   如上...
  • QT 代码布局,控件添加下拉菜单

    千次阅读 2019-07-08 15:15:41
    QT 代码布局,控件添加下拉菜单 最终实现: .h文件: #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QPushButton> #include <QToolButton> #include <QMenu> #...
  • 这是第二波控件 其中qtButton.h中的程序是 #ifndef QTBUTTON_H #define QTBUTTON_H #include #include "ui_qtbutton.h" //------------------------------- #include #include #include #include #...
  • 课程目录视频链接课程重点代码位置完整代码遇到的问题改写效果展示改写注意点...下拉列表控件(QComboBox) 课程重点 代码位置 完整代码 遇到的问题 改写效果展示 改写注意点 改写代码(QTdesigner模式) ...
  • QT ComboBox 下拉对话框

    万次阅读 多人点赞 2018-08-02 14:13:32
    Combo Box是Qt下拉菜单的控件。 二、ui界面设计 打开新建项目中的界面文件(**.ui) 向窗口中拖入一个Combo Box控件,双击Combo Box对象,添加下拉菜单的选项。 可以在属性编辑栏,编辑对象的属性。   三、...
  • 最近研究了好多东西,前两天突然想做一个具有复选功能的下拉列表框。然后在网上“学习”了很久之后,终于发现了一个可以用的,特地发出来记录一下。 一、第一步肯定是先创建一个PROJECT了,这里对工 PROJECT的...
  • 项目需要设计一个带下拉选择的ComboBox,这里重写一个QComboBox实现一下 2.思路 查了一下文档发现,选择QComboBox作为模板,设计ComboBox下拉界面的model和view,用checkBox作为item,实现一下点击功能,即可实现。 ...
  • PyQt5 下拉列表控件

    2021-04-16 20:05:42
    PyQt5 下拉列表控件 # @Time : 2021/4/16 18:44 # @Author : Kevin # @File : C.py # @Software: PyCharm # encoding = utf-8 """ 下拉列表控件(QComboBox) 1、如何将列表项添加到QComboBox控件中 2、如何...
  • 需要的控件:QpushButton,QWidget,QsScrollAreaDemo用的是Qt5.10,需要的自行下载。 http://download.csdn.net/download/figo_lyf001/10267449原理:QScrollArea做边框,QWidget做按钮背景界面,QVBoxLayout做垂直...
  • Qt qml listview下拉刷新和上拉分页主要根据contentY来判断。但要加上顶部下拉指示器、滚动条,并封装成可简单调用的组件,着实花了我不少精力:) 先给大家展示下效果图: 【功能】 下拉刷新和上拉分页逻辑 /...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 200
精华内容 80
关键字:

qt下拉控件