Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 如何使另一个弹出窗口扩展QWidget而不是QDialog?_User Interface_Qt - Fatal编程技术网

User interface 如何使另一个弹出窗口扩展QWidget而不是QDialog?

User interface 如何使另一个弹出窗口扩展QWidget而不是QDialog?,user-interface,qt,User Interface,Qt,到目前为止,我只让我的主窗口弹出其他的QDialogs窗口,我没有让它与QWidget一起工作。我想显示的另一个窗口是用表单编辑器设计的,然后封装在一个名为ResultViewer的类中,该类扩展了QWidget(与QDialog相反)。我想要的是让ResultViewer在一个单独的窗口中显示它的ui。现在,当我尝试显示它时,ResultViewer ui会在主窗口ui顶部的主窗口中弹出 我用来显示它的代码如下(在mainwindow.cpp文件中) ResultViewer的构造函数如下所示

到目前为止,我只让我的主窗口弹出其他的QDialogs窗口,我没有让它与QWidget一起工作。我想显示的另一个窗口是用表单编辑器设计的,然后封装在一个名为ResultViewer的类中,该类扩展了QWidget(与QDialog相反)。我想要的是让ResultViewer在一个单独的窗口中显示它的ui。现在,当我尝试显示它时,ResultViewer ui会在主窗口ui顶部的主窗口中弹出

我用来显示它的代码如下(在mainwindow.cpp文件中)

ResultViewer的构造函数如下所示

ResultViewer::ResultViewer(QWidget * parent) :
    QWidget(parent),
    ui(new Ui::ResultViewer)
{
    ui->setupUi(this);
}

我已经浏览了一些QWidget文档,但我能找到的唯一相关内容是
QWidget::window()
函数,但解释不是很清楚,它只是给出了一个更改窗口标题的示例。

如果您只想在应用程序中显示第二个窗口,并且有两个顶级窗口小部件,请尝试更改:

ResultViewer * rv = new ResultView(this);
rv->show();

看看QWidget构造函数文档,了解为什么应该这样做


顺便说一句,QDialog确实是应用程序中附加窗口的良好基类。我不明白您为什么不想使用它。

如果您只想在应用程序中显示第二个窗口,并且有两个顶级小部件,请尝试更改:

ResultViewer * rv = new ResultView(this);
rv->show();

看看QWidget构造函数文档,了解为什么应该这样做


顺便说一句,QDialog确实是应用程序中附加窗口的良好基类。我不明白您为什么不想使用它。

谢谢VestniK,进一步研究一下,我想我可能会切换到QDialog。最初我不想使用它,因为它们通常会在打开时阻止主窗口,但很明显这很容易改变。Dialods可以是模态的,也可以是非模态的。如果您使用QDialog::show()(实际上这个函数继承自QWidget),它是非模态的(不阻塞主窗口)。如果您使用QDialog::exec(),您的对话框是模态的(阻塞主窗口)。感谢VestniK,进一步研究,我想我实际上可能会切换到QDialog。最初我不想使用它,因为它们通常会在打开时阻止主窗口,但很明显这很容易改变。Dialods可以是模态的,也可以是非模态的。如果您使用QDialog::show()(实际上这个函数继承自QWidget),它是非模态的(不阻塞主窗口);如果您使用QDialog::exec(),您的对话框是模态的(阻塞主窗口)。
ResultViewer * rv = new ResultView();
rv->show();