在 Qt 中使用按钮堆叠小部件页面

Posted

技术标签:

【中文标题】在 Qt 中使用按钮堆叠小部件页面【英文标题】:stack widget pages using pushbutton in Qt 【发布时间】:2020-06-16 05:57:51 【问题描述】:

如何使用QPushButtons 浏览QStackWidget 页面? 每当单击按钮时都需要调用哪个方法,以便它打开一个特定的堆栈小部件页面。

感谢和问候,

【问题讨论】:

【参考方案1】:

QStackedWidget 有一个方法.setCurrentIndex(int) 可以用来切换到不同的页面。您可以将该方法与QPushButtonclicked() signal 结合使用,以更改当前堆叠的小部件页面。

例子:

MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow)

    ui->setupUi(this);

    //initially set current page to 0
    ui->stackedWidget->setCurrentIndex(0);

    //suppose we have buttons button1 and button2
    connect(button1, &QPushButton::clicked, this, [=]() 
        //set page to 1
        ui->stackedWidget->setCurrentIndex(1);
    );

    connect(button2, &QPushButton::clicked, this, [=]() 
        //set page to 2
        ui->stackedWidget->setCurrentIndex(2);
    );


您也可以使用普通函数槽代替 lambda 函数:

//mainwindow.h file

class MainWindow
//...
private slots:
  void onButton1Clicked();
  void onButton2Clicked();


//mainwindow.cpp file

MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow)

  //...
    connect(button1, &QPushButton::clicked, this, &MainWindow::onButton1Clicked);
    connect(button2, &QPushButton::clicked, this, &MainWindow::onButton2Clicked);


void MainWindow::onButton1Clicked()

  ui->stackedWidget->setCurrentIndex(1);


void MainWindow::onButton2Clicked()

  ui->stackedWidget->setCurrentIndex(1);

【讨论】:

在 (clicked,this, ) "[=]" 之后是什么? 这是一个 lambda 函数。这就像一个没有名字的函数。这里可以使用普通函数,但需要在MainWindow类中的slots:下声明。 @MdMoslehUddin 查看带有函数槽的更新答案 它说 button1 没有在这个范围内声明。 (我尝试了第二种方法) 是的,您必须使用已设置的变量名称。检查您的 .ui 文件中的变量名称。这只是一个例子。您的变量可能位于ui->

以上是关于在 Qt 中使用按钮堆叠小部件页面的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt Stacked Widget 的特定小部件中更改背景颜色

堆叠的小部件页面

如何关闭在提升的小部件中单击的按钮上的 qt 小部件 ui?

gtkmm:将容器小部件(Box)中的元素堆叠在一起

Flutter 中的索引堆叠。如何在所有其他小部件之上显示容器?

将自定义小部件添加到 QStackedWidget