QT之控件叠加显示

2021/5/26更新

  1. 新建一个窗体应用,添加一个Label,栅格布局。
  2. 在构造函数中添加以下代码段。
    QLabel *top = new QLabel;
    top->setStyleSheet("background-color:rgb(255,0,0);max-height: 30px;");
    top->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);


    QLabel *bottom = new QLabel;
    bottom->setStyleSheet("background-color:rgb(0,0,255);max-height: 30px;");
    bottom->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    QLabel *center_label = new QLabel;
    center_label->setText("HHFSIFHIFHFHH\nHDHSHDUHFUF\nHFDHUFHUFH\nJFJFIJDFIF\n");
    center_label->setAlignment(Qt::AlignCenter | Qt::AlignHCenter);
    center_label->setStyleSheet("background-color:rgb(0,255,0);");
    center_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);



    QLabel *left_Label = new QLabel;
    left_Label->setStyleSheet("background-color:rgb(255,255,0);max-width:30;");
    left_Label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    QLabel *right_Label = new QLabel;
    right_Label->setStyleSheet("background-color:rgb(0,255,255);max-width:30;");
    right_Label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    QVBoxLayout *v_Layout = new QVBoxLayout;
    v_Layout->addStretch();
    v_Layout->setMargin(0);
    v_Layout->addWidget(top,1);
    v_Layout->addWidget(center_label,5);
    v_Layout->addWidget(bottom,1);

    QHBoxLayout *h_Layout = new QHBoxLayout;
    h_Layout->setMargin(0);
    h_Layout->addStretch();
    h_Layout->addWidget(left_Label,1);
    h_Layout->addLayout(v_Layout,5);
    h_Layout->addWidget(right_Label,1);

    QGridLayout *g_Layout = new QGridLayout(ui->label);
    g_Layout->setMargin(0);
    g_Layout->addLayout(h_Layout,0,0);

3. 效果如下:

以下是原回答:

在项目中经常碰到这种情况,比如UI上的同一个区域既要显示图片又要显示文字时,但是一个label只能显示其中一个,这个时候就需要两个label叠加显示了,比如下面一个显示图片,上面一个显示文字。本文以label叠加显示为例,详细介绍一下控件叠加的方法:

1. 新建一个带ui的工程,在ui上拖上一个QFrame控件,再往QFrame控件中拖放一个QLabel控件,右键设置QFrame控件的布局为水平布局,如图所示:

接着修改布局的属性,如图所示:

 

点击保存,回到工程所在文件路径,右键记事本打开mainwindow.ui文件

找到QFrame,将其手动修改为QLabel

修改前:

修改后:

 

点击保存,打开Qt,会提示你文件已改变,直接 Yes and All 即可,改变后的ui如下,重点看圈住的部分,可以看到已经有了两个Label并且时叠加显示的,修改一下stylesheet让其显示的更直观

修改后:

这样就可以了,其他控件方法类似 

2020.01.17更新

设置顶层Label透明

    ui->frame->setText("error type:red error");
    ui->frame->setAlignment(Qt::AlignBottom|Qt::AlignHCenter);
    ui->label->setText("1");
    ui->label->setAlignment(Qt::AlignCenter|Qt::AlignHCenter);
    ui->label->setStyleSheet("QLabel{font-size:90px;}");
    ui->label->setAttribute(Qt::WA_TranslucentBackground);
    //ui->label->setStyleSheet("background:transparent"); /* 设置顶层label透明,两个效果都可以 */

Qt中,可以使用QWidget来创建视频窗口,并且可以在视频窗口上叠加控件。 首先,我们需要使用QVideoWidget来创建视频窗口,这个类继承自QWidget并且专门用于显示视频。我们可以将其放置在主窗口中的合适位置,并设置其大小和位置。 接下来,我们可以通过使用QMediaPlayer和QMediaPlaylist来加载和播放视频。首先,我们需要创建一个QMediaPlayer对象,并将其与QVideoWidget对象关联起来,这样视频就可以在视频窗口中显示出来。然后,我们可以使用QMediaPlaylist来加载视频文件,并将其添加到播放列表中。最后,我们通过调用QMediaPlayer的play()函数来开始播放视频。 叠加控件的方法是,我们可以创建其他的QWidget控件,如QPushButton、QLabel等,然后将其放置在视频窗口上,并设置其位置和大小。可以使用QWidget的setGeometry()函数来设置控件的位置和大小。另外,我们可以使用QWidget的setStyleSheet()函数来设置控件的样式。 需要注意的是,控件的大小和位置应该相对于视频窗口来设置,这样才能正确地叠加在视频窗口上。另外,如果视频窗口被最大化或调整大小,叠加控件也应该跟随调整大小,并且相对于视频窗口进行适当的缩放和调整。 总结起来,要实现叠加控件Qt的视频窗口上,我们可以使用QVideoWidget创建视频窗口,使用QMediaPlayer和QMediaPlaylist加载和播放视频,然后创建其他QWidget控件并将其叠加在视频窗口上。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值