【问题标题】:How to make another window pop up that extends QWidget as opposed to QDialog?如何弹出另一个扩展 QWidget 而不是 QDialog 的窗口?
【发布时间】:2010-05-12 21:23:45
【问题描述】:

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

我用来显示它的代码是这个(在我的 mainwindow.cpp 文件中)

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

ResultViewer 的构造函数如下所示

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

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

【问题讨论】:

    标签: user-interface qt


    【解决方案1】:

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

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

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

    查看 QWidget 构造函数文档http://doc.trolltech.com/4.6/qwidget.html#QWidget 以了解为什么应该以这种方式完成。

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

    【讨论】:

    • 感谢 VestniK,进一步研究它,我想我实际上可能会切换到 QDialog。最初我不想使用它,因为它们通常会在打开时阻止主窗口,但显然很容易改变。
    • Dialods 可以是模态的和非模态的。如果你使用 QDialog::show() (实际上这个函数继承自 QWidget)它是非模态的(不阻塞你的主窗口)如果你使用 QDialog::exec() 你的对话框是模态的(阻塞你的主窗口)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多