zoukankan      html  css  js  c++  java
  • 新手:Qt之QLabel类的应用

    在Qt中,我们不可避免的会用到QLabel类。而Qlabel的强大功能作为程序员的你有多少了解?

    下面,跟着我一起在来学习一下吧!

    1、添加文本

    Qlabel类添加文本有两种方式,一种是直接在实现时添加,如:

    1 QLabel *label = new QLabel(QString("Holle,世界"), this);
    2     //QLabel *label = new QLabel(tr("Holle,世界"), this);

    一种是在实现后添加,如:

    1 int a = 1+1;
    2 QLabel *label = new QLabel( this);
    3 label ->setText(tr("Holle,世界"));
    4 //label ->setText(tr("1+1=%1").arg(a));
    5 //label ->setText(QString::number(a));
    6 //label ->setText(QString::number(a,'f',2));//保留两位,如果保留一位就把2改为1

    2、设置尺寸,位置

    设置尺寸也有多种,常用的固定尺寸(FixedSize),最小尺寸(MinimumSize),最大尺寸(MaximumSize),代码如下:

    1 //setMinimumHeight(30);        //最小行高
    2 //setMinimumWidth(30);        //最小列宽
    3 setMinimumSize(370, 150);    //设置最小尺寸
    1 //setMaximumHeight(30);    //最大行高
    2 //setMaximumWidth(30);        //最大列宽
    3 setMaximumSize(370, 150);    //设置最大尺寸
    1 setFixedSize(365,240);        //设置固定尺寸
    2 //setFixedWidth(30);        //固定列宽
    3 //setFixedHeight(30);        //固定行高
    设置固定尺寸
    1 int x,y,w,h;
    2 label = new QLabel(this);
    3 label ->setGeometry(x,y,w,h);
    4 //若label的尺寸已经设置,则w,h的值无效。
    设置Geometry

    3、设置布局

    1 QVBoxLayout *layout = new QVBoxLayout(this);
    2 QLabel *label = new QLabel(QString("Holle,世界"), this);
    3 layout->addWidget(label,Qt::AlignCenter);    //居中
    4 //Qt::AlignCenter 中心对齐
    5 //Qt::AlignLeft 左对齐
    6 //Qt::AlignRight 右对齐
    7 //QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。 
    8 //QVBoxLayout:垂直布局,在垂直方向上排列控件,即:上下排列。

    4、添加常规可视图片

    1 labelImg = new QLabel;
    2 Image1.load(":/img/head.jpg");
    3 labelImg->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    4 labelImg->setPixmap(QPixmap::fromImage(Image1));
    //.h文件
    5 //#include <QImage> 6 //private: 7 //QImage Image1;

    5、添加圆形可视图片,即QQ头像类

    两种方式,一种直接将图片修改为圆形的透明图片(*.png),一种则是使用蒙版形式,使用图片处理工具创建一个圆形透明图片(*.png),然后Qt操作代码如下:

    //.cpp文件
        labelImg = new QLabel(this);
        //设置蒙版
        labelImg ->setMask(pixmapBack.mask());
        labelImg ->setStyleSheet("border-image:url(qrc:/img/mask_30x30.png)");//mask_30x30.png,是我做的圆形透明图片,已经导入到资源文件
        QPixmap head = QPixmap(":/img/head.jpg").scaled(QSize(labelImg->width(), labelImg->height()), Qt::KeepAspectRatio, Qt::SmoothTransformation);    //head.jpg,是要显示的图片类型大小随意,这里我用的是*.jpg。KeepAspectRatio:保持长宽比例
        labelImg ->setPixmap(head);

    6、实现被点击事件

    标签实现被点击事件有两种方式,一种是自定义一个按钮类标签,一种是采用事件过滤,具体的请看代码。注:这里采用了鼠标事件。

    1).自定义按钮类标签:

     1 //ClickedLabel.h文件
     2 #include <QLabel>
     3 class ClickedLabel : public QLabel
     4 {
     5     Q_OBJECT
     6 public:
     7     ClickedLabel( QWidget* parent = 0);
     8     int IsClicked;
     9     void mousePressEvent(QMouseEvent *e);//添加鼠标响应事件
    10     void mouseReleaseEvent(QMouseEvent *e);//添加鼠标释放事件
    11 signals:
    12     void clicked();//点击信号
    13 
    14 };
    15 //ClickedLabel.cpp文件
    16 ClickedLabel::ClickedLabel(QWidget* parent) : QLabel(parent)
    17 {
    18     setText("作者:夜潇!");  //添加标签默认文本
    19     setAlignment(Qt::AlignCenter);  //设置默认对齐方式:中心对齐(居中)
    20     //设置默认标签风格
    21     //setStyleSheet("ClickedLabel { background-color: rgb(143,122,102); border-radius: 10px; font: bold; color: white; }");
    22     IsClicked = 0;
    23 }
    24 
    25 void ClickedLabel::mousePressEvent ( QMouseEvent * e )
    26 {
    27     IsClicked = 1;
    28 }
    29 
    30 void ClickedLabel::mouseReleaseEvent ( QMouseEvent * e )
    31 {
    32     if(IsClicked)
    33     {
    34         emit clicked();
    35         IsClicked = 0;
    36     }
    37 }
    自定义按钮类标签

    2).事件过滤标签

     1 #include <QDialog>
     2 #include <QLabel>
     3 #include <QEvent>
     4 
     5 class EventFilter : public QDialog
     6 {
     7     Q_OBJECT
     8     
     9 public:
    10     EventFilter(QWidget *parent = 0,Qt::WindowFlags f=0);
    11     ~EventFilter();
    12 public slots:
    13     bool eventFilter(QObject *, QEvent *);
    14 private:
    15     QLabel *label1;
    16 };
    17 //这里有一个默认的*.cpp的头文件,故此我将其省略。
    18 #include <QHBoxLayout>
    19 #include <QMouseEvent>
    20 
    21 EventFilter::EventFilter(QWidget *parent,Qt::WindowFlags f)
    22     : QDialog(parent,f)
    23 {
    24     label1 = new QLabel;
    25     
    26     QHBoxLayout *layout=new QHBoxLayout(this);
    27     layout->addWidget(label1);
    28     label1->installEventFilter(this);
    29 }
    30 bool EventFilter::eventFilter(QObject *watched, QEvent *event)
    31 {
    32     if(watched==label1)
    33     {
    34         if(event->type()==QEvent::MouseButtonPress)
    35         {
    36             QMouseEvent *mouseEvent=(QMouseEvent *)event;
    37             if(mouseEvent->buttons()&Qt::LeftButton)
    38             {
    39                 label1->setText(tr("左键按下"));
    40             }
    41             else if(mouseEvent->buttons()&Qt::MidButton)
    42             {
    43                 label1->setText(tr("中键按下"));
    44             }
    45             else if(mouseEvent->buttons()&Qt::RightButton)
    46             {
    47                 label1->setText(tr("右键按下"));
    48             }
    49         }
    50         if(event->type()==QEvent::MouseButtonRelease)
    51         {
    52             label1->setText(tr("鼠标释放"));
    53         }
    54     }
    55     return QDialog::eventFilter(watched,event);
    56 }
    事件过滤标签

    7、实现超链接

    1 label= new QLabel(tr("<style> a {text-decoration: none} </style><a href = http://haozip.2345.com>2345好压</a>"),this);
    2 //文本无下划线:<style> a {text-decoration: none} </style>,如去掉则有下划线。

    8、修改颜色

    标签颜色有基本两处,一是文本颜色,二是背景颜色。而文本颜色设置两种,一种是用QPalette类,一种是StyleSheet类,代码如下:

    1 label = new QLabel(this);
    2 QPalette palette;
    3 palette.setColor(QPalette::WindowText,Qt::red);
    4 label->setPalette(palette);
    5 //文本颜色:红色
     1 label = new QLabel(this);
     2 label -> setStyleSheet("QLabel { color: rgb(143,122,102);}");
     3 //label -> setStyleSheet("QLabel { color: red;}");
     4 //label -> setStyleSheet("QLabel { "color: #FF0000;";}");
     5 //常见颜色十六进制值
     6 //<font color=red或"#FF0000">红色</font>
     7 //<font color="#dd0000">浅红色</font>
     8 //<font color="#660000">深红色</font>
     9 //<font color="#00dd00">浅绿色</font>
    10 //<font color="#006600">深绿色</font>
    11 //<font color="#0000dd">浅蓝色</font>
    12 //<font color="#000066">深蓝色</font>
    13 //<font color="#dddd00">浅黄色</font>
    14 //<font color="#666600">深黄色</font>
    15 //<font color="#00dddd">浅青色</font>
    16 //<font color="#006666">深青色</font>
    17 //<font color="#dd00dd">浅紫色</font>
    18 //<font color="#660066">深紫色</font>

     设置背景颜色:

    1 label = new QLabel(this);
    2 label ->setStyleSheet("background-color:lightred;");
    3 //颜色值可通用

    9、设置圆角标签,且扩展类。注:此圆角和第5点中的圆不同用。

    1 label = new Qlabel(this);
    2 label -> setStyleSheet("Qlabel{color: white;"
    3                "border-radius: 20px;  border: 2px groove gray;border-style: outset;}"/*此处设置圆角*/
    4                "Qlabel:hover{background-color:lightgreen; color: black;}"
    5                "Qlabel:pressed{background-color:rgb(85, 170, 255);border-style: inset; }");
    6     //注:当radius的值是控件高度或者宽度一半时可化作圆;border:边 hover:点燃 outset:常规 pressed:按下 inset:内嵌

    好了,今天就先到这吧!如果你也有好的代码可以私信或者加以评论。如有疑问,可随时联系QQ:1285015525。

  • 相关阅读:
    【读书笔记】读《JavaScript模式》
    【读书笔记】读《JavaScript模式》
    【读书笔记】读《JavaScript模式》
    【读书笔记】读《JavaScript模式》
    【读书笔记】读《高性能JavaScript》
    【读书笔记】读《编写高质量代码—Web前端开发修炼之道》
    【读书笔记】读《编写高质量代码—Web前端开发修炼之道》
    【读书笔记】读《JavaScript高级程序设计-第2版》
    在Docker容器中运行.Net Core web Api项目
    [转]安装 Silverlight 5/silverlight4 出错的解决方法
  • 原文地址:https://www.cnblogs.com/CLXiao-1029/p/7170541.html
Copyright © 2011-2022 走看看