QT下拉框中复选框的多选

2021-02-03 15:30:24  阅读 6233 次 评论 0 条

原文 https://blog.csdn.net/liusanping456/article/details/74990395

我做了一些修改:

h文件

#include <QListWidget>
#include <QLineEdit>
#include <QComboBox>

private slots:
......
    void stateChanged(int state);
    void textChanged(const QString &text);
private:
    QListWidget *pListWidget;
    QLineEdit *pLineEdit;
    QString strSelectedText;
    bool bSelected;
};

ccp文件

    QString SQL="";
    QString ND=mySQL::ND;
    SQL=QString("SELECT xmdm,xmmc FROM `hsxm` WHERE type_id='%1' and nd='%2' and length(xmdm)=1 order by xmdm").arg(mySQL::TypeId).arg(ND);
    QSqlQuery query(mySQL::cn); //查询 表并输出,测试能否正常操作数据库
    query.exec(SQL);
    pListWidget = new QListWidget(this);
    pLineEdit = new QLineEdit(this);
    ui->cmbHSXM->addItem("");
    while(query.next()){
        QString str=QString("%1 %2").arg(query.value("xmdm").toString().trimmed()).arg(query.value("xmmc").toString().trimmed());
        //ui->cmbHSXM->addItem(str);
        QListWidgetItem *pItem = new QListWidgetItem(pListWidget);
        pListWidget->addItem(pItem);
        pItem->setData(Qt::UserRole, str);
        QCheckBox *pCheckBox = new QCheckBox(this);
        pCheckBox->setText(QStringLiteral("[%1]").arg(str));
        pListWidget->addItem(pItem);
        pListWidget->setItemWidget(pItem, pCheckBox);
        connect(pCheckBox, SIGNAL(stateChanged(int)), this, SLOT(stateChanged(int)));
    }
       ui->cmbHSXM->setModel(pListWidget->model());
       ui->cmbHSXM->setView(pListWidget);
       ui->cmbHSXM->setLineEdit(pLineEdit);
       pLineEdit->setReadOnly(true);                                                                                                                    //ui.comboBox->setEditable(true);
       connect(pLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(textChanged(const QString &)));
       
       
       
       
       ......
       
       
       
       
       
void Formkmxx::stateChanged(int state)
{
    int tmpi=state;
    tmpi++;
    bSelected = true;
    QString strSelectedData("");
    strSelectedText.clear();
    QCheckBox *pSenderCheckBox = nullptr;
    int nCount = pListWidget->count();
    for (int i = 0; i < nCount; ++i)
    {
        QListWidgetItem *pItem = pListWidget->item(i);
        QWidget *pWidget = pListWidget->itemWidget(pItem);
        QCheckBox *pCheckBox = (QCheckBox *)pWidget;
        if (pCheckBox->isChecked())
        {
            QString strText = pCheckBox->text();
            strSelectedData.append(strText).append(";");
        }
        //所点击的复选框
        if (pSenderCheckBox == pCheckBox)
        {
            int nData = pItem->data(Qt::UserRole).toInt();
            qDebug() << QString("I am sender...id : %1").arg(nData);
        }
    }
    if (strSelectedData.endsWith(";"))
        strSelectedData.remove(strSelectedData.count() - 1, 1);
    if (!strSelectedData.isEmpty())
    {
        //ui.comboBox->setEditText(strSelectedData);
        strSelectedText = strSelectedData;
        pLineEdit->setText(strSelectedData);
        pLineEdit->setToolTip(strSelectedData);
    }
    else
    {
        pLineEdit->clear();
        //ui.comboBox->setEditText("");
    }
    bSelected = false;
    delete pSenderCheckBox;
}
void Formkmxx::textChanged(const QString &text)
{
    if (!bSelected){
        pLineEdit->setText(strSelectedText);
    }
    QString str=text;
    str+="";

}

运行效果图:

image.png

本文地址:http://financialos.cn/?id=257
免责声明:本文为原创文章,版权归 jinesc 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?