嵌入式-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
相关推荐
watermelonoops1 小时前
Deepin和Windows传文件(Xftp,WinSCP)
linux·ssh·deepin·winscp·xftp
疯狂飙车的蜗牛2 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
远游客07134 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<4 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟4 小时前
centos-stream9系统安装docker
linux·docker·centos
唐诺4 小时前
几种广泛使用的 C++ 编译器
c++·编译器
超爱吃士力架4 小时前
邀请逻辑
java·linux·后端
mahuifa5 小时前
混合开发环境---使用编程AI辅助开发Qt
人工智能·vscode·qt·qtcreator·编程ai
冷眼看人间恩怨5 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
红龙创客5 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++