一、简介
QListWidget类列表框控件用来加载并显示多个列表项。QListWidgetItem类就是列表项类。一般列表框控件中的列表项有2种加载方式:
- 一种是由用户手动添加的列表项,比如音乐播放器中加载音乐文件的文件列表,每一个音乐文件都是一个列表项。用户可以进行增加、删除、单击以及双击等操作。
- 一种是由程序员事先编写好供用户选择的列表项,比如播放器的视频列表(或餐厅的电子菜单),每一个列表对应一个列表项。用户一般进行单击和双击操作。
二、实现效果——爱奇艺播放器的视频列表
三、源代码
QListWidget *IQY_video_win=new QListWidget();//创建列表控件
//视频图片窗口
QVBoxLayout *right_main_layout7 = new QVBoxLayout;
// IQY_video_win->resize(800, 300);
IQY_video_win->setIconSize(QSize(280,370));
IQY_video_win->setViewMode(QListView::IconMode);//设置显示模式为图标模式
IQY_video_win->setMovement(QListView::Static);
IQY_video_win->setResizeMode(QListView::Adjust);
QString path = QString(QDir::currentPath()+"/image/IQY/bigImg");//图片路径
qDebug()<<path;
QDir dir(path);
QStringList moviefilenames;
moviefilenames << "*.png";
qDebug()<<moviefilenames;
QStringList files = dir.entryList(moviefilenames,QDir::Files|QDir::Readable,QDir::Name);
qDebug()<<files;
for (int i = 0; i < files.size(); ++i)
{
QListWidgetItem *newitem = new QListWidgetItem(QIcon(QPixmap(path+"/"+files.at(i))),files.at(i));
QFileInfo fi = files.at(i);
newitem->setText(fi.baseName());//设置列表项的文本
// newitem->setSizeHint(QSize(200,200));
IQY_video_win->addItem(newitem);//加载列表项到列表框
}
// 屏蔽水平滑动条
IQY_video_win->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
//屏蔽垂直滑动条
IQY_video_win->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// 设置为像素滚动
IQY_video_win->setHorizontalScrollMode(QListWidget::ScrollPerPixel);
// 设置鼠标左键拖动
QScroller::grabGesture(IQY_video_win,QScroller::LeftMouseButtonGesture);
// IQY_video_win->setStyleSheet(R"(QListWidget {outline: none;border:1px solid white;background-color:black})");
IQY_video_win->setStyleSheet("QListWidget{outline: none;border:1px solid black;color:gray; background-color:black}"
"QListWidget::Item{padding-top:20px; padding-bottom:4px; }"
"QListWidget::Item:hover{background:rgb(50,52,57);color:green; }"
"QListWidget::item:selected{background:lightgray; color:redgreen }"
"QListWidget::item:selected:!active{border-width:0px; background:lightgreen; }"
);
IQY_video_win->setSpacing(14);//设置item间隔
IQY_video_win->show();