Qt控件-QListWidget

Qt控件-QListWidgetQListWidget去掉选中虚线框虚线框如下所示,选中某项之后,文字包围一个虚线框,修改QSS,添加outline约束即可,QListView{/*border:1pxsolid#636363;*/border:0px;selection-background-color:#4D4D4D;sele…

大家好,又见面了,我是你们的朋友全栈君。

QListWidget去掉选中虚线框

虚线框如下所示,选中某项之后,文字包围一个虚线框,
这里写图片描述
修改QSS,添加outline约束即可,

QListView { 
   
        /*border: 1px solid #636363;*/
        border: 0px;
        selection-background-color: #4D4D4D;
        selection-color: #F0F0F0;
        background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #4D4D4D, stop:1 #292929);
        outline:0px;
}

QListWidget添加自定义窗体

继续学习博客Qt浅谈之三十五仿QQ设置面板功能,博主的界面长这样,
这里写图片描述
原文是这样设计的:上面的导航切换选项卡使用QTabWidget,左侧导航使用QListWidget,右侧的显示区域使用QScrollArea控件;主要使用垂直滚动条的valueChanged事件和QListWidget的itemClicked事件;通过调用QWidget的visibleRegion().isEmpty() 判断QScrollArea中滑动过的区域,通过垂直滚动条的setSliderPosition方法设置QScrollArea的新的区域。
在功能区,我这里称之为面板容器,原文博主选择用QScrollArea作为容器,我这里打算采用QListWidget来实现这个容器,
Console Assist QListWidget
(录屏软件超级录屏,然后用迅雷看看转换成gif格式)
先看一下自定义窗口设置,主要使用setItemWidget函数,QSS里把边框设成0px,另外hover和selected的状态需要保持一致,否则鼠标滑过的状态不一样。

    /*QListWidgetItem**/ pLwiTcpClientContainer = new QListWidgetItem();
    //pLwiTcpClientContainer->setSizeHint(QSize(400, 400));
    pLwContainer->addItem(pLwiTcpClientContainer);
    pLwContainer->setItemWidget(pLwiTcpClientContainer, pWgtTcpClientPannel);
    /*QListWidgetItem**/ pLwiTcpServerContainer = new QListWidgetItem();
    //pLwiTcpServerContainer->setSizeHint(QSize(400, 400));
    pLwContainer->addItem(pLwiTcpServerContainer);
    pLwContainer->setItemWidget(pLwiTcpServerContainer, pWgtTcpServerPannel);
    /*QListWidgetItem**/ pLwiUdpClientContainer = new QListWidgetItem();
    //pLwiUdpClientContainer->setSizeHint(QSize(400, 400));
    pLwContainer->addItem(pLwiUdpClientContainer);
    pLwContainer->setItemWidget(pLwiUdpClientContainer, pWgtUdpClientPannel);
    if (index < pLwContainer->count())
    { 
   
        pLwContainer->setCurrentRow(index);
    }
    connect(pLwContainer, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(OnLwContainerItemClicked(QListWidgetItem*)));
    connect(pLwContainer->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(OnLwContainerVsbValueChanged(int)));

让一个item独占窗口,通过mainwindows的resizeEvent实现,

void MainWindow::resizeEvent(QResizeEvent *event)
{ 
   
    int x, y;
    x = this->width() - pLwLeftPannel->width() - 10;
    y = this->height() - pWgtTitle->height();
    pLwiTcpClientContainer->setSizeHint(QSize(x, y));
    pLwiTcpServerContainer->setSizeHint(QSize(x, y));
    pLwiUdpClientContainer->setSizeHint(QSize(x, y));
    QMainWindow::resizeEvent(event);
}

左侧列表和容器联动,通过valueChanged信号实现,这里value取值是离散的,打印了才知道,所以这里的进度条拖动的效果是卡顿的,不像原文博主那样流畅。

void MainWindow::OnLwContainerVsbValueChanged(int value)
{ 
   
    Q_UNUSED(value);
    if (value < pLwLeftPannel->count())
    { 
   
        pLwLeftPannel->setCurrentRow(value);
    }
    else
    { 
   
        qDebug() << "OnLwContainerVsbValueChanged value overflow" << value;
    }
}

自定义窗体无需设置大小,通过在外部是同item的setSizeHint来实现,

QePartitionItem::QePartitionItem(QWidget *parent) : QWidget(parent)
{ 
   
    QGridLayout* pGLyt = new QGridLayout();
    QLabel* pLabName = new QLabel(tr("Name: "));
    pLabNameVal = new QLabel("waiting...");
    QLabel* pLabFs = new QLabel(tr("Filesystem: "));
    pLabFsVal = new QLabel("waiting...");
    QLabel* pLabCap = new QLabel(tr("Capacity: "));
    pLabCapVal = new QLabel("waiting...");
    QLabel* pLabResCap = new QLabel(tr("Resdual Capacity: "));
    pLabResCapVal = new QLabel("waiting...");
    pGLyt->addWidget(pLabName, 0, 0);
    pGLyt->addWidget(pLabNameVal, 0, 1, 1, 1, Qt::AlignCenter);
    pGLyt->addWidget(pLabFs, 1, 0);
    pGLyt->addWidget(pLabFsVal, 1, 1, 1, 1, Qt::AlignCenter);
    pGLyt->addWidget(pLabCap, 2, 0);
    pGLyt->addWidget(pLabCapVal, 2, 1, 1, 1, Qt::AlignCenter);
    pGLyt->addWidget(pLabResCap, 3, 0);
    pGLyt->addWidget(pLabResCapVal, 3, 1, 1, 1, Qt::AlignCenter);
    this->setLayout(pGLyt);
    //this->setFixedHeight(160);
}

QePartitionItem* pi = new QePartitionItem();
QListWidgetItem* item = new QListWidgetItem();
item->setSizeHint(QSize(240, 160));
pLwPartition->addItem(item);
pLwPartition->setItemWidget(item, pi);

这样qss才可以正常渲染item,如下所示,不设置sizehint,当窗口大小超过item默认大小(30pix左右),qss仅渲染默认部分。
158

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136387.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • magic_quote

    magic_quote

    2021年8月17日
    79
  • 一、Linux下的SVN服务器搭建

    一、Linux下的SVN服务器搭建这里自己做个总结。环境:contos7,百度云服务下载svn服务器,必须是联网情况下。yum-yinstallsubversion查看下载后的信息,安装位置及详细信息。rpm-qlsubversion3.创建版本库目录,可以再chenjy目录上放置多个项目,不必为每个项目创建一个版本库。下面是我的版本库mkdir/opt/svn/svnrepos/ch…

    2022年7月19日
    16
  • 【单调队列】数据结构之单调队列详解

    【单调队列】数据结构之单调队列详解单调队列1.初步认识单调队列是一个数据结构,并不是STL里面的内容。单调队列为何说单调,因为是队列中的元素始终保持着单增或者单减的特性。(注意始终保持这四个字)简单的sort排序就可以让一个序列有序了,为何又多此一举多出来个单调队列实现类似的功能呢?其实单调队列不只是做到了排序,还可以实现一个功能:在每次加入或者删除元素时都保持序列里的元素有序,即队首元素始终是最小值或者最大值,这个功能非常重要,单调队列我们就是使用的这个功能。举个例子:我们依次加入5个元素,分别为5,8,2,4,1那么我们假

    2022年6月25日
    20
  • wing是什么_acwing算法基础

    wing是什么_acwing算法基础原题链接设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。输入格式第一行为一个整数N,表示 N×N 的方格图。接下来的每行有三个整数,第一个为行号数,第二个为列号数,第三个为在该行、该列上所放的数。行和列编号从

    2022年8月8日
    5
  • 廖雪峰老师的python教程中的几个学习笔记的备份

    廖雪峰老师的python教程中的几个学习笔记的备份

    2022年3月4日
    41
  • idea2019激活码(破解版激活)

    idea2019激活码(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    118

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号