2.4.2QT之comboBox下拉框



前言

QComboBo 以列表的方式提供一个下拉选项提供给用户显示,节省屏幕占用空间。下拉组合框中数据都可以修改编辑,可以包含图片以及字符串文本。Word 文档软件中的字体选择框、字号选择框、颜色选择框都是使用ComboBo 实现。


提示:以下是本篇文章正文内容,下面案例可供参考

2.4.2.1 QComboBo 常用的成员函数

1、添加条目信息

void QComboBox::addItem(const QString &text, const QVariant &userData = QVariant()) 
void QComboBox::addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
void QComboBox::addItems(const QStringList &texts)

addItem 是一个重载函数,可以单独添加字符串文本,也可以添加图标.

2、返回所有条目的数量

int count() const

3、设置选项框显示的图标尺寸

QSize iconSize() const
void setIconSize(const QSize & size)

4、返回指定条目的图标或者字符串

QString QComboBox::itemText(int index) const
QIcon QComboBox::itemIcon(int index) const

5、给指定条目设置图标和文本

void QComboBox::setItemIcon(int index, const QIcon & icon)
void QComboBox::setItemText(int index, const QString & text)

6、设置选项是否可以编辑

bool isEditable() const
void setEditable(bool editable)

默认情况下该属性为 false,不能编辑。

7、设置当前编辑框显示的文本

QString currentText() const //返回当前编辑框的字符串文本
void setCurrentText(const QString &text) //设置当前显示的字符串文本

使用 currentText 属性的前提是当前的 QComboBox 必须支持文本属性(setCurrentText(true))

8、设置 QComboBox 支持显示的最大条目数量。默认是 2147483647 个

int maxCount() const
void setMaxCount(int max)

9、设置指定选项的显示文本和图标

void setItemText(int index, const QString &text);
void setItemIcon(int index, const QIcon &icon);
void setItemData(int index, const QVariant &value, int role = Qt::UserRole);

int index 表示条目选项的索引值。索引从 0 开始计算。

10、插入新的条目选项

void insertItem(int index, const QString &text, const QVariant &userData = QVariant());
void insertItem(int index, const QIcon &icon, const QString &text,const QVariant &userData = QVariant());
void insertItems(int index, const QStringList &texts);

int index 表示条目选项的索引值。

2.4.2.2QComboBox 常用的槽函数

void clear(); 清除所有条目选项
void clearEditText(); 清除文本显示
void setEditText(const QString &text); 设置选项框显示的文本
void setCurrentIndex(int index); 设置当前选项的节点索引
void setCurrentText(const QString &text); 设置当前选项的文本

2.4.2.3QComboBox 常用的信号

1、editTextChanged 信号:编辑框的文本发生改变时发出(QComboBox 需要可编辑)。形参保存改变后的新文本。

void editTextChanged(const QString &);

2、activated 信号:当用户在下拉列表框中选择了一个选项发出。形参保存选中选项的节点索引值或文本。

void activated(int index);
void activated(const QString &text)

注意:即使选中的选项没有发生改变(本次选择与之前的选择相同)activated 信号也会发出。

3、currentTextChanged 信号:当编辑框的文本发生改变时发出。形参保存改变后的新文本。

void currentTextChanged(const QString &text)

注意:该信号对应 currentText 属性

4、currentIndexChanged 信号:点击某一个选项时发出。形参保存选中选项的节点索引值或文本。

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

注意:如果选项没有发生改变(本次选择与之前的选择相同)不会发出 currentIndexChanged 信号。

5、highlighted 信号:当光标选中选项时发出,不需要点击选项。形参保存选中选项的节点索引值或文本。

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

示例

1、ui界面设计

控件:Lable标签(机器状态,用户账号,用户密码),Combobox下拉框(机器状态,用户账号),LineEdit单行编辑器(用户密码),PushButton按钮(连接)

2、设计效果
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
3、代码

myCombobox.pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RESOURCES += \
    image.qrc

widget,h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_connect_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

main.cpp文件

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include<QComboBox>//使用下拉框需要的头文件
#include<QDebug>//打印输出
#include<QMessageBox>//消息对话框
#include<QIcon>//图标的头文件
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //1、创建机器状态列表
    QStringList list;
    ui->comboBox_state->addItem(QIcon(":/image/creative-commons-nd-line.png"),"开始");
    ui->comboBox_state->addItem(QIcon(":/image/forbid-fill.png"),"暂停");
    ui->comboBox_state->addItem(QIcon("::/image/shut-down-fill.png"),"停止");


    //2、创建待选的账号列表
    list<<"123123"<<"3534535"<<"453252";
    ui->comboBox_number->addItems(list);//添加显示的条目
    ui->comboBox_number->setEditable(true);//设置选项可编辑属性
    //设置密码显示模式
    ui->lineEdit_password->setEchoMode(QLineEdit::Password);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_connect_clicked()
{
    //实际运用中可以通过 QCryptographicHash 类进行加密
     QString password_info;
     password_info+=tr("账号:");
     password_info+=ui->comboBox_number->currentText();
     password_info+="\n";
     password_info+=tr("密码:");
     password_info+=ui->lineEdit_password->text();
     password_info+="\n";
     QMessageBox::information(this, tr("登录信息"), password_info,QMessageBox::Ok);
}

widget.ui文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Widget</class>
 <widget class="QWidget" name="Widget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Widget</string>
  </property>
  <widget class="QWidget" name="">
   <property name="geometry">
    <rect>
     <x>60</x>
     <y>81</y>
     <width>351</width>
     <height>161</height>
    </rect>
   </property>
   <layout class="QFormLayout" name="formLayout">
    <item row="0" column="0">
     <widget class="QLabel" name="label">
      <property name="text">
       <string>机器状态:</string>
      </property>
     </widget>
    </item>
    <item row="0" column="1">
     <widget class="QComboBox" name="comboBox_state"/>
    </item>
    <item row="1" column="0">
     <widget class="QLabel" name="label_2">
      <property name="text">
       <string>用户账号:</string>
      </property>
     </widget>
    </item>
    <item row="1" column="1">
     <widget class="QComboBox" name="comboBox_number"/>
    </item>
    <item row="2" column="0">
     <widget class="QLabel" name="label_3">
      <property name="text">
       <string>用户密码:</string>
      </property>
     </widget>
    </item>
    <item row="2" column="1">
     <widget class="QLineEdit" name="lineEdit_password"/>
    </item>
    <item row="3" column="0" colspan="2">
     <widget class="QPushButton" name="pushButton_connect">
      <property name="text">
       <string>连接</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>


Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐