嵌入式-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
相关推荐
vip4512 分钟前
Linux 经典面试八股文
linux
大霞上仙5 分钟前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
凌云行者33 分钟前
OpenGL入门005——使用Shader类管理着色器
c++·cmake·opengl
凌云行者36 分钟前
OpenGL入门006——着色器在纹理混合中的应用
c++·cmake·opengl
spygg1 小时前
Qt低版本多网卡组播bug
qt·组播·多网卡组播·qt5.7.0
~yY…s<#>1 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
孤客网络科技工作室1 小时前
VMware 虚拟机使用教程及 Kali Linux 安装指南
linux·虚拟机·kali linux
码农客栈1 小时前
qt QWebSocketServer详解
qt
可均可可2 小时前
C++之OpenCV入门到提高004:Mat 对象的使用
c++·opencv·mat·imread·imwrite
颇有几分姿色2 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器