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选中的虚线框
1、ui->listWidget->setFocusPolicy(Qt::NoFocus); 2、ui->listwidget->setStyleSheet("QListWidget{outline:0px;}");//QSS
listwidget1->setStyleSheet("QListWidget{background:rgb(39,43,47,1);color: rgba(141,141,141,1);border:30px;text-align: right;}"
"QListWidget::item{height:44px;border:0px;padding-top:0px; padding-left:15px;}"//设置行高和文字位置
"QListWidget::Item:hover{border-image: url(:/resource/img/list/preset_select_hover.png);color: rgba(255,255,255,1);}"//悬停
"QListWidget::Item:pressed{border-image: url(:/resource/img/list/preset_select.png);color: rgba(255,255,255,1);}"//按下
"QListWidget::item:selected:!active{border-image: url(:/resource/img/list/preset_select.png);color: rgba(255,255,255,1);}"//按下后当前活动控件不在列表中
"QListWidget::item:selected{border-image: url(:/resource/img/list/preset_select.png);color: rgba(255,255,255,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&)));
手动添加:QT开发之QListWidget控件增加右键菜单功能_金属服务,美好生活,天网改变世界,华帝量子科技。-CSDN博客
5、响应组合键全选
如果是自绘的话,可以参数:QT开发之自绘控件中获取单个键盘按键和组合键_金属服务,美好生活,天网改变世界,华帝量子科技。-CSDN博客
在响应的组合键中添加:
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);
}
}
查询help:
QItemSelectionModel::Select
0x0002
All specified indexes will be selected.
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)
{
//
}
7、设置滚动条
//设置滚动条样式
listwidget1->verticalScrollBar()->setStyleSheet("QScrollBar:vertical"
"{"
"width:18px;"
"background:rgba(0,0,0,100%);"
"margin:0px,0px,0px,0px;"
"padding-top:0px;"//留出9px给上面和下面的箭头
"padding-bottom:0px;"
"padding-left:5px;"
"padding-right:5px;"
"}"
"QScrollBar::handle:vertical"
"{"
"width:8px;"
"background:rgba(39,39,39,90%);"//正常时颜色
" border-radius:4px;"// 滚动条两端变成椭圆
"min-height:20;"
"}"
"QScrollBar::handle:vertical:hover"
"{"
"width:8px;"
"background:rgba(39,39,39,100%);"// 鼠标放到滚动条上的时候,颜色变深
" border-radius:4px;"
"min-height:20;"
"}"
"QScrollBar::add-line:vertical"// 这个应该是设置下箭头的,3.png就是箭头
"{"
"height:9px;width:8px;"
"border-image:url(:/images/a/3.png);"
"subcontrol-position:bottom;"
"}"
"QScrollBar::sub-line:vertical"// 设置上箭头
"{"
"height:9px;width:8px;"
"border-image:url(:/images/a/1.png);"
"subcontrol-position:top;"
"}"
"QScrollBar::add-line:vertical:hover"// 当鼠标放到下箭头上的时候
"{"
"height:9px;width:8px;"
"border-image:url(:/images/a/4.png);"
"subcontrol-position:bottom;"
"}"
"QScrollBar::sub-line:vertical:hover"// 当鼠标放到下箭头上的时候
"{"
"height:9px;width:8px;"
"border-image:url(:/images/a/2.png);"
"subcontrol-position:top;"
"}"
"QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical"// 当滚动条滚动的时候,上面的部分和下面的部分
"{"
"background:rgba(0,0,0,10%);"
"border-radius:4px;"
"}"
);
一些常用函数:
1) QListWidget::QListWidget ( QWidget *parent = 0 ) // 构造一个父对象为parent的ListWidget。
2) void QListWidget::addItem ( const QString & label ) // 添加一个新的项目,在新添加的项目中添加label标签。
3) void QListWidget::addItem ( QListWidgetItem *item ) // 添加项目item。
4) void QListWidget::addItems ( const QStringList & labels ) // 添加一列项目。
5) void QListWidget::clear () [slot] // 清除该ListWidget中的所有项目。
6) QListWidgetItem *QListWidget::currentItem () const //返回当前活动项目。
7) void QListWidget::editItem ( QListWidgetItem *item ) //如果项目item是可编辑的,开始编辑项目item。
8) QList<QListWidgetItem *> QListWidget::findItems( constQString & text, QT::MatchFlags flags ) const //查找匹配字符串text的项目,并返回查找结果。
9) void QListWidget::insertItem ( int row, QListWidgetItem *item ) //在行row处插入项目item。
10) void QListWidget::insertItem ( int row, const QString &label ) //这是一个重载函数,函数功能同9),在行row处插入标签为label的新项目。
11) voidQListWidget::insertItems ( int row, const QStringList & labels ) //在行row处插入一列项目。
12) QListWidgetItem *QListWidget::item ( int row ) const //返回行row处的项目,如果行row处没有项目则返回0。
13) QListWidgetItem*QListWidget::itemAt ( const QPoint & p ) const //返回点p处的项目。
14) QListWidgetItem *QListWidget::itemAt ( int x, int y ) const //返回坐标(x,y)处的项目。
15) QWidget *QListWidget::itemWidget ( QListWidgetItem *item ) const //返回项目item处显示的控件。
16) QListWidgetItem *QListWidget::takeItem ( int row ) // 移除行row处的项目,并返回项目控件。
17) void QListWidget::removeItemWidget ( QListWidgetItem *item ) //删除项目item处的控件。
18) int QListWidget::row ( const QListWidgetItem *item ) const //返回项目item所在的行。
19) QList<QListWidgetItem *> QListWidget::selectedItems ()const //返回所有被选中的项目的控件。
20) void QListWidget::setCurrentItem ( QListWidgetItem *item ) //设置项目item为当前项目。
21) void QListWidget::setItemWidget ( QListWidgetItem *item, QWidget*widget ) //设置控件widget为项目item的显示控件。
22) void QListWidget::setItemWidget ( QListWidgetItem *item, QWidget*widget ) //这是个重载函数,函数功能同23)。
23) voidQListWidget::sortItems ( QT::SortOrder order = QT::AscendingOrder ) //把项目按照order进行排序。
listwidget2->setGridSize(QSize(100, 34));//设置行之间间距