嵌入式-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
相关推荐
anew___8 小时前
蜂鸣器播放音乐——让 Arduino 唱出旋律
c++·stm32·单片机·嵌入式硬件·c
一技安身8 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
奔跑的架构师9 小时前
[A-50]ARMv9/v8-DVFS系统架构
linux·arm开发·架构·系统架构·arm
stolentime9 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
迷途呀9 小时前
CI/CD 自动化部署实践:让代码提交后自动上线
linux·运维·nginx·ci/cd·自动化
赴生-10 小时前
Liunx 操作系统 进程概念(上)
linux
binqian10 小时前
【linux】OpenSSH升级文档
linux·运维·网络
吴声子夜歌10 小时前
Shell编程——if条件语句
linux·运维·shell
tdtsmt10 小时前
穿戴硬件量产工艺实录:天地通电子智能手表主板 SMT 贴片案
c++
Dawn-bit11 小时前
Linux 运维基础扩展:跳板机、堡垒机与物理服务器全流程
linux·运维·服务器·云计算·运维开发