如何正确链接qt对话框?

问题描述

我需要绑定对话框,以便使用两个按钮“确定”和“关闭”从主窗口打开“ first_dialog”窗口。单击“关闭”仅会关闭窗口。单击“确定”应同时使用两个按钮“确定”和“关闭”打开“ second_dialog”。单击“关闭”将关闭“ second_dialog”。如果单击“确定”,则将关闭“ second_dialog”和“ first_dialog”,但应调用mainwindow插槽。如何正确地做一个例子。我试图与destroy()信号绑定并编写自己的信号,但是该程序遇到了分段错误。

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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


void MainWindow::on_pushButton_clicked()
{
    first_dialog* a= new first_dialog(this);
    //connect(a,SIGNAL(...),this,SLOT(new_button));
    a->exec();
}
#include "first_dialog.h"
#include "ui_first_dialog.h"

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

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

void first_dialog::on_pushButton_clicked()
{
    second_dialog* a =new second_dialog(this);
    //connect(a,SLOT(...));
    a->exec();
}

void first_dialog::on_pushButton_2_clicked()
{
    this->close();
}
#include "second_dialog.h"
#include "ui_second_dialog.h"

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

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

void second_dialog::on_pushButton_2_clicked()
{
    this->close();
}

void second_dialog::on_pushButton_clicked()
{
    //....
}



解决方法

您似乎可以使用acceptreject方法。当您按下任一按钮时,在对话框中调用这些功能。然后只需确保检查返回值即可知道单击了哪个。

// MainWindow.cpp
void MainWindow::on_pushButton_clicked()
{
    first_dialog* a= new first_dialog(this);

    if (a->exec() == QDialog::Accepted)
    {
        // Both dialogs were accepted
    }
    else
    {
        // First dialog was canceled
    }
}

// first_dialog.cpp
void first_dialog::on_pushButton_clicked()
{
    second_dialog* a =new second_dialog(this);

    if (a->exec() == QDialog::Accepted)
    {
        // Second dialog was accepted,so accept the first dialog too.
        accept();
    }
    else
    {
        // Second dialog was canceled
    }
}

void first_dialog::on_pushButton_2_clicked()
{
    reject();
}

// second_dialog.cpp
void second_dialog::on_pushButton_clicked()
{
    accept();
}

void second_dialog::on_pushButton_2_clicked()
{
    reject();
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...