单击Dialog中的“按钮”时,我想切换回原来的MainWindow。我尝试了以下操作,使MainWindow的副本可见,我无法在那里编辑任何内容。请帮忙。
这是MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
这是MainWindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
Dialog *dialog=new Dialog();
dialog->setModal(false);
dialog->show();
}
这是Dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_pushButton_clicked();
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
这是Dialog.cpp:
#include "dialog.h"
#include "ui_dialog.h"
#include "mainwindow.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_pushButton_clicked()
{
MainWindow *main=new MainWindow();
main->show();
main->activateWindow();
main->raise();
main->setFocus();
}
这是main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
答案 0 :(得分:1)
MainWindow无法显示在模态对话框的顶部(如果对话框是无模式的,则可以显示)。请参阅QDialog::setModal。
如果对话框是模态的,将MainWindow重新置于前面的唯一方法是隐藏/关闭对话框。实际上,您可以设法在对话框的顶部显示它(使用您提供的代码),但是它将被阻止用户输入,因为模式对话框是唯一一个接受用户输入直到关闭的对话框。
如果对话框无模式,请使用raise()
(和/或setFocus()
activateWindow()
进行测试)将MainWindow带回到前面,但是,您需要一种访问MainWindow实例的方法,您不应该创建一个新的实例。最简单的方法是将MainWindow指针传递给对话框构造函数,以便对话框可以将其存储为属性,并在单击按钮时将其显示在前面。
例如:
class def : public QDialog
{
public:
def( QMainWindow* parent );
...
private:
QMainWindow* m_parent;
};
def::def( QMainWindow* parent ) : QDialog( parent ), m_parent( parent )
{
}
void def::on_pushButton_clicked()
{
m_parent->activateWindow();
m_parent->raise();
m_parent->setFocus();
}
// then, pass MainWindow reference to dialog upon creation
void MainWindow::on_pushButton_clicked()
{
Dialog *dialog=new Dialog( this );
dialog->setModal(false);
dialog->show();
}