gpt4 book ai didi

c++ - 在 Qt 中单击 Dialog 中的 pushButton 时使 MainWindow 可见

转载 作者:行者123 更新时间:2023-11-28 06:00:52 34 4
gpt4 key购买 nike

当单击对话框中的“按钮”时,我想切换回原来的主窗口。我尝试了以下方法,它使 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();
}

最佳答案

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();
}

关于c++ - 在 Qt 中单击 Dialog 中的 pushButton 时使 MainWindow 可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33316107/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com