点击新的QDailog窗口与旧窗口重叠,一切都变得非常混乱,焦点仍然留在旧窗口

时间:2013-11-29 12:13:10

标签: qt qdialog

概述:
我在某个窗口设计了QPushbutton,点击后打开一个新的对话窗口(Say start_backup_window)。
在这个窗口中我设计了另一个QPushbutton说check_backup_option_button,点击它时应打开另一个Dialog窗口说(backup_options_window)。

问题:一切都按预期工作但当我点击check_backup_option_button时,新的backup_options_window与之前的start_backup_window重叠。我尝试了一些东西,但它没有用。

另外我注意到当我拖动旧窗口时,新窗口允许我这样做。一般情况下你不能对旧窗口做任何事情,除非你在新窗口中单击取消或确定按钮。 请你们给我建议如何继续。

以下是我的代码

    start_backup_window_old.cpp


#include "backup_options_window.h" 

//  called init() function in the constructor

 start_backup_window::start_backup_window(QWidget *parent)
    : QDialog(parent), self_backup_options( 0 )
{
    ui.setupUi(this);
    init_cal_signals();
}


void start_backup_window::init_cal_signals()
{

connect( ui.check_backup_option_button, SIGNAL( clicked () ), this , SLOT( open_new_backup_options_window() ) );

}


void start_backup_window::open_new_backup_options_window()
{
    self_backup_options = new backup_options_window( this ); 
    self_backup_options->show();

}

1 个答案:

答案 0 :(得分:1)

问题似乎是将父设置为backup_options_window。我建议用以下方式更改代码:

void start_backup_window::open_new_backup_options_window()
{
    if (!self_backup_options)
        self_backup_options = new backup_options_window; 
    self_backup_options->setWindowModality(Qt::WindowModal); // makes the window modal
    self_backup_options->show();
}

通过此实现,您需要稍后删除self_backup_options指针。例如,在start_backup_window类的析构函数中。请不要忘记在self_backup_options类的构造函数中将start_backup_window初始化为null。