嵌入式-QT学习-小练习

  1. 实现多窗口

  2. 给按键增加图标

  3. 动图展示
    结果演示:

Mul_Con
main.cpp

cpp 复制代码
#include "widget.h"

#include <QApplication>

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

一、第一个窗口展示

ui界面布局:未运行前

运行后的界面展示

二、第二个窗口界面

ui界面设计

运行界面


第一个窗口实现代码

widget.cpp文件

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include <QIcon>
#include <QDebug>
#include <QPixmap>
#include <QMovie>

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


    this->setWindowTitle("KOKO");
    //构造第二个窗口
    w2 = new Dialog;
    //直接将窗口的show方法(本来就是一个槽函数),绑定到信号
    connect(w2, &Dialog::backWindow, this, &Widget::show);

    this->setFixedSize(this->size());//固定当前窗口大小

    //给button设置一个图标
    QIcon icon("/home/ubuntu/Pictures/avocado.jpg");//路径
    ui->pushButton->setIcon(icon);
    ui->pushButton->setIconSize(ui->pushButton->size() / 2);

    //设置快捷键
    ui->pushButton->setShortcut(QKeySequence(""));

    //控件
    ui->label->setText("hello");
    //设置lable显示图片
    QPixmap *map = new QPixmap("/home/ubuntu/Pictures/avocado.jpg");
   //图片大小
    qDebug()<<"图片大小=" << map->size();
    ui->label->setPixmap(*map);

    //设置图片缩放适应label
    ui->label->setScaledContents(true);

    //label适应图片
   // ui->label->resize(map->size());
    //ui->label->move(0,0);
    //this->resize(ui->label->size());

    //设置label在其他控件后面
    ui->label->lower();//放置在最后面的层
    ui->pushButton->raise();//放置在最前面的层

    //label显示一个数
    ui->label_2->setNum(125.125);

    //label显示动图GIF
    QMovie *movie = new QMovie("/home/ubuntu/Pictures/koko.gif");
    ui->label->setMovie(movie);

    //播放设置
    movie->start();//开始播放
    movie->setSpeed(100);//播放速度
    qDebug() << "move size=" << movie->scaledSize();

    //视频/图片适应label
    ui->label->setScaledContents(true);
}

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


void Widget::ShowThisWind()
{
    this->show();
}

void Widget::on_pushButton_clicked()
{
    qDebug("点击");
    //按钮按下状态
    if(ui->pushButton->isChecked() == true)
    {
        qDebug("按下");
    }
    else {
        qDebug("弹起");
    }

    //显示第二个窗口
    w2->show();//模态方式显示
    //w2->exec();//非模态显示
    this->hide();
}

widget.h文件

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H
#include "dialog.h"
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_clicked();

public slots:
    void ShowThisWind();

private:
    Ui::Widget *ui;
    Dialog *w2;
};
#endif // WIDGET_H

第二个窗口代码实现

dialog.cpp

cpp 复制代码
#include "dialog.h"
#include "ui_dialog.h"
#include <QMovie>
#include <QDebug>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    this->setWindowTitle("罗小黑");

    this->setFixedSize(this->size());//固定窗口大小

    //设置label在其他控件后面
    ui->label->lower();//放置在最后面的层
    ui->pushButton->raise();//放置在最前面的层

    //label显示动图GIF
    QMovie *movie = new QMovie("/home/ubuntu/Pictures/lxh.gif");
    ui->label->setMovie(movie);

    //播放设置
    movie->start();//开始播放
    movie->setSpeed(100);//播放速度
    qDebug() << "move size=" << movie->scaledSize();

    //视频/图片适应label
    ui->label->setScaledContents(true);

}

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

void Dialog::on_pushButton_clicked()
{
    //关闭
     this->close();//关闭窗口
}

void Dialog::on_pushButton_2_clicked()
{
    this->hide();
    //返回上一个窗口
    emit backWindow();
}

dialog.h文件

cpp 复制代码
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = nullptr);
    ~Dialog();

signals:
    void backWindow();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H
相关推荐
ShineWinsu3 小时前
对于C++:IO流状态的详细解析
c++·面试·io·cin·io流状态·goodbit·failbit
Lzg_na4 小时前
constexpr的优势
c++
三言老师5 小时前
秘诀-如何远程SSN访问家里的八台电脑(frp 实操方案)
linux·运维·ssh
王维同学6 小时前
进程模块枚举、映像身份与线程启动地址关联
c++·windows·安全
hold?fish:palm6 小时前
24 回文链表
数据结构·c++·链表
举手6 小时前
Dispatcher模块剖析
linux·c++
依然鸣7 小时前
PTA团体程序设计天梯赛L1真题讲解L1-077-080
开发语言·c++·算法·深度优先·pat考试·图论
allforgood7 小时前
运行容器
linux
byxdaz8 小时前
QT中服务使用
开发语言·qt
Light_It8 小时前
Linux 内核参数 pci-stub.ids=
linux·kernel