在Qt中创建一个新窗口,该窗口依赖于父窗口,但出现在父窗口之外。

4
我希望为我的应用程序实现日志功能,并将其放在另一个窗口中。当然,它应该在主窗口关闭时关闭。
主窗口是使用QWidget继承类Window创建的。
当我以同样的方式创建第二个窗口并将"this"作为父级传递到构造函数中时,它不起作用,新窗口中的所有内容都出现在父窗口中。但是,当我不传递任何东西到新窗口的构造函数中时,它不会在父窗口关闭时关闭。

2
你需要正确设置新窗口的窗口标志,以使其即使有父窗口也成为独立窗口。或者,您可以将其设置为无父窗口,并在主窗口关闭时在自己的代码中关闭它。 - hyde
关于对话框呢? - Mohammad Kanan
2个回答

2

尝试创建第二个窗口,该窗口继承自QDialog。

#ifndef FORM_H
#define FORM_H

#include <QDialog>

namespace Ui {
class Form;
}

class Form : public QDialog
{
    Q_OBJECT

public:
    explicit Form(QWidget *parent = 0);
    ~Form();
private slots:

private:
    Ui::Form *ui;
};

#endif // FORM_H

而 MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "form.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(showNewWindow()));
}

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

void MainWindow::showNewWindow()
{
    Form *form;
    form = new Form(this);
    form->setModal(false);
    form->show();
}

1

正如 @hyde 的评论所说,当您创建窗口小部件时,应将 Qt::Window 设置为窗口标志,然后可以给它一个父级,并且它将成为“次要窗口”,并在父级关闭时关闭。从 QDialog 继承是可以的,但会带来您可能不想要/不需要的额外负担;对于这个问题的简单答案是使用 Qt::Window


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接