实现多窗口
给按键增加图标
动图展示
结果演示: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