Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Qt中单击对话框中的按钮时使主窗口可见_C++_Qt - Fatal编程技术网

C++ 在Qt中单击对话框中的按钮时使主窗口可见

C++ 在Qt中单击对话框中的按钮时使主窗口可见,c++,qt,C++,Qt,单击对话框中的“按钮”时,我想切换回原始主窗口。我尝试了以下方法,使主窗口的副本可见,但我无法编辑其中的任何内容。请帮忙 这是主窗口 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit

单击对话框中的“按钮”时,我想切换回原始主窗口。我尝试了以下方法,使主窗口的副本可见,但我无法编辑其中的任何内容。请帮忙

这是主窗口

#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
这是对话

#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
这里是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.h”
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
主窗口w;
w、 show();
返回a.exec();
}

主窗口不能显示在模式对话框的顶部(如果对话框为非模式对话框,则可以显示)。看

  • 如果对话框是模态的,那么将主窗口放回前面的唯一方法是隐藏/关闭de对话框。实际上,您可能会设法将其显示在对话框顶部(使用您设置的代码),但它将被阻止供用户输入,因为只有模式对话框才会接受用户输入,直到关闭为止

  • 如果对话框是非模态的,请使用
    raise()
    (和/或
    setFocus()
    activateWindow()
    将要测试)将主窗口恢复到前面,但是,您需要有一种方法来访问主窗口实例,您不应该创建一个新实例。最简单的方法是将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();
}

我认为您必须提供更多的代码,以便我们有一些上下文。此外,如果您“无法编辑其中的任何内容”,则可能会显示另一个对话框,该对话框是模态的?而且,为什么要创建一个新的主窗口,这是有意的还是仅仅是试图切换回“原始”主窗口?你的问题不清楚。请添加更多详细信息,否则您将面临关闭的风险。根据评论,上面提供了完整代码,您可以使用信号/插槽。单击按钮后发出信号,并在MainWindow类中捕获它。更新:我使用show()而不是exec(如上面在MainWindow.cpp中编辑的)使对话框无模式。然而,仍然会弹出新的主窗口,而不是原来的主窗口。如何解决这个问题?更新:我使用show()而不是exec(如上面在MainWindow.cpp中编辑的)使我的对话框成为非模态的。然而,仍然会弹出新的主窗口,而不是原来的主窗口。如何解决这个问题?如果使用我发布的代码,将显示原始主窗口,而不是新的主窗口(除非创建新的主窗口)。对话框必须有一个指向主窗口的指针才能向前移动。
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
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();
}