当前位置:   article > 正文

QT QStackedWidget 控件 使用详解

qstackedwidget

       本文详细的介绍了QStackedWidget控件的各种操作,例如:新建界面页面切换添加页面addWidgetcountcurrentIndex currentWidgetindexOfinsertWidgetremoveWidgetwidgetsetCurrentIndex 槽函数setCurrentWidget 槽函数、currentChanged 信号、widgetRemoved 信号、 样式表等操作。
本系列QT全面详解文章目前共有十八篇,本系列文章较为详细的讲述了QT控件的基础操作和使用,也谢谢大家的关注、点赞、收藏。

 本文作者原创,转载请附上文章出处与本文链接。

QT QStackedWidget 控件 使用详解目录

1 新建界面

2 页面切换

2.1 插入第三页

 2.2 代码实现

3 添加页面

3.1 新建界面

3.2 代码实现

4 所有函数

4.1 addWidget

 4.2 count

4.3 currentIndex 

4.4 currentWidget

4.5  indexOf

 4.6 insertWidget

4.7 removeWidget

4.8 widget

5 槽函数

5.1 setCurrentIndex

5.2 setCurrentWidget

6 信号槽

6.1 currentChanged

6.2 widgetRemoved

 7 .h

8 .cpp

9 样式表

10 其它文章 :


1 新建界面

2 页面切换

2.1 插入第三页

 2.2 代码实现

  1. // connect(ui->pushButton, &QPushButton::clicked, [=]() {
  2. // ui->stackedWidget->setCurrentIndex(1);
  3. // });
  4. // connect(ui->pushButton_2, &QPushButton::clicked, [=]() {
  5. // ui->stackedWidget->setCurrentIndex(2);
  6. // });
  7. // connect(ui->pushButton_3, &QPushButton::clicked, [=]() {
  8. // ui->stackedWidget->setCurrentIndex(0);
  9. // });
  10. }
  11. MainWindow::~MainWindow()
  12. {
  13. delete ui;
  14. }
  15. void MainWindow::switchPage(){
  16. QPushButton *button = qobject_cast<QPushButton*>(sender());
  17. if(button==ui->pushButton)
  18. ui->stackedWidget->setCurrentIndex(0);
  19. else if(button==ui->pushButton_2)
  20. ui->stackedWidget->setCurrentIndex(1);
  21. else if(button==ui->pushButton_3)
  22. ui->stackedWidget->setCurrentIndex(2);
  23. int i = 0;
  24. ui->stackedWidget->widget(i);
  25. }
  26. void MainWindow::on_pushButton_clicked()
  27. {
  28. switchPage();
  29. }
  30. void MainWindow::on_pushButton_2_clicked()
  31. {
  32. switchPage();
  33. }
  34. void MainWindow::on_pushButton_3_clicked()
  35. {
  36. switchPage();
  37. }

3 添加页面

3.1 新建界面

        新建一个QT设计师界面        newWidgetDialog

3.2 代码实现

  1. #include "newwidgetdialog.h"
  2. newWidgetDialog *widgetDialog;
  3. widgetDialog = new newWidgetDialog();
  4. qDebug() << "页面索引: " << ui->stackedWidget->addWidget(widgetDialog);
  5. ui->stackedWidget->setCurrentIndex(3);

4 所有函数

4.1 addWidget

        添加页面,并返回页面对应的索引

qDebug() << "页面索引: " << ui->stackedWidget->addWidget(widgetDialog);

 4.2 count

        获取页面数量

qDebug() << "页面索引总数: " << ui->stackedWidget->count();

4.3 currentIndex  

        获取当前页面的索引

qDebug() << "获取当前页面的索引: " << ui->stackedWidget->currentIndex();

4.4 currentWidget

        获取当前页面

qDebug() << "获取当前页面: " << ui->stackedWidget->currentWidget();

4.5  indexOf

        获取QWidget页面所对应的索引

qDebug() << "获取QWidget页面所对应的索引: " << ui->stackedWidget->indexOf(ui->page);

 4.6 insertWidget

        在索引index位置添加页面

  1. /* 在当前索引位置添加页面 (添加完后原有页面向后挪动) */
  2. ui->stackedWidget->insertWidget(0,widgetDialog);

4.7 removeWidget

        移除QWidget页面,并没有被删除,只是从布局中移动,从而被隐藏。

  1. ui->stackedWidget->removeWidget(ui->page);
  2. /* 在当前索引位置添加页面 (添加完后原有页面向后挪动) */
  3. ui->stackedWidget->insertWidget(0,ui->page);

4.8 widget

        返回索引值为index的组件

  1. qDebug() << ui->stackedWidget->widget(0);
  2. qDebug() << ui->stackedWidget->widget(100);

5 槽函数

.        槽函数有两个,分为 setCurrentWidget 、 setCurrentIndex 一个是根据索引来显示页面,一个是根据窗口部件来显示页面

5.1 setCurrentIndex

        索引设置当前显示页

ui->stackedWidget->setCurrentIndex(2);

5.2 setCurrentWidget

        窗口部件设置当前显示页

ui->stackedWidget->setCurrentWidget(ui->page_2);

6 信号槽

6.1 currentChanged

        当前页面发生变化时候发射,index为新的索引值

6.2 widgetRemoved

        页面被移除时候发射,index为页面对应的索引值

  1. private slots:
  2. void currentChanged(int index);
  3. void widgetRemoved(int index);
  4. connect(ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(currentChanged(int )));
  5. connect(ui->stackedWidget, SIGNAL(widgetRemoved(int)), SLOT(widgetRemoved(int )));
  6. void MainWindow::currentChanged(int index)
  7. {
  8. qDebug() << "页面发生变化: " << index;
  9. }
  10. void MainWindow::widgetRemoved(int index)
  11. {
  12. qDebug() << "页面被移除: " << index;
  13. }

 7 .h

  1. /******************************************************************************
  2. * Copyright CSDN 双子座断点 Co., Ltd.
  3. * Copyright www.dreambeging.vip Co., Ltd.
  4. * All right reserved. See COPYRIGHT for detailed Information.
  5. *
  6. * @file mainwindow.h
  7. * @project stackedWidget_Test
  8. * @version V 1.0
  9. *
  10. * @author 断点<dream.2017@qq.com>
  11. * @date 2022/12/14
  12. * @history
  13. *****************************************************************************/
  14. #ifndef MAINWINDOW_H
  15. #define MAINWINDOW_H
  16. #include <QMainWindow>
  17. #include <QDebug>
  18. #include "newwidgetdialog.h"
  19. #pragma execution_character_set("utf-8")
  20. QT_BEGIN_NAMESPACE
  21. namespace Ui { class MainWindow; }
  22. QT_END_NAMESPACE
  23. class MainWindow : public QMainWindow
  24. {
  25. Q_OBJECT
  26. public:
  27. MainWindow(QWidget *parent = nullptr);
  28. ~MainWindow();
  29. private slots:
  30. void on_pushButton_clicked();
  31. void on_pushButton_2_clicked();
  32. void on_pushButton_3_clicked();
  33. void on_pushButton_4_clicked();
  34. void currentChanged(int index);
  35. void widgetRemoved(int index);
  36. private:
  37. Ui::MainWindow *ui;
  38. void switchPage();
  39. newWidgetDialog *widgetDialog;
  40. QString Title;
  41. QString Version;
  42. QString BlogText;
  43. };
  44. #endif // MAINWINDOW_H

8 .cpp

  1. /******************************************************************************
  2. * Copyright CSDN 双子座断点 Co., Ltd.
  3. * Copyright www.dreambeging.vip Co., Ltd.
  4. * All right reserved. See COPYRIGHT for detailed Information.
  5. *
  6. * @file mainwindow.cpp
  7. * @project stackedWidget_Test
  8. * @version V 1.0
  9. *
  10. * @author 断点<dream.2017@qq.com>
  11. * @date 2022/12/14
  12. * @history
  13. *****************************************************************************/
  14. #include "mainwindow.h"
  15. #include "ui_mainwindow.h"
  16. MainWindow::MainWindow(QWidget *parent)
  17. : QMainWindow(parent)
  18. , ui(new Ui::MainWindow)
  19. {
  20. ui->setupUi(this);
  21. ui->stackedWidget->setStyleSheet("#stackedWidget{border:2px solid rgb(45,226,42);"
  22. "border-top-left-radius: 5px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 5px;}");
  23. Title = "QT QStackedWidget CSDN 双子座断点 ";
  24. Version = "V 1.0 ";
  25. BlogText = "https://blog.csdn.net/qq_37529913?type=lately/";
  26. setWindowTitle(Title + Version + BlogText);
  27. widgetDialog = new newWidgetDialog();
  28. qDebug() << "页面索引: " << ui->stackedWidget->addWidget(widgetDialog);
  29. connect(ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(currentChanged(int )));
  30. connect(ui->stackedWidget, SIGNAL(widgetRemoved(int)), SLOT(widgetRemoved(int )));
  31. // connect(ui->pushButton, &QPushButton::clicked, [=]() {
  32. // ui->stackedWidget->setCurrentIndex(1);
  33. // });
  34. // connect(ui->pushButton_2, &QPushButton::clicked, [=]() {
  35. // ui->stackedWidget->setCurrentIndex(2);
  36. // });
  37. // connect(ui->pushButton_3, &QPushButton::clicked, [=]() {
  38. // ui->stackedWidget->setCurrentIndex(0);
  39. // });
  40. }
  41. MainWindow::~MainWindow()
  42. {
  43. delete ui;
  44. }
  45. void MainWindow::currentChanged(int index)
  46. {
  47. qDebug() << "页面发生变化: " << index;
  48. }
  49. void MainWindow::widgetRemoved(int index)
  50. {
  51. qDebug() << "页面被移除: " << index;
  52. }
  53. void MainWindow::switchPage(){
  54. QPushButton *button = qobject_cast<QPushButton*>(sender());
  55. if(button==ui->pushButton)
  56. ui->stackedWidget->setCurrentIndex(0);
  57. else if(button==ui->pushButton_2)
  58. ui->stackedWidget->setCurrentIndex(1);
  59. else if(button==ui->pushButton_3)
  60. ui->stackedWidget->setCurrentIndex(2);
  61. int i = 0;
  62. ui->stackedWidget->widget(i);
  63. }
  64. void MainWindow::on_pushButton_clicked()
  65. {
  66. switchPage();
  67. }
  68. void MainWindow::on_pushButton_2_clicked()
  69. {
  70. switchPage();
  71. }
  72. void MainWindow::on_pushButton_3_clicked()
  73. {
  74. switchPage();
  75. }
  76. void MainWindow::on_pushButton_4_clicked()
  77. {
  78. //ui->stackedWidget->setCurrentIndex(3);
  79. //qDebug() << "页面索引总数: " << ui->stackedWidget->count();
  80. // qDebug() << "获取当前页面的索引: " << ui->stackedWidget->currentIndex();
  81. //qDebug() << "获取当前页面: " << ui->stackedWidget->currentWidget();
  82. //qDebug() << "获取QWidget页面所对应的索引: " << ui->stackedWidget->indexOf(ui->page);
  83. /* 在当前索引位置添加页面 (添加完后原有页面向后挪动) */
  84. //ui->stackedWidget->insertWidget(0,widgetDialog);
  85. ui->stackedWidget->removeWidget(ui->page_3);
  86. // qDebug() << ui->stackedWidget->widget(0);
  87. // qDebug() << ui->stackedWidget->widget(100);
  88. // ui->stackedWidget->insertWidget(0,ui->page);
  89. //qDebug() << "页面索引总数: " << ui->stackedWidget->stackingMode();
  90. //qDebug() << "获取可见索引: " << ui->stackedWidget->currentWidget();
  91. //ui->stackedWidget->setCurrentIndex(2);
  92. //ui->stackedWidget->setCurrentWidget(ui->page_2);
  93. }

9 样式表

QT 控件重绘_双子座断点的博客-CSDN博客_qt 重绘

QT 样式表_双子座断点的博客-CSDN博客

QT 样式表属性完整版_双子座断点的博客-CSDN博客

Qt 系统字体_双子座断点的博客-CSDN博客


10 其它文章 :

QT TextEdit控件_双子座断点的博客-CSDN博客_qt textedit

QT QComboBox使用详解_双子座断点的博客-CSDN博客

QT QtableView操作详解_双子座断点的博客-CSDN博客_qtableview增删改查

Qt QStandardItemModel(1.超级详细用法)_双子座断点的博客-CSDN博客_qstandardmodel

Qt QStandardItemModel(2.超级详细函数)_双子座断点的博客-CSDN博客_qstandarditemmodel点击事件

QT QRadioButton使用详解_双子座断点的博客-CSDN博客_qt radiobutton

QT QLineEdit使用详解_双子座断点的博客-CSDN博客_qt qlineedit

Qt QMessageBox使用详解_双子座断点的博客-CSDN博客_qt message

QChart折线图、饼状图、条形图、曲线图_双子座断点的博客-CSDN博客_qchart样式

QChart属性详解_双子座断点的博客-CSDN博客_setanimationoptions

QCharts QValueAxis使用_双子座断点的博客-CSDN博客_qvalueaxis

Qt 5 等待提示框(开源 动态图)_双子座断点的博客-CSDN博客_qt 等待对话框

QtDataVisualization 数据3D可视化_双子座断点的博客-CSDN博客_qtdatavisualizatio

QT QSpinBox 整数计数器控件 使用详解_双子座断点的博客-CSDN博客


QT QDoubleSpinBox 浮点计数器控件(使用详解)_双子座断点的博客-CSDN博客_qdoublespinbox信号槽


QT QSlider、QHorizontalSlider、QVerticalSlider 控件 使用详解_双子座断点的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/91268
推荐阅读