Qt学习:QLabel的用法及其程序示例

主要成员函数:

1.void setText(QString); //设置label框内的文本.
2.void hide(); //隐藏label框.
3.void setBuddy(QWidget*); //把另一个部件设为label框的伙伴,方便快捷使用.
4.void clear(); //清空label框内所有内容.
5.void setPixmap(QPixmap(QString)); //设置图片.
6.void setMovie(QMovie*); //设置电影.
7.void setScaledContents(bool); //设置是否按比例填充满整个label框(非常重要)
8.void setToolTip(QString); //设置信息提示,鼠标放在label框上面会自动跳出文字.
9.void setToolTipDuration(int); //设置信息提示的持续时间,单位是毫秒.
10.void setAlignment(Qt::Alignment); //设置label框的对齐格式.
11.void setStyleSheet(QString); //设置label框的样式.


根据上面的QLabel的用法,下面有个关于QLabel的程序代码示例:
下面是程序运行后的情况:
这里写图片描述

这里写图片描述


首先进行通过Qt设计师进行布局:
这里写图片描述

以下是”c.cpp内的代码:”代码中包含注释,方便理解.

#include "c.h"

c::c(QWidget *parent)
    : QMainWindow(parent)
{
    //应用Qt设计师
    ui.setupUi(this);
    //修改标题.
    this->setWindowTitle(QString::fromLocal8Bit("QLabel的程序实例:"));
    //给QStringList填充进去图片.
    initPictureList();
    //给QMovie对象申请一块空间.
    movie = new QMovie;
    //给两个QLabel对象设置新的文本.
    ui.movieLabel->setText(QString::fromLocal8Bit("未显示电影"));
    ui.pictureLabel->setText(QString::fromLocal8Bit("未显示图片"));

    //设置两个label框的内容位于中间.
    ui.movieLabel->setAlignment(Qt::AlignCenter | Qt::AlignHCenter);
    ui.pictureLabel->setAlignment(Qt::AlignCenter | Qt::AlignHCenter);

    //初始的时候上一张按钮时无法点击的,因为没有上一张.
    ui.previousPictureButton->setEnabled(false);

    //给movieLabel设置提示框,当鼠标放在label上就会出现文字提示.
    ui.movieLabel->setToolTip(QString::fromLocal8Bit("电影真好看")); 
    //设置文字提示的持续时间为5000毫秒,也就是5秒后自动消失.
    ui.movieLabel->setToolTipDuration(1000);

    //设置两个label框自动填充.
    ui.movieLabel->setScaledContents(true);
    ui.pictureLabel->setScaledContents(true);


    //把printLineEdit设为printLabel的伙伴,这样的话你按alt+R就会让光标位于行编辑框内.注意:设置label名字的时候要&R.
    ui.printLabel->setBuddy(ui.printLineEdit);

    //连接信号与槽.
    connect(ui.startButton, SIGNAL(clicked()), this, SLOT(startMovieLabelSlot()));
    connect(ui.continueButton, SIGNAL(clicked()), this, SLOT(continueMovieLabelSlot()));
    connect(ui.previousPictureButton, SIGNAL(clicked()), this, SLOT(showPreviousPictureSlot()));
    connect(ui.nextPictureButton, SIGNAL(clicked()), this, SLOT(showNextPictureSlot()));
}

c::~c()
{

}
//点击开始按钮的槽函数.
void c::startMovieLabelSlot()
{
    //设置要播放的电影的路径.注意你要把gif文件放到对应的exe程序下.
    movie->setFileName("Movie/0.gif");
    //movieLabel应用movie.
    ui.movieLabel->setMovie(movie);
    //开始播放
    movie->start();
}
//点击暂停/继续按钮的槽函数.
void c::continueMovieLabelSlot()
{
    //判断当前电影的状态.
    if (movie->state() == QMovie::Running)
    {
        movie->setPaused(true);
        ui.continueButton->setText(QString::fromLocal8Bit("继续"));
    }
    else if (movie->state() == QMovie::Paused)
    {
        movie->setPaused(false);
        ui.continueButton->setText(QString::fromLocal8Bit("暂停"));
    }
}
void c::initPictureList()
{
    //把所有照片的路径都放到QStringList里去.
    for (int i = 0; i < 10; ++i)
    {
        QString path = "Pixmap/" + QString::number(i) + ".jpg";
        pictureList.push_back(path);
    }
}
//点击上一张按钮的槽函数.
void c::showPreviousPictureSlot()
{
    --pictureNumber;
    ui.pictureLabel->setPixmap(QPixmap(pictureList[pictureNumber]));
    if (pictureNumber == 0)
    {
        ui.previousPictureButton->setEnabled(false);
    }
    ui.nextPictureButton->setEnabled(true);
}
//点击下一张按钮的槽函数.
void c::showNextPictureSlot()
{
    if (ui.pictureLabel->pixmap() != 0)
        ++pictureNumber;
    ui.pictureLabel->setPixmap(QPixmap(pictureList[pictureNumber]));
    if (pictureNumber == 9)
    {
        ui.nextPictureButton->setEnabled(false);
    }
    if (pictureNumber != 0)
        ui.previousPictureButton->setEnabled(true);
}

以下是”c.h”内的代码:

#ifndef C_H
#define C_H

#include <QtWidgets/QMainWindow>
#include "ui_c.h"
#include <QMessageBox>
#include <QLabel>
#include <QPushButton>
#include <QMovie>
#include <QPixmap>
#include <QString>

class c : public QMainWindow
{
    Q_OBJECT

public:
    c(QWidget *parent = 0);
    ~c();
private slots:
    void startMovieLabelSlot();
    void continueMovieLabelSlot();
    void showPreviousPictureSlot();
    void showNextPictureSlot();

private:
    void initPictureList();
    Ui::cClass ui;
    QMovie *movie;
    QStringList pictureList;
    int pictureNumber = 0;
};

#endif // C_H

最后是”main.cpp内的代码:”

#include "c.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    c w;
    w.show();
    return a.exec();
}

关于QMovie类的操作可以去查阅Qt的官方文档进行学习,作一些扩展!

  • 11
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
osg::Terrain是OpenSceneGraph中的一个,用于生成和渲染地形。osg::Terrain的使用需要分为以下几个步骤: 1. 创建高度图 osg::Terrain需要高度图来生成地形,可以使用osg::HeightField来创建高度图。例如: ```cpp osg::ref_ptr<osg::HeightField> heightField = new osg::HeightField; // 设置高度图参数 ... ``` 2. 创建osgTerrain::TerrainTile对象 osgTerrain::TerrainTile是osg::Terrain的核心,用于存储地形数据和渲染地形。可以使用以下代码创建osgTerrain::TerrainTile对象: ```cpp osg::ref_ptr<osgTerrain::TerrainTile> terrainTile = new osgTerrain::TerrainTile; terrainTile->setTerrainState(new osgTerrain::Terrain); terrainTile->getTerrainState()->setHeightField(heightField); ``` 其中,setTerrainState()函数设置了osgTerrain::Terrain对象,该对象用于存储地形的各种属性,setHeightField()函数将前面创建的高度图设置给osgTerrain::Terrain对象。 3. 设置纹理 osg::Terrain支持纹理贴图,可以使用osg::Texture2D创建纹理,并将其设置给osgTerrain::Terrain对象。例如: ```cpp osg::ref_ptr<osg::Image> image = osgDB::readImageFile("texture.png"); osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D; texture->setImage(image); osgTerrain::Locator* locator = new osgTerrain::Locator; // 定位器 terrainTile->getTerrainState()->setLocator(locator); terrainTile->getTerrainState()->setTextureState(new osgTerrain::Texture); terrainTile->getTerrainState()->getTextureState()->setTexture(texture); ``` 这里使用osgDB::readImageFile()函数读取纹理图片,并使用osg::Texture2D创建纹理。需要注意的是,osgTerrain::Terrain对象需要一个定位器(osgTerrain::Locator)来将纹理贴在正确的位置,因此需要创建一个定位器并将其设置给osgTerrain::Terrain对象。 4. 设置细节层次 osg::Terrain支持多级细节层次,可以在远处渲染出粗略的地形,在近处渲染出更加详细的地形。可以使用osgTerrain::GeometryTechnique设置细节层次参数。例如: ```cpp osg::ref_ptr<osgTerrain::GeometryTechnique> geometryTechnique = new osgTerrain::GeometryTechnique; geometryTechnique->setEnable(true); geometryTechnique->setMinLevel(0); geometryTechnique->setMaxLevel(5); geometryTechnique->setSampleRatio(0.5f); terrainTile->getTerrainState()->setTechnique(geometryTechnique); ``` 其中,setEnable()函数设置是否启用细节层次,setMinLevel()和setMaxLevel()函数设置最小和最大细节层次,setSampleRatio()函数设置采样率。 5. 将osgTerrain::TerrainTile对象添加到场景中 最后,将创建的osgTerrain::TerrainTile对象添加到场景中即可。例如: ```cpp osg::ref_ptr<osg::Group> root = new osg::Group; root->addChild(terrainTile); ``` 这样,osg::Terrain就被成功地添加到了场景中。需要注意的是,osg::Terrain的使用较为复杂,需要详细了解各种参数和使用方法才能发挥其优势。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值