目录
有个坑:
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;
}
其他的不贴了。。。