Qt 可编辑下拉菜单(QComboBox) demo

Qt 可编辑下拉菜单(QComboBox) demo

1、创建并初始化一个QComboBox对象

在[0]索引位置上设置一个特殊的标记值custom表示可以自定义输入数据

    comboBox2 = new QComboBox(this);
    comboBox2->setGeometry(100,100,200,100);
    QStringList params;
    params<<"custom"<<"5600"<<"57600"<<"115200"<<"128000"<<"256000"<<"921600";
    comboBox2->addItems(params);//将这些数据加入到comboBox中
    comboBox2->setDuplicatesEnabled(true);//设置可以输入重复值(非必须选项)
    comboBox2->setCurrentIndex(6);//设置默认选中项

2、为comboBox编写信号槽函数

mainwindow.h:


class MainWindow : public QMainWindow
{
    Q_OBJECT

....

private slots:
    void on_comboBox_currentIndexChangedIndex(int index);

    void on_comboBox_currentIndexChangedText(const QString &arg1);

....
};

mainwindow.cpp:

void MainWindow::on_comboBox_currentIndexChangedIndex(int index)
{
    //判断是否选中[0]索引项custom
    //是则使能编辑、设置当前框内为空字符
    //否则禁能编辑,只能选择而不可编辑
    if(index == 0){
        comboBox2->setEditable(true);
        comboBox2->setCurrentText("");
    }else{
        comboBox2->setEditable(false);
    }
}

void MainWindow::on_comboBox_currentIndexChangedText(const QString &arg1)
{
    qDebug()<<"选择"<<arg1;
}

3、绑定槽函数

由于QComboBox::currentIndexChanged是重载方法,参数不同导致Qt5语法不能正确绑定,所以使用下列方法进行绑定
mainwindow.cpp:

    connect(comboBox2,static_cast<void (QComboBox::*)(int index)>(&QComboBox::currentIndexChanged),this,&MainWindow::on_comboBox_currentIndexChangedIndex);
    connect(comboBox2,static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged),this,&MainWindow::on_comboBox_currentIndexChangedText);

完整代码:

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>
#include <QMainWindow>
#include <QString>
#include <QDebug>
#include <QLabel>
#include <QPushButton>
#include <QObject>
#include <QByteArray>
#include <QComboBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QComboBox * comboBox2;

private slots:
    void on_comboBox_currentIndexChangedIndex(int index);

    void on_comboBox_currentIndexChangedText(const QString &arg1);


    

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    comboBox2 = new QComboBox(this);
    comboBox2->setGeometry(100,100,200,100);
    QStringList params;
    params<<"custom"<<"5600"<<"57600"<<"115200"<<"128000"<<"256000"<<"921600";
    comboBox2->addItems(params);
    comboBox2->setDuplicatesEnabled(true);
    comboBox2->setCurrentIndex(6);
    params.clear();
    connect(comboBox2,static_cast<void (QComboBox::*)(int index)>(&QComboBox::currentIndexChanged),this,&MainWindow::on_comboBox_currentIndexChangedIndex);
    connect(comboBox2,static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged),this,&MainWindow::on_comboBox_currentIndexChangedText);
}

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


void MainWindow::on_comboBox_currentIndexChangedIndex(int index)
{
    if(index == 0){
        comboBox2->setEditable(true);
        comboBox2->setCurrentText("");
        //comboBox2->setItemText(0,"");
    }else{
        comboBox2->setEditable(false);
        //comboBox2->setItemText(0,"custom");
    }
}

void MainWindow::on_comboBox_currentIndexChangedText(const QString &arg1)
{
    qDebug()<<"选择"<<arg1;
}



  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QT 中实现下拉菜单,可以使用 QComboBox 控件。 QComboBox 是一个组合框控件,它允许用户在一个下拉列表框中选择一个选项。可以通过添加选项来创建下拉列表框。当用户选择一个选项时,QComboBox 发出 currentIndexChanged() 信号。 以下是一个简单的示例,演示如何使用 QComboBox 创建一个下拉菜单: ```python import sys from PyQt5.QtWidgets import QApplication, QComboBox, QWidget, QVBoxLayout class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): # 创建一个 QComboBox 对象 combo = QComboBox(self) # 添加选项 combo.addItem('Python') combo.addItem('Java') combo.addItem('C++') combo.addItem('Ruby') # 选中默认选项 combo.setCurrentIndex(0) # 监听选项改变事件 combo.currentIndexChanged.connect(self.selectionChange) vbox = QVBoxLayout() vbox.addWidget(combo) self.setLayout(vbox) self.setGeometry(300, 300, 300, 150) self.setWindowTitle('QComboBox') self.show() def selectionChange(self, i): # 输出选项内容 print('选择了:', i) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 在上面的代码中,我们创建了一个 QComboBox 对象并添加了四个选项。然后我们将它添加到 QVBoxLayout 布局中,并设置为窗口的布局。最后我们监听 currentIndexChanged 信号,并在选择改变时输出选项内容。 运行上面的代码,我们可以看到一个简单的下拉菜单。当我们选择一个选项时,控制台会输出选项内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值