在Qt中如何实现窗口交互

首先介绍done函数,它的作用是:关闭当前窗口,同时返回一个状态信息。
Qt助手解释:关闭对话框并将其结果代码设置为r。如果这个对话框显示了exec(), done()导致本地事件循环结束,exec()返回r。

void QDialog::done(int r);
r 有两个状态 AcceptedRejected

例子如下:

main函数:

模态对话框:就是与用户交互,用户需要给一个反应(点击取消,确定等等这些操作),若用户不关闭对话框那么对话框就会一直阻塞(停留在交互模式下)直到关闭为止。并且不能与同一应用程序中的任何其他窗口交互,直到关闭对话框。

解释main函数:当第一个对话框以模态方式创建后,会阻塞等待交互回应,我在第一个对话框使用了两个按钮来测试,确定和取消按钮,点击确定后会关闭当前对话框并返回Accepted,点击取消后会关闭当前对话框并返回Rejected,并赋值给res。

当res 等于Rejected会直接结束程序,并在应用程序输出中打印‘失败’。
当res 等于Accepted会创建出第二个窗口,并在应用程序输出中打印‘TwoDialog构造成功!’。
在这里插入图片描述

第一个窗口

这是第一个对话框,我在里面添加了两个按钮,确定和取消。
我分别在这两个按钮的点击事件中添加了done()函数,确定中设置的是Accepted状态,而取消中设置的是Rejected状态。
当我点击确定的时候,当前对话框会被关闭,并且main函数中的res就会接收到Accepted值,此时会打开(创建)第二个对话框。点击取消就会是Rejected。
在这里插入图片描述
第一个窗口实现代码:

Exam::Exam(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Exam)
{
    
    
    ui->setupUi(this);

    m_label = new QLabel(this);
    m_label->setText("这是第一个对话框");

    QFont f;
    f.setPointSize(20);
    m_label->setFont(f);
}

Exam::~Exam()
{
    
    
    delete ui;
}

void Exam::on_pushButton_clicked()
{
    
    
    done(Accepted);     //关闭当前窗口,同时以接受状态返回
}

void Exam::on_pushButton_2_clicked()
{
    
    
    done(Rejected);     //关闭当前窗口,同时以取消状态返回
}
第二个窗口

当我在第一个对话框点击确定按钮的时候,会关闭第一个对话框,打开第二个对话框,如下:
在这里插入图片描述
第二个窗口实现代码:

TwoDialog::TwoDialog(QWidget *parent)
    : QDialog(parent)
{
    
    
    m_label = new QLabel(this);

    resize(500, 600);
    QFont f;
    f.setPointSize(18);
    m_label->setFont(f);

    m_label->setText("我是第二个窗口");
}

Guess you like

Origin blog.csdn.net/qq_45337964/article/details/111303086