关于Qt软件中,Ui的使用

2022/05/26 实例 共 2028 字,约 6 分钟

Ui的使用,简单记录一下开发路径

1.使一个控件渐变消失

https://blog.csdn.net/luoyayun361/article/details/77921311

2.遗留问题记录

先进行静态效果的开发,暂时先将动效放到一边,包括

1.可视化广播的标题 左侧 的杠杆,暂时先搁置,回头有时间研究一下动画效果类型,同那个上方蒙版一起渐入渐出的效果一起做了到时候

2.可视化广播的关闭按钮,点了之后不要提示框

3.师生对讲的时候,人的左下角的框有一个标注的姓名的小框框,这个框要跟随着cam label而动

3.遇到的bug和解决方案:

1.首先是之前遇到的那个,就是窗体明明设置了framelesshint,可是第一次点击就可以拖动大小这个问题,后续找到了解决方案,就是设置centralwidget大小不可改变为fixed模式即可

2.就是title栏点击close,明明发送了关闭信号,可是那个信号却没有在主窗体中显现?原因是主窗体中的Close()函数不是槽函数,需要将声明移动到槽函数位置。

3.有些按钮或者背景自带阴影?这样会导致文字对不齐或者背景一个很大的灰色框框,该怎么办?

按钮:通过在样式表中加入padding-bottom: 8px

背景:通过在构造函数中加入setAttribute(Qt::WA_TranslucentBackground);字段来使窗体背景透明,注意是在frameless的前提下

详情可以看下面这个网站,有关于Qt样式表中的CSS属性:

qt中css的属性

4.发送了信号,但是却没有触发?检查你的槽函数是不是定义在slots:下,如果不是,则触发不了,这点需要注意

4.关于lishWidget

这个算是我 比较头疼的一个问题,还好周五这天一个下午大概也弄得差不多了

就是它给我的ui上面是这样的

image

然后吧,这个控件明显它的这个每个元素都是一个自定义的listWidgetitem,而不是它自带的那个,而且它自带的这个item也没法做很多效果,所以这个listwidgetitem得我们自己慢慢来写。

那么我们该怎么写?

其实就是相当于是写一个widget,然后将其套进listWidget分离化出来的这个item中去。当然你为了定制化当然是可以直接单独写一个widget类出来,但是为了效率我们直接用代码生成一个widget就可以了。

生成的过程暂且不表,拿一个博客看看就行了QListWidget实现较复杂的列表-仿音乐歌曲列表 这个博客是我觉得讲得比较好的。

但是它这个代码有个致命错误,在我们输入一列之后的item莫名其妙的会缩小,变得很小,但是可以看到格式是对的,这是怎么一回事呢。可以参考文档setItemWidget设置自定义窗口注意事项,原来是我们没有修改我们获取到的listwidgetitem的大小,它就根据listwidget对整个窗体的比例缩放了,不过没关系我们设置一下就可以了。

itemwidget是我们写好了的widget实例

  QListWidgetItem *temp = new QListWidgetItem(ui.listWidget);
  QSize size = temp->sizeHint();
  temp->setSizeHint(QSize(size.width(), 56));
  ui.listWidget->setItemWidget(temp,itemWidget);

那现在这个情况,我们该如何遍历这个itemwiget呢?这样就没有像默认的item那样给定的接口检查控件状态,那该怎么做呢?

其实上面那个博客写的挺清楚的了,这里发下代码

在按钮声明处声明了当前按钮和槽函数之间的关联connect(chooseBtn,SIGNAL(clicked(bool)),this,SLOT(change_chooseBtn()));

槽函数:

  void Music_List::change_chooseBtn(){
  
  QToolButton*Btn=qobject_cast<QToolButton*>(sender());//新建一个object关于QToolButton的对象
  
  for(inti=0;i<ui->listWidget->count();i++)

      {

         if(Btn->parentWidget()==ui->listWidget->itemWidget(ui->listWidget->item(i)))//获得指向当前选中的item

         {


              //行为

         }
        }

就是说,我们遍历每一个ui->listWidget->item(i),然后锁定其itemwidget,如果这个控件的父窗口和这个窗口相同,则执行行为

也就是说:item(i) –> itemWidget(item(i)) –> Btn->parentWidget()

qss常用样式:qss常用标签

文档信息

Search

    Table of Contents