给界面添加滚动条(QScrollArea的用法)——Qt

前言

之前不知道为什么我没怎么直接操作过滚动条,一般都是表格、列表什么的自带的,当超过控件长度或高度,就会自动出现,而我要做的就只是设置下滚动条的样式就可以了。

而现在项目需求:我需要在QWidget上添加滚动条,我用QtDesigner在界面上放了QScrollArea,它会直接连带出一个叫scrollAreaWidgetContents的QWidget,我原以为这个比较智能(当scrollAreaWidgetContents上的控件位置超出区域就会出现滚动条),后来是我想多了。

说明和代码

我做了一个demo:按按钮,按顺序从上到下依次增加标签,当超过界面时,自动显示滚动条。就这么很简单的效果,还是有些小点值得注意的。

用空间布局的

用布局的比较简单,直接往布局里加控件就可以:我在QWidget里面放了个按钮然后直接垂直布局了。但是出来的效果并不是想要的,我觉得一般也不会用这个方法,但是还是记录下来吧。

void MainWindow::addItem2(QString name, QString content)
{
    QString color=QString("<font color=#999999>%1</font><font color=#333333>%2</font>").arg(name).arg(content);
    QLabel*lab=new QLabel(ui->scrollAreaWidgetContents_2);
    lab->setText(color);
    ui->verticalLayout->addWidget(lab);
}

void MainWindow::on_pushButton_2_clicked()
{
    QString name=QString("名字%1:").arg(m_iLabNum2);
    QString content=QString("内容%1").arg(m_iLabNum2);
    addItem2(name,content);
    m_iLabNum2++;
}

效果图 

用绝对位置的

用绝对位置的就比较麻烦了,每添加一个标签都要计算它的位置,当标签所在的位置超出QWidget scrollAreaWidgetContents控件大小部分,则需重新设置QWidget的大小。我定义了成员变量m_iLabNum来计数,方便计算标签的位置,并在后面有10px
的留白显得好看些。

注意:这个重设大小,必须设置最小大小,不然没效果;还有就是设置标签可视,不知为啥会是隐藏状态。


void MainWindow::on_pushButton_clicked()
{
    QString name=QString("名字%1:").arg(m_iLabNum);
    QString content=QString("内容%1").arg(m_iLabNum);
    addItem(name,content);
}

void MainWindow::addItem(QString name, QString content)
{
    QString color=QString("<font color=#999999>%1</font><font color=#333333>%2</font>").arg(name).arg(content);
    QLabel*lab=new QLabel(ui->scrollAreaWidgetContents);
    lab->setText(color);
    lab->setGeometry(QRect(20,20+m_iLabNum*22,100,15));
    lab->setVisible(true);

   //标签大小+标签个数*间隔+初始y值
    if((20+m_iLabNum*22+15)>(ui->scrollAreaWidgetContents->height()-10))
    {
        int width=ui->scrollAreaWidgetContents->width();
        int height=ui->scrollAreaWidgetContents->height();
        ui->scrollAreaWidgetContents->setMinimumSize(width,height+22);
        qDebug()<<ui->scrollAreaWidgetContents->height();
    }


    m_iLabNum++;
}

效果图是这样的:

 

结束语

感觉自己好失败,最近还是停留在基础的东西上面,我要加油了,不能停留在原地。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值