• 嵌入式 QT多界面切换


    目录

    1.  添加界面类实现

       1.1 添加第二个界面的类

    1.2 添加第2个界面的头文件和槽函数 

    2. 工程管理实现


    在Qt中,多界面切换是指在一个应用程序中使用多个不同的界面,并在它们之间进行切换。这种切换可以是用户触发的,例如点击按钮或选择菜单项,也可以是应用程序自动执行的,例如根据特定条件自动显示不同的界面。

      Qt提供了QStackedWidget类,它是一个容器部件,可以用于存放多个界面,每个界面都是一个QWidget或其子类。通过在QStackedWidget中添加多个界面,可以在需要的时候显示特定的界面,从而实现界面切换的效果。

      在界面切换过程中,可以使用各种Qt提供的信号和槽机制来处理用户输入和应用程序逻辑。通过连接按钮的点击信号或菜单项的选择信号到相应的槽函数,可以在用户触发事件时执行相应的界面切换操作。

      总之,Qt多界面切换是指在一个Qt应用程序中使用多个界面,并通过用户操作或应用程序逻辑来切换显示不同的界面。

    1.  添加界面类实现

       1.1 添加第二个界面的类

    1.2 添加第2个界面的头文件和槽函数 

    1. #include "twoform.h"
    2. void ontForm::on_gotoTwoBtn_clicked()
    3. {
    4. //创建第 2 个界面
    5. //方式一:每点击一次都创建一个第 2 界面
    6. //twoForm *twoform = new twoForm ;
    7. // twoform->show();
    8. //方式二:多次点击也只创建一个第 2 界面--全局变量指针
    9. //twoform = new twoForm ; //放在构造函数,放在此也会创建多个
    10. twoform->show();//twoform 全局变量指针
    11. //方式三:多次点击也只创建一个第 2 界面--全局变量
    12. //tf.show();
    13. this->hide();//隐藏第一个窗体
    14. }
    从第二个页面返回第一个页面,由于第 2 )步中让第一个窗体只是隐藏,所以不能再次创建第一个窗体, 应该发送一个信号给第一个窗体,让它显示。
    窗体2定义信号:
    1. class twoForm : public QWidget
    2. {
    3. Q_OBJECT
    4. public:
    5. explicit twoForm(QWidget *parent = 0);
    6. ~twoForm();
    7. signals:
    8. void twoFormSendSignal(QString);//定义一个信号
    9. }

    窗口2发送信号:

    1. void twoForm::doProcessTwoFormBtnToOneForm(bool)
    2. {
    3. clinckCount++;
    4. //发送信号,通知第一个窗体
    5. emit twoFormSendSignal(QString::number(clinckCount));
    6. this->hide();
    7. }

    窗体1接收信号:

    1. //在第一个窗体的构造函数中添加绑定
    2. twoform = new twoForm ;
    3. connect(twoform,SIGNAL(twoFormSendSignal(QString)),this,SLOT(doProcessTwoForm
    4. Resquest(QString)));
    5. void ontForm::doProcessTwoFormResquest(QString str)
    6. {
    7. qDebug() << str <
    8. this->show();
    9. }

    2. 工程管理实现

    实现功能:

    点击返回;

     

    弹出界面属性设置:

    实例程序:

    widget.cpp

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. #include
    4. Widget::Widget(QWidget *parent) :
    5. QWidget(parent),
    6. ui(new Ui::Widget)
    7. {
    8. ui->setupUi(this);
    9. }
    10. Widget::~Widget()
    11. {
    12. delete ui;
    13. }
    14. void Widget::resizeEvent(QResizeEvent *event)
    15. {
    16. setBackgroundImage(":/image/backgroup.jpg");
    17. }
    18. void Widget::setBackgroundImage(QString Image)
    19. {
    20. //Qpixmap 是图片类,scaled 是缩放成为本窗口的大小
    21. QPixmap pixmap = QPixmap(Image).scaled(this->size());
    22. //QPalette 是调色板,palette 是指向背景的调色板
    23. QPalette palette(this->palette());
    24. //brush 是设置画刷,画刷上的颜色来自 Image
    25. palette.setBrush(QPalette::Background,QBrush(pixmap));
    26. //刷到背景上
    27. this->setPalette(palette);
    28. }
    29. void Widget::on_ledBtn_clicked()
    30. {
    31. UiHwControl *uiHwControl = new UiHwControl();//注意,这里不能加 this
    32. int x,y,w,h;
    33. QRect rect = this->geometry(); //获取当前坐标和尺寸信息
    34. x=rect.x();
    35. y=rect.y()+ui->staWidget->height();
    36. w=rect.width();
    37. h=rect.height()-ui->staWidget->height();
    38. uiHwControl->setGeometry(x,y,w,h);
    39. uiHwControl->show();
    40. connect(ui->backBtn,SIGNAL(clicked()),uiHwControl,SLOT(deleteLater()));
    41. }

     uihwcontrol.cpp

    1. #include "uihwcontrol.h"
    2. #include "ui_uihwcontrol.h"
    3. UiHwControl::UiHwControl(QWidget *parent) :
    4. QWidget(parent),
    5. ui(new Ui::UiHwControl)
    6. {
    7. ui->setupUi(this);
    8. this->setWindowFlag(Qt::FramelessWindowHint); //不显示标题栏
    9. }
    10. UiHwControl::~UiHwControl()
    11. {
    12. delete ui;
    13. }

  • 相关阅读:
    使用 zeromq与cppzmq 程序退出遇到的坑
    AcrelEMS能效管理平台为高层小区用电安全保驾护航
    分享VR眼镜加密播放器OEM方案
    【Tomcat目录详解】关于Tomcat你还需要了解的详细内容
    【Edabit 算法 ★☆☆☆☆☆】Power Calculator
    计算机操作系统-第九天
    springboot+vue球员数据统计分析系统java
    Excel - VBA实例: 遍历若干cell的值
    安装kubesphere3.3
    【改论文有感】给英语论文写作小白的有用提示!
  • 原文地址:https://blog.csdn.net/Lushengshi/article/details/130819156