Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt qcombobox在选择项目时不显示当前文本_Qt_Qt5_Qcombobox - Fatal编程技术网

Qt qcombobox在选择项目时不显示当前文本

Qt qcombobox在选择项目时不显示当前文本,qt,qt5,qcombobox,Qt,Qt5,Qcombobox,我有一个QCOMBOX连接到模型并显示模型中的文本项列表,但当我选择其中一个项时,QCOMBOX显示项文本,但当我单击其他小部件(QCOMBOX失去焦点)时,当前文本变为空 cboProfiles->setModel(QComboBoxModel); cboProfiles->setModelColumn(0); cboProfiles->setEditable(true); 下面是我的QComboxModel.h模型 #ifndef QCOMBOBOXMODEL_H #de

我有一个QCOMBOX连接到模型并显示模型中的文本项列表,但当我选择其中一个项时,QCOMBOX显示项文本,但当我单击其他小部件(QCOMBOX失去焦点)时,当前文本变为空

cboProfiles->setModel(QComboBoxModel);
cboProfiles->setModelColumn(0);
cboProfiles->setEditable(true);
下面是我的QComboxModel.h模型

#ifndef QCOMBOBOXMODEL_H
#define QCOMBOBOXMODEL_H

#include <QModelIndex>


class QComboBoxModel : public QAbstractListModel
{
public:
    QComboBoxModel(QObject *parent=nullptr);
    int rowCount(const QModelIndex &) const;
    QVariant data(const QModelIndex &index, int role) const;
    void populate(const QList<QPair<int,QString>> &values);
    void append(int index, QString value);

private:
    QList<QPair<int,QString>> values;
};

#endif // QCOMBOBOXMODEL_H
\ifndef QComboxModel\u H
#定义QComboxModel_H
#包括
QComboxModel类:公共QabStrictListModel
{
公众:
QComboxModel(QObject*parent=nullptr);
int行计数(常量QModelIndex&)常量;
QVariant数据(常量QModelIndex&index,int角色)常量;
无效填充(常量QList和值);
void append(int索引,QString值);
私人:
QList值;
};
#endif//QComboxModel_H
这是qcomboxmodel.cpp

#include "qcomboboxmodel.h"

#include <QModelIndex>

QComboBoxModel::QComboBoxModel(QObject *parent)
    :QAbstractListModel(parent)
{
}

int QComboBoxModel::rowCount(const QModelIndex &) const
{
    return values.count();
}


QVariant QComboBoxModel::data( const QModelIndex &index, int role ) const
{        

    QVariant value;

        switch ( role )
        {
            case Qt::DisplayRole: //string
            {
                value = this->values.value(index.row()).second;
            }
            break;

            case Qt::UserRole: //data
            {
            value = this->values.value(index.row()).first;
            }
            break;

            default:
                break;
        }

    return value;
}

void QComboBoxModel::populate(const QList<QPair<int,QString>> &values)
{
    this->values = values;
}

void QComboBoxModel::append(int index, QString value)
{
    int newRow = this->values.count();

    this->beginInsertRows(QModelIndex(), newRow, newRow);

    values.append(QPair<int, QString>(index, value));

    endInsertRows();
}
#包括“qcomboxmodel.h”
#包括
QComboxModel::QComboxModel(QObject*父对象)
:QAbstractListModel(父级)
{
}
int QComboxModel::行计数(常量QModelIndex&)常量
{
返回值。count();
}
QVariant QComboxModel::数据(常量QModelIndex&index,int角色)常量
{        
变异值;
交换机(角色)
{
case Qt::DisplayRole://字符串
{
value=this->values.value(index.row()).second;
}
打破
案例Qt::UserRole://数据
{
value=this->values.value(index.row()).first;
}
打破
违约:
打破
}
返回值;
}
void QComboxModel::填充(常量QList和值)
{
这个->值=值;
}
void qcomboxModel::append(int索引,QString值)
{
int newRow=this->values.count();
这->开始插入行(QModelIndex(),newRow,newRow);
附加(QPair(索引,值));
endInsertRows();
}
以下是我的使用代码:

QComboBox* combobox = new QComboBox;
    QList<QPair<int, QString>> values;
    values.append(QPair<int, QString>(-1, "Select item"));
    values.append(QPair<int, QString>(10, "item1(0)"));
    values.append(QPair<int, QString>(11, "item1(1)"));
    values.append(QPair<int, QString>(21, "item1(2)"));
    values.append(QPair<int, QString>(32, "item1(3)"));
    values.append(QPair<int, QString>(44, "item1(4)"));
    QComboBoxModel *model = new QComboBoxModel();
    model->populate(values);
    combobox->setModel(model);
    combobox->setEditable(true);
QCOMBOX*组合框=新的QCOMBOX;
QList值;
附加(QPair(-1,“选择项”);
附加(QPair(10,“项目1(0)”);
附加(QPair(11,“第1(1)”项);
附加(QPair(21,“第1(2)”项);
附加(QPair(32,“第1(3)”项);
附加(QPair(44,“第1(4)”项);
QComboxModel*模型=新的QComboxModel();
模型->填充(值);
组合框->设置模型(模型);
组合框->设置可编辑(真);

请提供一个我已编辑的帖子以添加一些代码