嵌入式-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
相关推荐
ac.char3 分钟前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾3 分钟前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
不会写代码的ys9 分钟前
【类与对象】--对象之舞,类之华章,共绘C++之美
c++
兵哥工控11 分钟前
MFC工控项目实例三十二模拟量校正值添加修改删除
c++·mfc
长弓聊编程21 分钟前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
cherub.29 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
暮色_年华43 分钟前
Modern Effective C++item 9:优先考虑别名声明而非typedef
c++
重生之我是数学王子1 小时前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
梅见十柒1 小时前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
Koi慢热1 小时前
路由基础(全)
linux·网络·网络协议·安全