QT5 Widgets 大小切换问题

Posted

技术标签:

【中文标题】QT5 Widgets 大小切换问题【英文标题】:QT5 Switching between Widgets size problem 【发布时间】:2020-05-14 12:50:51 【问题描述】:

我尝试在 QT5 中的两个不同 Widget 之间切换。 第一个问题是我的第一个窗口在我的第二个窗口的背景中可见。我通过检查“autoFillBackground”来解决这个问题。现在我可以在它们之间切换,但如果我调整它们的大小,它只会调整主要内容的大小。

两个小部件都有一个网格布局。

调整大小问题

我是 QT5 的新手,有没有更好的方法可以在没有这个问题的情况下在 2 个小部件之间进行切换?

我尝试使用wMessages = new Messages();hide(),但返回后我的程序崩溃了。


代码:

主窗口.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include "messages.h"

QT_BEGIN_NAMESPACE
namespace Ui  class MainWindow; 
QT_END_NAMESPACE

class MainWindow : public QMainWindow

    Q_OBJECT

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

private slots:
    void on_btnMessages_clicked();

private:
    Ui::MainWindow *ui;
    Messages *wMessages;
;
#endif // MAINWINDOW_H

主窗口.cpp:

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

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

    ui->setupUi(this);


MainWindow::~MainWindow()

    delete ui;


void MainWindow::on_btnMessages_clicked()

    wMessages = new Messages(this); 
    wMessages->show();

messages.h:

#ifndef MESSAGES_H
#define MESSAGES_H

#include <QWidget>

namespace Ui 
class Messages;


class Messages : public QWidget

    Q_OBJECT

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

    QString NewsGenerator();
private slots:
    void on_bBack_clicked();

    void on_pushButton_clicked();

private:
    Ui::Messages *ui;
;

#endif // MESSAGES_H

messages.cpp:

#include "messages.h"
#include "ui_messages.h"

Messages::Messages(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Messages)

    ui->setupUi(this);


Messages::~Messages()

    delete ui;


void Messages::on_bBack_clicked()

    this->close();
    QWidget *parent = this->parentWidget();
    parent->show();


编辑 1 - 工作主窗口按钮(来自 G.M. 的回答):

void MainWindow::on_btnMessages_clicked()

    wPlaner = new Planer();
    QMainWindow::setCentralWidget(wPlaner);

【问题讨论】:

请编辑您的问题以提供minimal reproducible example。 您错误地使用了QMainWindow。而是使用QMainWindow::setCentralWidget 设置内容。 @G.M.谢谢,主菜单按钮很好用(编辑1),但现在我的后退按钮有问题。如果我尝试相同,问题是继承自 QWidget 而不是 QMainWindow,我必须将其更改为 QMainWindow 吗? 切换是什么意思?交换显示的小部件?你看过 QStackedWidget 吗? @ypnos jea,表示只有一个小部件在前面处于活动状态,例如移动应用程序。不,我只尝试上面的代码,但感谢您的提示,我看这个 【参考方案1】:

更新(基于 cmets):

最好的解决方案是使用QStackedWidget 在视图之间导航。

文档: https://doc.qt.io/qt-5/qstackedwidget.html#details


按钮示例代码:

// return back to first view
void MainWindow::on_btnret_clicked()

    ui->stackedWidget->setCurrentIndex(0);

【讨论】:

以上是关于QT5 Widgets 大小切换问题的主要内容,如果未能解决你的问题,请参考以下文章

从 Qt5Widgets 调用 setFixedSize() 时出现未处理的异常

zqt_helper 轻松开发Qt5 Widgets应用

无法启动此程序,因为计算机中丢失Qt5Widgets.dll.尝试重新安装该程序以解决此问题

打包发布 Qt Quick/Widgets 程序

发布Qt带Widgets程序过程

C++Widgets编程(《Qt Creator快速入门》 第3版 学习笔记 )