【问题标题】:Create a new window in Qt which depends on the parent window, but appears outside of the parent window在 Qt 中创建一个新窗口,它依赖于父窗口,但出现在父窗口之外
【发布时间】:2018-10-14 05:33:38
【问题描述】:

我想为我的应用程序实现一个日志,并且我希望它在另一个窗口中。但当然它应该在主窗口关闭时关闭。

主窗口是用继承自 QWidget 的类 Window 创建的。

当我以相同的方式创建第二个窗口并将“this”作为父窗口传递给构造函数时,这不起作用,新窗口内的所有内容都会出现在父窗口内。但是当我不向新窗口的构造函数传递任何东西时,它不会在父窗口关闭时关闭。

【问题讨论】:

  • 您需要正确设置新窗口的窗口标志,使其成为独立窗口,即使它有父窗口。或者,您可以使其成为无父对象,并在主窗口关闭时在您自己的代码中将其关闭。
  • 对话框怎么样?

标签: c++ qt user-interface qt4


【解决方案1】:

尝试创建第二个继承自 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();
}

【讨论】:

    【解决方案2】:

    正如@hyde 评论的那样,您应该在创建窗口小部件时为窗口标志设置Qt::Window,然后您可以给它一个父窗口,它将是一个“辅助窗口”,并在父窗口关闭时关闭。从QDialog 继承很好,但会带来您可能不想要/不需要的额外包袱;这个问题的简单答案是使用Qt::Window

    【讨论】:

      猜你喜欢
      • 2014-11-15
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      相关资源
      最近更新 更多