Qt开发——QStackedWidget嵌入式窗体切换

目录

有个坑:

效果:

mainwindow.cpp

mainwindow.h

form1.h

form1.cpp


有个坑:

QStackedWidget::setCurrentWidget: widget 0xffffffff not contained in stack
QStackedWidget::setCurrentWidget: widget 0xffffffff not contained in stack

不能用setCurrentWidget来在槽函数中设置窗体!

只能用setCurrentIndex!

效果:

 

 

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowTitle(QStringLiteral("多窗口切换"));
    setWindowIcon(QIcon("icon.png"));
    ui->action_1->setIcon(QIcon("open.png"));
    ui->action_2->setIcon(QIcon("open2.png"));
    ui->toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//设置文字在图标下

    Form1 *firstPageWidget = new Form1(this);
    Form2 *secondPageWidget = new Form2(this);

    //添加界面
    ui->stackedWidget->addWidget(firstPageWidget);
    ui->stackedWidget->addWidget(secondPageWidget);
    //设置当前主界面
    ui->stackedWidget->setCurrentWidget(firstPageWidget);
    IndexPage = ui->stackedWidget->currentIndex();

}

MainWindow::~MainWindow()
{
    delete ui;
}

//嵌入式窗口2
void MainWindow::on_action_2_triggered()
{
    IndexPage = ui->stackedWidget->currentIndex();
    qDebug()<<QStringLiteral("2")<<IndexPage<<endl;
    ui->stackedWidget->setCurrentIndex(2);
}
//嵌入式窗口1
void MainWindow::on_action_1_triggered()
{
    IndexPage = ui->stackedWidget->currentIndex();
    qDebug()<<QStringLiteral("1")<<IndexPage<<endl;
    ui->stackedWidget->setCurrentIndex(3);
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>
#include <QStackedWidget>
#include "form1.h"
#include "form2.h"
#include <QDebug>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_action_2_triggered();

    void on_action_1_triggered();

private:
    Form1 *firstPageWidget;
    Form2 *secondPageWidget;
    int IndexPage;

    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

form1.h

#ifndef FORM1_H
#define FORM1_H

#include <QWidget>
#include <QPixmap>
#include <QDebug>

namespace Ui {
class Form1;
}

class Form1 : public QWidget
{
    Q_OBJECT

public:
    explicit Form1(QWidget *parent = nullptr);
    ~Form1();

private:
    Ui::Form1 *ui;
};

#endif // FORM1_H

form1.cpp

#include "form1.h"
#include "ui_form1.h"

Form1::Form1(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form1)
{
    ui->setupUi(this);
    QPixmap Pix = QPixmap("dali2.png");
    QSize PixSize = ui->label->size();
    ui->label->setScaledContents(true);
    qDebug()<<"size1:"<<PixSize<<endl;
    Pix.scaled(PixSize,Qt::KeepAspectRatioByExpanding);
    ui->label->setPixmap(Pix);
}

Form1::~Form1()
{
    delete ui;
}

其他的不贴了。。。

发布了287 篇原创文章 · 获赞 297 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/104212996