• Qt学习总结之QComboBox


    一.简介

    1.下拉框是一个组合控件(包含一个文本显示控件和一个按钮)。它默认显示最小的控件给用户来操作,并且可以用下拉选择的界面提供给用户更多的预置选项。
    2.它是直接继承自QWidget。

    如下:
      在这里插入图片描述

    二.功能作用

    1.构造函数。

    可以直接实例化,不用传递参数。

    m_combox = new QComboBox(this);
    
    • 1

    2.数据操作

    数据的操作主要分对数据项的增删改和一些其他的操作
    a.增加项目
    下拉框的内容有两种增加方式:追加和指定位置添加。

    m_combox->addItem("星期四");       //追加项目
    m_combox->insertItem(2,"星期五");  //指定位置添加项目
    
    • 1
    • 2

    如下:

    在这里插入图片描述

    还有一种增加的方法:批量增加。用一个可迭代的数据就可以

    QList<QString> com_list;
    com_list.append("星期一");
        com_list.append("星期二");
        com_list.append("星期三");
    m_combox->addItems(com_list);     //批量添加项目
    
    • 1
    • 2
    • 3
    • 4
    • 5

    b.删除项目
    删除项目很简单,只要指定需要删除的项目的所索引值就可以了

    m_combox->removeItem(1);        //删除项目
    
    • 1

    c.改指定项目

    m_combox->setItemText(2,"这是修改项");       //修改指定项目
    
    • 1

    d.编辑当前显示文本

    如果没有指定的索引值或文本内容,则显示状态不变。

    m_combox->setCurrentIndex(5);       //显示指定索引的项
    delay(5000);
    m_combox->setCurrentText("星期一");    //按指定的内容去显示
    
    • 1
    • 2
    • 3

    e.插入分割线

    m_combox->insertSeparator(3);       //插入分隔线
    
    • 1

    效果如下:
    在这里插入图片描述
    f.插入模型(树形表)

    QStandardItemModel *mode = new QStandardItemModel(this);
    
    QStandardItem *mode_item1 = new QStandardItem();
    QStandardItem *mode_item2 = new QStandardItem();
    QStandardItem *mode_item2_1 = new QStandardItem();
    
    mode_item1->setText("item1");
    mode_item2->setText("item2");
    mode_item2_1->setText("item2_1");
    
    mode_item2->appendRow(mode_item2_1);
    
    mode->clear();
    mode->appendRow(mode_item1);
    mode->appendRow(mode_item2);
    
    QTreeView *tree = new QTreeView(this);
    tree->setModel(mode);
    
    m_combox->setModel(mode);
    m_combox->setView(tree);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    g:数据的限制

    一般数据的限制是和可编辑的状态同时使用的,用了数据限制可以限制数据的条数。

    m_combox->setMaxCount(10);              //设置最大存储项
    m_combox->setMaxVisibleItems(3);        //设置最大显示项
    
    • 1
    • 2

    h:常规操作

    m_combox->setDuplicatesEnabled(true);   //是否可以被重复
    m_combox->setFrame(true);               //设置框架边框
    QSize qsize;
    qsize.setWidth(10);
    qsize.setHeight(5);
    m_combox->setIconSize(qsize);           //设置图标尺寸
    m_combox->iconSize();                   //获取图标尺寸
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    三.信号

    1.条目改变

    QComboBox::activated()	;						//
    
    • 1

    2.当前条目改变

    QComboBox::currentIndexChanged();	//条目号发生变化
    QComboBox::currentTextChanged();	    //文本内容发生变化
    
    • 1
    • 2

    3.高亮发生变化

    QComboBox::highlighted();	//高亮条目发生变化
    
    • 1

    源码:
    mainwindow.c

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include 
    #include 
    #include 
    #include 
    #include 
    
    
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
    
        ui->setupUi(this);
    
        com_list.append("星期一");
        com_list.append("星期二");
        com_list.append("星期三");
        this->resize(800,600);
    
        m_combox = new QComboBox(this);
        m_combox->setGeometry(100,100,200,30);
    
        m_textedit = new QTextEdit(this);
        m_textedit->setGeometry(330,100,200,200);
    
        for(int i=0;i<com_list.length();i++){
            m_combox->addItem(com_list.at(i));
        }
    
        m_combox->addItem("星期四");       //追加项目
        m_combox->insertItem(2,"星期五");  //指定位置添加项目
    
        m_combox->addItems(com_list);     //批量添加项目
    
        m_combox->removeItem(1);        //删除项目
    
        m_combox->setItemText(2,"这是修改项");       //修改指定项目
    
    
    
        connect(m_combox,&QComboBox::currentTextChanged,this,&MainWindow::slot_combox);
    
    }
    
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::slot_combox()
    {
        QString str_temp = m_combox->currentText();
    
        m_textedit->setText("当前选择的是:"+str_temp);
    
    //    if(!str_temp.compare(com_list.at(0))){
    //        m_textedit->setText("today is "+str_temp);
    //    }else if(!str_temp.compare(com_list.at(1))){
    //        m_textedit->setText("today is "+str_temp);
    //    }else if(!str_temp.compare(com_list.at(2))){
    //        m_textedit->setText("today is "+str_temp);
    //    }
    }
    
    void MainWindow::delay(int msec)
    {
        QTime dieTime = QTime::currentTime().addMSecs(msec);
        while( QTime::currentTime() < dieTime )
            QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
    }
    
    void MainWindow::process()
    {
        m_combox->setCurrentIndex(5);       //显示指定索引的项
        delay(5000);
        m_combox->setCurrentText("星期一");    //按指定的内容去显示
    
        m_combox->insertSeparator(3);       //插入分隔线
    
        QStandardItemModel *mode = new QStandardItemModel(this);
    
        QStandardItem *mode_item1 = new QStandardItem();
        QStandardItem *mode_item2 = new QStandardItem();
        QStandardItem *mode_item2_1 = new QStandardItem();
    
        mode_item1->setText("item1");
        mode_item2->setText("item2");
        mode_item2_1->setText("item2_1");
    
        mode_item2->appendRow(mode_item2_1);
    
        mode->clear();
        mode->appendRow(mode_item1);
        mode->appendRow(mode_item2);
    
        QTreeView *tree = new QTreeView(this);
        tree->setModel(mode);
    
        m_combox->setModel(mode);
        m_combox->setView(tree);
        m_combox->setCurrentIndex(0);
        m_combox->setFrame(false);
    
        m_combox->setMaxCount(10);              //设置最大存储项
        m_combox->setMaxVisibleItems(3);        //设置最大显示项
    
       //设置可重复性
        m_combox->setDuplicatesEnabled(true);   //是否可以被重复
        m_combox->setFrame(true);               //设置框架边框
        QSize qsize;
        qsize.setWidth(10);
        qsize.setHeight(5);
        m_combox->setIconSize(qsize);           //设置图标尺寸
        m_combox->iconSize();                   //获取图标尺寸
    
    }
    
    		
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include 
    #include 
    #include 
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
        void process();
    private slots:
        void slot_combox();
    private:
        Ui::MainWindow *ui;
    
        QComboBox *m_combox;
        QTextEdit *m_textedit;
    
        QList<QString> com_list;
        void delay(int msec);
    };
    
    #endif // MAINWINDOW_H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
  • 相关阅读:
    如何清理苹果MAC电脑系统缓存数据?
    每日leetcode[二进制求和]
    Claude 2,它有 GPT-4 一些无法超越的能力
    MySQL查询数据库所有表名及其注释
    Doodles版洞洞鞋3天售罄 蓝筹NFT卖货自救
    五、W5100S/W5500+RP2040树莓派Pico<UDP Client数据回环测试>
    JavaScript中如何确定this的值?如何指定this的值?
    效果编辑器新版上线!3D渲染、加标注、设置动画,这次一个编辑器就够了
    Live800:智能客服时代,智能营销机器人有哪些套路?
    【NodeJs-5天学习】第一天篇③ —— VsCode上运行第一个NodeJs 程序,配置自动重启插件 nodemon
  • 原文地址:https://blog.csdn.net/qq_27726087/article/details/126527928