QT ② Button、LineEdit、Label组件

一、部件

  • QT资源回收

    QT的所有QObject派生类的资源,都由父对象自动回收。

  • 1、QPushButton

#include "widget.h"
#include "ui_widget.h"

#include <QPalette>


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->setFixedSize(640,480);    //设置固定大小

    this->setWindowTitle("MyWindow");
    // : 表示资源文件   / 表示路径前缀   favicon.ico 资源文件名
    this->setWindowIcon(QIcon(":/miumiu.ico"));

    //设置背景图片
    QPalette pal = this->palette();     //调色板
    //设置画刷   scaled函数(缩放)
    pal.setBrush(QPalette::Window , QBrush(QPixmap(":/BG.png").scaled(width(),height())));
    //设置调色板
    this->setPalette(pal);

    /*
     * 构造一个按钮,指定父对象 this,作用是让该按钮出现在当前窗口界面
     *  QPushButton *btn1 = new QPushButton(this);
     *  QPushButton *btn1 = new QPushButton();
     *  btn1->setParent(this);
     *  btn1->setText("按钮");    //设置按钮文本
     *  设置按钮的尺寸
     *  btn1->setFixedSize(120,120);
     *  设置按钮图标
     *  btn1->setIcon(QIcon(QPixmap(":/favicon.ico").scaled(btn1->width(),btn1->height())));
     */
    QPushButton *btn2 = new QPushButton(QIcon(":/miumiu.ico"),"按钮2",this);
    btn2->setFixedSize(60,60);
    btn2->setStyleSheet("QPushButton"
                        "{"
                        "color: blue"
                        "border-radius: 30px;"
                        "background-color: white;"
                        "}"
                        "QPushButton:hover"
                        "{"
                        "border-radius: 30px;"
                        "background-color: green;"
                        "color: red;"
                        "}");
    //移动按钮到某个位置
    btn2->move(QPoint(260,210));
    connect(btn2 , &QPushButton::clicked , this , [&](){
        qDebug() << "bt2";
    });
}

Widget::~Widget()
{
    delete ui;
}

  • 2、QLineEdit

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //lineEdit 显示属性  不输出
    ui->lineEdit->setEchoMode(QLineEdit::NoEcho);
    //显示属性:密码模式
    ui->lineEdit_2->setEchoMode(QLineEdit::Password);
    //密码模式,不可修改
    ui->lineEdit_3->setEchoMode(QLineEdit::PasswordEchoOnEdit);
    ui->lineEdit_4->setPlaceholderText("testtest");
    /**
     * 1、信号带参数目的: 为了向槽函数传递数据
     * 2、槽函数如果需要 信号传递的数据,就必须要设计与信号相同的形参来接收
     * 3、槽函数的参数个数必须 小于或等于信号的参数个数
     * 4、textChanged 参数 ———— const QString &
     */
    //文本改变触发
    connect(ui->lineEdit , &QLineEdit::textChanged , this , [&](const QString &s){
        ui->label->setText(s);
    });

    //选中触发
    connect(ui->lineEdit_2 , &QLineEdit::selectionChanged , this , [&](){
        //selectedText()  获取选中的文本数据
        ui->label_2->setText(ui->lineEdit_2->selectedText());
    });
    //编辑完成触发
    connect(ui->lineEdit_3 , &QLineEdit::editingFinished , this , [&](){
        ui->label_3->setText( ui->lineEdit_3->text());
    });
}

Widget::~Widget()
{
    delete ui;
}

  • 3、QLabel

#include "widget.h"
#include "ui_widget.h"



Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setFixedSize(640,480);
    setWindowTitle("Label");

    QLabel *label = new QLabel(this);
    label->setFixedSize(100,40);
    label->setText("hello world");
    label->setStyleSheet("background-color:green;");
    label->setAlignment(Qt::AlignCenter);   //设置居中对齐


    QLabel *label2 = new QLabel(this);
    QLabel *label3 = new QLabel(this);

    label2->setFixedSize(320,240);
    label3->setFixedSize(320,240);

    label2->move(0,label->height());
    label3->move(label2->width(),label->height());

    //label2->setStyleSheet("background-color: red;");

    label3->setScaledContents(true);    //设置内容显示自适应
    label3->setPixmap(QPixmap(":/BG.png"));

    mv = new QMovie(this);
    mv->setFileName(":/mv.gif");    //设置mv路径
    label2->setScaledContents(true);    //自适应
    label2->setMovie(mv);   //设置动画
    mv->start();    //播放动画
}

Widget::~Widget()
{
    delete ui;
}

二、部件属性/信号

  • 1、QPushButton常用信号

    • 信号:
      • clicked():点击信号,按钮被点击时触发。
      • pressed(): 按下操作,按钮被按下时触发。
      • released(): 松开按钮触发
  • 2、QLineEdit属性+信号

    • 属性:
      • echoMode:NoEcho 不输出、Normal 正常输出、Password 密码输出 、PasswordEchoOnEdit 密码输出且不可修改
      • PlaceholderText:输入框提示
    • 信号:
      • editingFinished():编辑结束触发,回车、失去焦点(tab切换组件或者鼠标点击其他组件等)时触发。
      • returnPressed():也是编辑结束触发,仅限于回车或换行等,失去焦点不触发
      • selectionChanged():选中改变的时候触发,当用户拖动鼠标,选取文本的时候触发
      • textChanged(const QString &text):当文本被改变的时候触发(通过程序修改文本内容也会触发)
      • textEdited(const QString &text):当文本被改变触发,只限于用户输入改变文本的时候触发
//lineEdit 显示属性  不输出
ui->lineEdit->setEchoMode(QLineEdit::NoEcho);
//显示属性:密码模式
ui->lineEdit_2->setEchoMode(QLineEdit::Password);
//密码模式,不可修改
ui->lineEdit_3->setEchoMode(QLineEdit::PasswordEchoOnEdit);
//输入提示
ui->lineEdit_4->setPlaceholderText("testtest");

image-20250910175342630alt

  • 3、QLabel属性

    • 属性:
      • pixmap:画布属性,可以用来显示图片或movie等。
      • scaledContents:自适应显示(画布图片等根据Label的尺寸自动适应显示)

三、添加资源文件(本文使用Qt 17)

1、右键项目——>添加新文件

alt

2、选择Qt Resource File

alt

3、选择要加载的资源路径位置和设置文件名

alt

4、设置前缀、添加文件

alt

5、使用资源文件

//现有的资源路径前缀为":/"  冒号表示为资源文件  斜杠是我们的前缀
label3->setPixmap(QPixmap(":/BG.png"));