ui->listWidget->setViewMode(QListView::ListMode); //設置顯示模式為列表模式
//設置列表 QListWidgetItem *item=new QListWidgetItem; item->setSizeHint(QSize(100,35));//行 item->setBackgroundColor(RGB(247,247,247));//正常背景顏色,可以用來設置交叉行變色 ui->listWidget->addItem(item);
設置QListWidget中item的背景色,使用QSS
"QListWidget::Item:hover{background:#E8E8E8;}"//懸浮 "QListWidget::Item:pressed{background:#E8E9ED;}"//按下 "QListWidget::item:selected:!active{background:#E8E9ED;}"//按下后,當前活動控件不在列表中 "QListWidget::item:selected{background:#E8E9ED;}"//按下后鼠標移動到其它位置
去掉item選中的虛線框
ui->listWidget->setFocusPolicy(Qt::NoFocus);
1、響應選中行信號
connect(listwidget1,SIGNAL(currentRowChanged(int)),this,SLOT(listwidget1_Selected(int))); 當切換到選中行時響應 void Core::List_Selected1(int row) { if(row >= 0) { //row要判斷,row為當前選中行號 } }
2、響應單擊信號connect(listwidget1,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(listwidget1_eclicked(QListWidgetItem*)));
每次單擊item都會響應
void Core::kit_listwidget1_eclicked(QListWidgetItem*) { int row = listwidget1->currentRow();//當前點擊行序號 }
3、雙擊item信號
connect(listwidget1,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(listwidget1_eclicked(QListWidgetItem*)));
每次雙擊item都會響應
void Core::kit_listwidget1_eclicked(QListWidgetItem*) { int row = listwidget1->currentRow();//當前點擊行序號 }
4、右鍵菜單
代碼添加:
設置屬性:listwidget3->setContextMenuPolicy( Qt::CustomContextMenu );
槽函數::connect(listwidget3, SIGNAL(customContextMenuRequested(const QPoint&)),
this, SLOT(on_listwidget3_customContextMenuRequested(const QPoint&)))
5、在響應的組合鍵中添加:
//響應組合鍵全選 if ((event->modifiers() == Qt::ControlModifier) and (event->key() == Qt::Key_A) ) { qDebug()<<"ctrl-a"; for(int i = 0;i < this->count(); i++)//項目數 { this->setCurrentRow(i,QItemSelectionModel::Select); } }
6、鼠標移動到Item內的信號
先要設置
列表->setMouseTracking(true);//true表示鼠標不按下移動到item內就發現信號,false表示鼠標至少按下一個按鍵后移動到item內,
connect( 列表, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(slotOnItemEntered(QListWidgetItem*)) ) ; 然后添加槽函數 void slotOnItemEntered(QListWidgetItem*p); //根據設置鼠標移動到itme響應 void slotOnItemEntered(QListWidgetItem*p) { // }
一些常用函數:
QListWidget::QListWidget ( QWidget *parent = 0 ) // 構造一個父對象為parent的ListWidget。 void QListWidget::addItem ( const QString & label ) // 添加一個新的項目,在新添加的項目中添加label標簽。 void QListWidget::addItem ( QListWidgetItem *item ) // 添加項目item。 void QListWidget::addItems ( const QStringList & labels ) // 添加一列項目。 void QListWidget::clear () [slot] // 清除該ListWidget中的所有項目。 QListWidgetItem *QListWidget::currentItem () const //返回當前活動項目。 void QListWidget::editItem ( QListWidgetItem *item ) //如果項目item是可編輯的,開始編輯項目item。 QList QListWidget::findItems( constQString & text, QT::MatchFlags flags ) const //查找匹配字符串text的項目,並返回查找結果。 void QListWidget::insertItem ( int row, QListWidgetItem *item ) //在行row處插入項目item。 void QListWidget::insertItem ( int row, const QString &label ) //這是一個重載函數,函數功能同9),在行row處插入標簽為label的新項目。 void QListWidget::insertItems ( int row, const QStringList & labels ) //在行row處插入一列項目。 QListWidgetItem *QListWidget::item ( int row ) const //返回行row處的項目,如果行row處沒有項目則返回0。 QListWidgetItem*QListWidget::itemAt ( const QPoint & p ) const //返回點p處的項目。 QListWidgetItem *QListWidget::itemAt ( int x, int y ) const //返回坐標(x,y)處的項目。 QWidget *QListWidget::itemWidget ( QListWidgetItem *item ) const //返回項目item處顯示的控件。 QListWidgetItem *QListWidget::takeItem ( int row ) // 移除行row處的項目,並返回項目控件。 void QListWidget::removeItemWidget ( QListWidgetItem *item ) //刪除項目item處的控件。 int QListWidget::row ( const QListWidgetItem *item ) const //返回項目item所在的行。 QList QListWidget::selectedItems ()const //返回所有被選中的項目的控件。 void QListWidget::setCurrentItem ( QListWidgetItem *item ) //設置項目item為當前項目。 void QListWidget::setItemWidget ( QListWidgetItem *item, QWidget*widget ) //設置控件widget為項目item的顯示控件。 void QListWidget::sortItems ( QT::SortOrder order = QT::AscendingOrder ) //把項目按照order進行排序。