qt(4) dialog1

本文介绍了一个基于Qt的主窗口设计实例,包括菜单栏、状态栏、工具栏等组件的使用,并详细展示了如何通过模态对话框实现文件打开功能。
#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();
}*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值