C++ Qt学习笔记 2020-11-27(2)(listwidget设置行高,qss让选中行变色,去掉选中行虚线框,listwidget事件实现页面切换,listwidget自带信号)

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、通过qsslistwidget选中行变色:

结合之前的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()
//当列表部件中进行了选择操作后触发,无论选中项是否改变。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值