qt(4) dialog1

#include "mainwindow.h"
//#include "ui_mainwindow.h"
//#include <QtGui>
//#include <QtWidgets>
#include <QAction>
#include <QMenuBar>
#include <QStatusBar>
#include <QToolBar>
#include <QDialog>
#include <QDebug>
/*MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
*/
MainWindow::MainWindow(QWidget *parent)
    :QMainWindow(parent)
{
    setWindowTitle(tr("Main Window"));

    openAction = new QAction(QIcon(":/images/1"),tr("&Open"),this);
    openAction->setShortcut(QKeySequence::Open);
    openAction->setStatusTip(tr("Open an existing file"));
    connect(openAction,&QAction::triggered,this,&MainWindow::open);

    QMenu *file = menuBar()->addMenu(tr("&File"));
    file->addAction(openAction);

    QToolBar *toolBar = addToolBar(tr("&File"));
    toolBar->addAction(openAction);
}

MainWindow::~MainWindow()
{

}

/*模态对话框
 * void MainWindow::open()
{
    QDialog dialog;//非屏幕中心
    dialog.setWindowTitle(tr("Hello,dialog!"));
    dialog.exec();
}*/

void MainWindow::open()
{
   QDialog dialog(this);//屏幕中心
   dialog.setWindowTitle(tr("Hello,dialog!"));
   dialog.exec();
   if (dialog.exec() == QDialog::Accepted) {//QDialog::exec()是有返回值的,其返回值是QDialog::Accepted或者QDialog::Rejected
       qDebug() << "accepted";
       // do something
   } else {
       qDebug("rejected");
       // do something else
   }
}
/*使用信号槽机制获取数据
 * // in dialog:
void UserAgeDialog::accept()
{
    emit userAgeChanged(newAge); // newAge is an int
    QDialog::accept();
}

// in main window:
void MainWindow::showUserAgeDialog()
{
    UserAgeDialog *dialog = new UserAgeDialog(this);
    //因为有 this 指针,当主窗口关闭时,UserAgeDialog 也会被销毁,因此也没有内存泄露。
    //mainwindow这个主窗口不关闭的情况下,反复打开关闭对话框,理论上会造成程序奔溃,存在内存泄露问题,设置setAttribute()函数是一个好的习惯
    connect(dialog, &UserAgeDialog::userAgeChanged, this, &MainWindow::setUserAge);
    dialog->show();
}

// ...

void MainWindow::setUserAge(int age)
{
    userAge = age;
}*/

/*非模态对话框
 * void MainWindow::open()
{
    QDialog *dialog = new QDialog;
    //在栈上创建,函数show()运行完就消除,窗口无法保留,在堆上创建,解决这个问题
    dialog->setAttribute(Qt::WA_DeleteOnClose);//避免泻露内存
    //如果设置 dialog 的属性为WA_DeleteOnClose,那么当对话框关闭时,对象被销毁,就不能获取dialog.exec()数据了。
    dialog->setWindowTitle(tr("Hello,dialog!"));
    dialog->show();
}*/

猜你喜欢

转载自blog.csdn.net/sinat_39028599/article/details/80723689
qt4