• 3133阅读
  • 7回复

[提问]关于非模态对话框 [复制链接]

上一主题 下一主题
离线yearl
 

只看楼主 倒序阅读 楼主  发表于: 2013-04-18

1、如何使非模态对话框一打开就得到焦点(处于最前面)?
2、如何在主窗口关闭时同时关闭这个非模态对话框?

关于第2问题,我在主窗口的析构函数中delete对话框也不起作用,这个析构函数不被调用,直到我手动关掉对话框。
离线jdwx

只看该作者 1楼 发表于: 2013-04-18
问题1答案:
void on_xxxxbutton()
{
    if(!window){
        window = new Window;
    }
    window->show();
    window->raise();
}

问题2答案:
void Widget::closeEvent(QCloseEvent *)
{
    if(window){
        window->close();
    }
}
析构函数内delete这个window
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线yearl

只看该作者 2楼 发表于: 2013-04-18
谢谢回复
第1个问题
我是在主窗口的构造函数中实例化这个对话框的。所以这样不起作用。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_widget = new QWidget();
    m_widget->setWindowTitle("P");
    m_widget->show();
    m_widget->raise();
}

离线jdwx

只看该作者 3楼 发表于: 2013-04-18
回 2楼(yearl) 的帖子
还是在需要的时候,再去实例化,这样可以节约内存,加快程序启动。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线yearl

只看该作者 4楼 发表于: 2013-04-18
这个程序从功能上讲最常用的用法是先打开对话框进行必要的设置。但又不像输入密码那样的必须这样做,所以用了非模态的对话框。
离线yearl

只看该作者 5楼 发表于: 2013-04-18
实不行两者换个角色?不过那又有点本末倒置了。
离线yearl

只看该作者 6楼 发表于: 2013-04-18
是酱紫的:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    w.widget()->show();
    
    return a.exec();
}
离线dbzhang800

只看该作者 7楼 发表于: 2013-04-18
回 楼主(yearl) 的帖子
将 主窗体 设置为 你的对话框 的 parent
快速回复
限100 字节
 
上一个 下一个