1、listwidget
插入数据、设置行高:
(1)使用listitem
对象
参考自:https://blog.csdn.net/sundan308/article/details/8743069
QListWidgetItem * pItem = new QListWidgetItem;
pItem->setSizeHint(QSize(100, 102)); //每次改变Item的高度
pItem->setText(u8"参数项目1");
ui->listWidget->insertItem(1,pItem); //insert插入
ui->listWidget->addItem(u8"参数项目2");
ui->listWidget->addItem(u8"查看相机");
这样挨个设置可以对不同的行区别对待。
(2)qss
设置list
行属性:
ui->listWidget->addItem(u8"参数项目1");
ui->listWidget->addItem(u8"参数项目2");
ui->listWidget->addItem(u8"查看相机");
ui->listWidget->setStyleSheet("QListWidget#listWidget::item{color:white;height:40px;background-color:rgb(53,64,82);border:0px;}");
这样就等于对所有行统一设置。
要注意的是,同一控件的qss
只有最后一个起作用,不要因为设置行的qss
而把listwidget
原来的qss
覆盖,应该把两个写在一起,用引号分隔,如:
ui->listWidget->setStyleSheet("QListWidget#listWidget{background-color:rgb(53,64,82);border:0px;}"
"QListWidget#listWidget::item{color:white;height:40px;background-color:rgb(53,64,82);border:0px;}");
运行结果:
2、通过qss
让listwidget
选中行变色:
结合之前的qss
的使用,让listwidget
选中变色就不需要麻烦的去写事件过滤器了:
ui->listWidget->setStyleSheet(
"QListWidget#listWidget{background-color:rgb(53,64,82);border:0px;}"
"QListWidget#listWidget::item{color:white;height:40px;background-color:rgb(53,64,82);border:0px;}"
"QListWidget#listWidget::item:selected{color:white;height:40px;background-color:rgb(1,164,240);border:0px;}");
//选中则变色事件,由于是在item中,所以选中哪行,哪行就变色
运行结果:
3、qss
去掉选中的虚线框:
再listwidget
中增加属性:(不是在item
中!)
ui->listWidget->setStyleSheet("QListWidget#listWidget{outline:0px;}")
4、currentRowChanged
事件结合stackwidget
实现页面切换:
用起来与之前写的pyqt
中用法一样的。
首先新建一个stackwidget
,以三个切页为例,在listwidget
中也设置三条数据行。
在mainwindow.h
中声明槽函数:
void turn_to_stack_2(int);
在mainwindow.cpp
中绑定槽函数和信号:
//绑定信号和槽函数
//currentRowChanged在listwidget选中行变化时被触发,并会返回当前所在行数
connect(ui->listWidget,SIGNAL(currentRowChanged(int)),this,SLOT(turn_to_stack_2(int)));
//写槽函数功能
//listwidget切页
void MainWindow::turn_to_stack_2(int i)
{
ui->stackedWidget_2->setCurrentIndex(i);
}
运行结果:
这样一个嵌套的分页就完成了!
5、listwidget
自带的信号:
资料来自:https://www.cnblogs.com/LaoYuanPython/p/12570527.html
currentItemChanged(QListWidgetItem current, QListWidgetItem previous)
//当列表部件中的当前项发生变化时发射,带两个参数,分别表示当前选择项和在此之前的选择项。
currentRowChanged(int currentRow)
//当列表部件中的当前项发生变化时发射,带一个参数,currentRow表示当前项行号,如果没有当前项,其值为-1。
currentTextChanged(str currentText)
//当列表部件中的当前项发生变化时发射,带一个参数,currentText为当前项对应文本。
itemActivated(QListWidgetItem item)
//当项激活时发射,项激活是指鼠标单击或双击项,具体依赖于系统配置。项激活还可以是在windows环境下在项上按下回车键,在Mac操作系统下按下Command+O键。
itemChanged(QListWidgetItem item)
//当项的文本发生改变时发射该信号,项文本无论是否真正改变都会发射。
itemClicked(QListWidgetItem item)
//当部件中的项被鼠标单击时发射该信号。
itemDoubleClicked(QListWidgetItem item)
//当部件中的项被鼠标双击时发射该信号。
itemEntered(QListWidgetItem item)
//当部件中的项接收到鼠标光标时发射该信号,发射该信号需设置mouseTracking属性为True,如果未设置该属性,则只有鼠标移动到项时按下按键时才触发。
itemPressed(QListWidgetItem item)
//当鼠标在部件中的项上按下时触发。
itemSelectionChanged()
//当列表部件中进行了选择操作后触发,无论选中项是否改变。