天天看點

Qt實作複選下拉框 C++一、QListWidget+QListWidgetItem二、activate(int)總結

文章目錄

  • 一、QListWidget+QListWidgetItem
  • 二、activate(int)
  • 總結

一、QListWidget+QListWidgetItem

實作QComboBox下拉框複選

ui->role_listWidget = new QListWidget();// 建立ListWidget
    QListWidgetItem* pItem = new QListWidgetItem();// 增加listwidget的item
    
    pItem->setText(); // 設定複選框文本
    pItem->setCheckState(Qt::Unchecked);// 設定複選框狀态為未選中
    ui->role_listWidget->addItem(pItem);// 将item放入widget中
    
    // 在下拉框中顯示加入item
    ui->role_comboBox->setModel(ui->role_listWidget->model());
    ui->role_comboBox->setView(ui->role_listWidget);
    
    // 設定下拉框内容為不可編輯
    ui->role_comboBox->setEditable(true);
    ui->role_comboBox->lineEdit()->setReadOnly(true);
    
    // 設定下拉框點選事件
    connect(ui->role_comboBox, SIGNAL(activated(int)), this, SLOT(activated(int)));
           

二、activate(int)

activated(int)

This signal is sent when the user chooses an item in the combobox. The item’s index is passed. Note that this signal is sent even when the choice is not changed.

翻譯:當使用者選擇QComboBox中的Item時,将會産生一個選中Item序号值的消息信号,不管選項是夠改變都會産生該消息。

使用activate(int)傳回點選下拉框的索引

由于我需要做的有兩個下拉框,需要通過QObject::sender來判斷是哪個下拉框發送的信号來在顯示在框中

QObject *object = QObject::sender();
    QComboBox *current_combox = static_cast<QComboBox *>(object);// 擷取發送信号的QComboBox
    if(!current_combox->objectName().compare(ui->role_comboBox->objectName())){
        ui->role_comboBox->lineEdit()->clear();//清空之前文本顯示的内容
        QListWidgetItem* item = ui->role_listWidget->item(index);
        //更新目前點選對象的選中狀态
        if(item->checkState() == Qt::Unchecked)
        {
            item->setCheckState(Qt::Checked);
        }
        else if(item->checkState() == Qt::Checked)
        {
            item->setCheckState(Qt::Unchecked);
        }
        //循環擷取所有選中狀态的對象顯示文字
        QString text;
        for(int row = 0, rows = ui->role_listWidget->count(); row < rows; ++row)
        {
            QListWidgetItem* item = ui->role_listWidget->item(row);
            if(item->checkState() == Qt::Checked)
            {
                text.append(item->text() + ";");
            }
        }
           

總結

在實作多個複選下拉框時需要通過QObject::sender來判斷是哪個下拉框發送的信号,然後将其顯示在文本框中。

對你有幫助的話,賞個贊把~

繼續閱讀