精华内容
下载资源
问答
  • 今天小编就为大家分享一篇关于易语言改变通用对话框的类型起到不同的作用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 对话框的类型及创建 对话框分为模态对话框和非模态对话框 模态对话框: 产生之后会对程序有一个堵塞,只有当模态对话框关闭之后才能对其他的对话框进行操作 创建方法:在所需的代码段内使用如下代码 CClass dlg;...

    对话框的类型及创建

    对话框分为模态对话框和非模态对话框

    模态对话框:

    • 产生之后会对程序有一个堵塞,只有当模态对话框关闭之后才能对其他的对话框进行操作

    • 创建方法:在所需的代码段内使用如下代码

      CClass dlg;
      //模态方式弹出
      dlg.DoModal();
      

    非模态对话框:

    • 产生之后不会对其他对话框有影响

    • 创建方法:

      /* 因为它不像模态对话框一样生成一个拥塞,所以在声明窗口变量的时候需要在.h中进行声明,以保存这个
      变量,要不然会一闪而过*/
      
      //1. 在相应的.h中声明
      CClass dlg;
      //2. 创建对话框,这里使用dlg.create(ID)函数,因为create不允许多次调用,实际软件使用的时候无法避免多次点开创建的情况,因此把创建放在相应窗口的初始化函数 OnInitDialog() 中
      dlg.Create(Diag_ID);
      //3. 显示。在相应的位置使用showwindow()函数
      dlg.ShowWindow(SW_SHOWNORMAL);
      //里面的参数可以查阅手册,是显示的方式。
      

    MFC在主窗口出现之前先弹的窗口

    • 以一个软件的登录界面为例,在主窗口之前弹出,他的初始化在App类中的InitInstance()中声明

    • 创建方式:

      //登录界面的话以模态形式创建
      CLoginDlg dlg;
      dlg.DoModal();
      
    展开全文
  • android AlertDialog对话框的类型集合 ,比较全面的讲述了 AlertDialog 的 种类 , Demo 的综合性比较强 , Demo 可直接运行
  • QT对话框及其类型

    2018-08-02 13:10:36
    2、对话框的类型 3、对话框的返回值 4、小结 2、登录对话框实例分析 1、登录对话框 2、实例分析 3、进一步的开发 4、小结 1、对话框及其类型 1、对话框的概念 对话框是与用户进行简短交互的顶层窗口 ...

    目录

    1、对话框及其类型

    对话框的概念 

    对话框的类型 

    对话框的返回值 

    2、登录对话框实例分析


    1、对话框及其类型

    对话框的概念 

    对话框是与用户进行简短交互的顶层窗口, QDialog是Qt中所有对话框窗口的基类

    QDialog继承于QWidget是一种容器类型的组件 ,QDialog是定制了窗口式样的特殊的QWidget 

    QDialog作为一种专用的交互窗口而存在 ,QDialog不能作为子部件嵌入其它容器中 

    QDialog和QWidget的区别  

    #include <QtGui/QApplication>
    #include <QWidget>
    #include <QDialog>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget widget;
        QDialog dialog(&widget);
    
        widget.setWindowTitle("i am widget");
        widget.show();
    
        dialog.setWindowTitle("i am dialog");
        dialog.show();
    
    
        return a.exec();
    }
    

                                         当两者交换顺序

    QDialog dialog;
    QWidget widget(&dialog);

     

    对话框的类型 

    模态对话框(QDialog::exec())

     -显示后无法与父窗口进行交互 ,是一种阻塞式的对话框调用方式 

    非模态对话框(QDialog::show()) 

     -显示后独立存在可以同时与父窗口进行交互,是一种非阻塞式的对话框调用方式 

    一般情况下 

     -模态对话框用于必须依赖用户选择的场合 。例如: 消息提示,文件选择,打印设置,等 

     -非模态对话框用于特殊功能设置的场合。例如:查找操作,属性设置,等 

    - 在上创建模态对话框是最简单常用的方式,一般情况下非模态对话框需要在上创建 

     - 通过QDialog::setModal函数可以创建混合恃性的对话框

     - 非模态对话框需要指定Qt::WA_DeleteOnClose属性 (关闭对话框时自动释放堆内存)

    Dialog.h

    #ifndef DIALOG_H
    #define DIALOG_H
    
    #include <QtGui/QDialog>
    #include <QPushButton>
    
    class Dialog : public QDialog
    {
        Q_OBJECT
    protected:
        QPushButton ModalBtn;
        QPushButton NormalBtn;
        QPushButton MixedBtn;
    protected slots:
        void ModalBtn_Clicked();
        void NormalBtn_Clicked();
        void MixedBtn_Clicked();
    public:
        Dialog(QWidget *parent = 0);
        ~Dialog();
    };
    
    #endif // DIALOG_H
    

    Dialog.cpp

    #include "Dialog.h"
    
    #include <QDebug>
    
    Dialog::Dialog(QWidget *parent) :
            QDialog(parent), ModalBtn(this), NormalBtn(this), MixedBtn(this)
    {
        ModalBtn.setText("Modal Dialog");
        ModalBtn.move(20, 20);
        ModalBtn.resize(100, 30);
    
        NormalBtn.setText("Normal Dialog");
        NormalBtn.move(20, 70);
        NormalBtn.resize(100, 30);
    
        MixedBtn.setText("Mixed Dialog");
        MixedBtn.move(20, 120);
        MixedBtn.resize(100, 30);
    
        connect(&ModalBtn, SIGNAL(clicked()), this, SLOT(ModalBtn_Clicked()));
        connect(&NormalBtn, SIGNAL(clicked()), this, SLOT(NormalBtn_Clicked()));
        connect(&MixedBtn, SIGNAL(clicked()), this, SLOT(MixedBtn_Clicked()));
    
        resize(140, 170);
    }
    
    void Dialog::ModalBtn_Clicked()
    {
        qDebug() << "ModalBtn_Clicked() Begin";
    
        QDialog dialog(this);
    
        dialog.exec();
    
        qDebug() << "ModalBtn_Clicked() End";   // 在没有完成模态对话框交互前不会打印这一句
    }
    
    void Dialog::NormalBtn_Clicked()
    {
        qDebug() << "NormalBtn_Clicked() Begin";
    
        QDialog* dialog = new QDialog(this); // 非模态对话框,如果在栈上创建,局部变量被释放,对话框一闪而过
    
        dialog->setAttribute(Qt::WA_DeleteOnClose); // 关闭窗口释放对象
        dialog->show();
    
        qDebug() << "NormalBtn_Clicked() End";  // 运行这里后,仅仅dialog指针被销毁
    }
    
    void Dialog::MixedBtn_Clicked()
    {
        qDebug() << "MixedBtn_Clicked() Begin";
    
        QDialog* dialog = new QDialog(this);
    
        dialog->setAttribute(Qt::WA_DeleteOnClose);
        dialog->setModal(true);   // 运行机理上是非模态对话框特性,表现形式上是模态对话框形式
    
        dialog->show();
    
        qDebug() << "MixedBtn_Clicked() End";
    }
    
    Dialog::~Dialog()
    {
        qDebug() << "~Dialog()";
    }
    

    main.cpp

    #include <QtGui/QApplication>
    #include <QWidget>
    #include <QDialog>
    #include "Dialog.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        Dialog dialog;
    
        dialog.show();
    
        return a.exec();
    }
    

    对话框的返回值 

    只有模态对话框才有返回值的概念,模态对话框的返回值用于表示交互结果 

    QDialog::exec()的返回值为交互结果 

          - void QDialog::done(int i):关闭对话框并将参数作为交互结果 

          - QDialog::Accepted:用户操作成功 

          - QDialog::Rejected:用户操作失败 

    Dialog.cpp(修改部分)

    void Dialog::ModalBtn_Clicked()
    {
        done(Accepted);
    
        qDebug() << "ModalBtn_Clicked() End";  
    }
    
    void Dialog::NormalBtn_Clicked()
    {
        done(Rejected);
    
        qDebug() << "NormalBtn_Clicked() End"; 
    }
    
    void Dialog::MixedBtn_Clicked()
    {
        done(100);
    
        qDebug() << "MixedBtn_Clicked() End";
    }

    main.cpp

    #include <QtGui/QApplication>
    #include <QWidget>
    #include <QDialog>
    #include <QDebug>
    
    #include "Dialog.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        Dialog dialog;
    
        int r = dialog.exec();
    
        if(r == QDialog::Accepted)
        {
            qDebug() << "QDialog::Accepted";
        }
        else if(r == QDialog::Rejected)
        {
            qDebug() << "QDialog::Rejected";
        }
        else
        {
            qDebug() << r;
        }
    
        return r; // 没有必要重复进入消息循环
    }
    

     

    2、登录对话框实例分析

    登录对话框是应用程序中的常用部件 ,如何开发一个可以在不同项目间复用的登录对话框? 

    登录对话框的设计与架构 

    如何获取用户输入的用户名和密码如何在两个不同的对话框间传递数据? 

                                   

    通过附加的成员变量和成员函数完成不同对话框间的数据传递

    QLoginDialog.h

    #ifndef _QLOGINDIALOG_H_
    #define _QLOGINDIALOG_H_
    
    #include <QtGui/QDialog>
    #include <QLabel>
    #include <QLineEdit>
    #include <QPushButton>
    
    class QLoginDialog : public QDialog
    {
        Q_OBJECT
    private:
        QLabel UserLabel;
        QLabel PwdLabel;
        QLineEdit UserEdit;
        QLineEdit PwdEdit;
        QPushButton LoginBtn;
        QPushButton CancelBtn;
        QString m_user;
        QString m_pwd;
    private slots:
        void LoginBtn_Clicked();
        void CancelBtn_Clicked();
    public:
        QLoginDialog(QWidget *parent = 0);
        QString getUser();
        QString getPwd();
        ~QLoginDialog();
    };
    
    
    #endif
    

    QLoginDialog.cpp

    #include "QLoginDialog.h"
    
    #include <QDebug>
    
    QLoginDialog::QLoginDialog(QWidget* parent) : QDialog(parent, Qt::WindowCloseButtonHint),
        UserLabel(this), PwdLabel(this), UserEdit(this), PwdEdit(this), LoginBtn(this), CancelBtn(this)
    {
        UserLabel.setText("User ID:");
        UserLabel.move(20, 30);
        UserLabel.resize(60, 25);
    
        UserEdit.move(85, 30);
        UserEdit.resize(180, 25);
    
        PwdLabel.setText("Password:");
        PwdLabel.move(20, 65);
        PwdLabel.resize(60,25);
    
        PwdEdit.move(85, 65);
        PwdEdit.resize(180, 25);
        PwdEdit.setEchoMode(QLineEdit::Password);
    
        CancelBtn.setText("Cancel");
        CancelBtn.move(85, 110);
        CancelBtn.resize(85, 30);
    
        LoginBtn.setText("Login");
        LoginBtn.move(180, 110);
        LoginBtn.resize(85, 30);
    
        setWindowTitle("Login");
        setFixedSize(285, 170);
    
        connect(&LoginBtn, SIGNAL(clicked()), this, SLOT(LoginBtn_Clicked()));
        connect(&CancelBtn, SIGNAL(clicked()), this, SLOT(CancelBtn_Clicked()));
    }
    
    void QLoginDialog::LoginBtn_Clicked()
    {
        qDebug() << "LoginBtn_Clicked() Begin";
    
        m_user = UserEdit.text().trimmed();
        m_pwd = PwdEdit.text();
    
        done(Accepted);
    
        qDebug() << "LoginBtn_Clicked() End";
    }
    
    void QLoginDialog::CancelBtn_Clicked()
    {
        qDebug() << "CancelBtn_Clicked() Begin";
    
        done(Rejected);
    
        qDebug() << "CancelBtn_Clicked() End";
    }
    
    QString QLoginDialog::getUser()
    {
        return m_user;
    }
    
    QString QLoginDialog::getPwd()
    {
        return m_pwd;
    }
    
    QLoginDialog::~QLoginDialog()
    {
    
    }
    
    

    Widget.h

    #ifndef _WIDGET_H_
    #define _WIDGET_H_
    
    #include <QtGui/QWidget>
    #include <QPushButton>
    
    class Widget : public QWidget
    {
        Q_OBJECT
    private:
        QPushButton TestBtn;
    private slots:
        void TestBtn_Clicked();
    public:
        Widget(QWidget *parent = 0);
        ~Widget();
    };
    
    #endif
    

    Widget.cpp

    #include "Widget.h"
    #include "QLoginDialog.h"
    
    #include <QDebug>
    
    Widget::Widget(QWidget *parent) : QWidget(parent), TestBtn(this)
    {
        TestBtn.setText("Test Login Dialog");
    
        setFixedSize(400, 200);
    
        connect(&TestBtn, SIGNAL(clicked()), this, SLOT(TestBtn_Clicked()));
    }
    
    void Widget::TestBtn_Clicked()
    {
        QLoginDialog dlg;
    
        if( dlg.exec() == QDialog::Accepted )
        {
            qDebug() << "User: " + dlg.getUser();
            qDebug() << "Pwd: " + dlg.getPwd();
        }
    
    /*
        创建登陆对话框,运行对话框,判断点击是否为登陆
    */
    }
    
    Widget::~Widget()
    {
        
    }
    

    改进:增加随机验证码

    验证码必须动态随机产生 ,验证码的显示避开使用标准组件(标签,文本框,等),将验证码直接绘制于登录对话框 

    验证码应该附带足够多的障碍增加程序识别难度 :验证码中的字符颜色随机改变 ,在验证码区域随机绘制噪点 

    注:计算机无法产生真正意义上的随机数 ,计算机只能模拟随机数序列(伪随机数) ,随机种子决定每次产生的随机序列是否相同 

    QPainter的使用:https://blog.csdn.net/qq_39654127/article/details/81876086

    QLoginDialog.h

    #ifndef _QLOGINDIALOG_H_
    #define _QLOGINDIALOG_H_
    
    #include <QtGui/QDialog>
    #include <QLabel>
    #include <QLineEdit>
    #include <QPushButton>
    #include <QTimer>
    
    class QLoginDialog : public QDialog
    {
        Q_OBJECT
    private:
        QLabel UserLabel;
        QLabel PwdLabel;
        QLabel CaptLabel;
        QLineEdit UserEdit;
        QLineEdit PwdEdit;
        QLineEdit CaptEdit;
        QPushButton LoginBtn;
        QPushButton CancelBtn;
        QString m_user;
        QString m_pwd;
        QString m_captcha;
        Qt::GlobalColor* m_colors; // 枚举类型,包含很多Qt预定义的QColor对象
        QTimer m_timer;
    private slots:
        void LoginBtn_Clicked();
        void CancelBtn_Clicked();
        void Timer_Timeout();
    protected:
        void paintEvent(QPaintEvent *);
        QString getCaptcha();
        Qt::GlobalColor* getColors();
    public:
        QLoginDialog(QWidget *parent = 0);
        QString getUser();
        QString getPwd();
        ~QLoginDialog();
    };
    
    
    #endif
    

    QLoginDialog.cpp

    #include "QLoginDialog.h"
    #include <QPainter>
    #include <QTime>
    #include <QDebug>
    #include <QMessageBox>
    
    QLoginDialog::QLoginDialog(QWidget* parent) : QDialog(parent, Qt::WindowCloseButtonHint),
        UserLabel(this), PwdLabel(this), CaptLabel(this),
        UserEdit(this), PwdEdit(this), CaptEdit(this),
        LoginBtn(this), CancelBtn(this)
    {
        UserLabel.setText("User ID:");
        UserLabel.move(20, 30);
        UserLabel.resize(60, 25);
    
        UserEdit.move(85, 30);
        UserEdit.resize(180, 25);
    
        PwdLabel.setText("Password:");
        PwdLabel.move(20, 65);
        PwdLabel.resize(60,25);
    
        PwdEdit.move(85, 65);
        PwdEdit.resize(180, 25);
        PwdEdit.setEchoMode(QLineEdit::Password);
    
        CaptLabel.setText("Captcha:");
        CaptLabel.move(20, 100);
        CaptLabel.resize(60, 25);
    
        CaptEdit.move(85, 100);
        CaptEdit.resize(85, 25);
    
        CancelBtn.setText("Cancel");
        CancelBtn.move(85, 145);
        CancelBtn.resize(85, 30);
    
        LoginBtn.setText("Login");
        LoginBtn.move(180, 145);
        LoginBtn.resize(85, 30);
    
        m_timer.setParent(this);
    
        setWindowTitle("Login");
        setFixedSize(285, 205);
    
        connect(&m_timer, SIGNAL(timeout()), this, SLOT(Timer_Timeout()));
        connect(&LoginBtn, SIGNAL(clicked()), this, SLOT(LoginBtn_Clicked()));
        connect(&CancelBtn, SIGNAL(clicked()), this, SLOT(CancelBtn_Clicked()));
    
        qsrand(QTime::currentTime().second() * 1000 + QTime::currentTime().msec());
    
        m_captcha = getCaptcha();
        m_colors = getColors();
    
        m_timer.start(100); 
    }
    
    void QLoginDialog::LoginBtn_Clicked()
    {
        qDebug() << "LoginBtn_Clicked() Begin";
    
        QString captcha = CaptEdit.text().replace(" ", "");
    
        if( m_captcha.toLower() == captcha.toLower() )//不区分大小写
        {
            m_user = UserEdit.text().trimmed();
            m_pwd = PwdEdit.text();
    
            if( m_user == "" )
            {
                QMessageBox::information(this, "Info", "User ID can NOT be empty!");
            }
            else if( m_pwd == "" )
            {
                QMessageBox::information(this, "Info", "Password can NOT be empty!");
            }
            else
            {
                done(Accepted);
            }
        }
        else
        {
            QMessageBox::critical(this, "Error", "The captcha is NOT matched!");
    
            m_captcha = getCaptcha();
    
            CaptEdit.selectAll();
        }
    
        qDebug() << "LoginBtn_Clicked() End";
    }
    
    void QLoginDialog::CancelBtn_Clicked()
    {
        qDebug() << "CancelBtn_Clicked() Begin";
    
        done(Rejected);
    
        qDebug() << "CancelBtn_Clicked() End";
    }
    
    QString QLoginDialog::getUser()
    {
        return m_user;
    }
    
    QString QLoginDialog::getPwd()
    {
        return m_pwd;
    }
    
    void QLoginDialog::Timer_Timeout()
    {
        m_colors = getColors();
    
        update(); // 每100ms改变颜色
    }
    
    void QLoginDialog::paintEvent(QPaintEvent *)
    {
        QPainter painter(this);
    
        painter.fillRect(180, 100, 84, 24, Qt::white); // 先画个白色矩形
    
        painter.setFont(QFont("Comic Sans MS", 12));
    
        for(int i=0; i<150; i++)
        {
            painter.setPen(m_colors[i%4]);
            painter.drawPoint(180 + qrand() % 84, 100 + qrand() % 24);//在矩形区域增加噪点
        }
    
        for(int i=0; i<4; i++)
        {
            painter.setPen(m_colors[i]);
            painter.drawText(180 + 20 * i, 100, 20, 24, Qt::AlignCenter, QString(m_captcha[i]));
        }
    }
    
    // 随机生成验证码字符串:随机产生四个大小写字母
    QString QLoginDialog::getCaptcha()
    {
        QString ret = "";
    
        for(int i=0; i<4; i++)
        {
            int c = (qrand() % 2) ? 'a' : 'A';
    
            ret += static_cast<QChar>(c + qrand() % 26);
        }
    
        return ret;
    }
    
    //随机产生四种颜色
    Qt::GlobalColor* QLoginDialog::getColors()
    {
        static Qt::GlobalColor colors[4];
    
        for(int i=0; i<4; i++)
        {
            colors[i] = static_cast<Qt::GlobalColor>(2 + qrand() % 16); // 颜色范围2,17
        }
    
        return colors;
    }
    
    QLoginDialog::~QLoginDialog()
    {
    
    }
    
    

     

     

     

    展开全文
  • 对话框类型Dialog

    2019-08-02 17:32:45
    对话框的类型day1对话框类型普通对话框进度条对话框单选对话框多选对话框时间对话框日期对话框自定义对话框自定义对框框需要创建一个小布局放入自定义的对话类让其显示然后对其进行自定义化 对话框类型 普通对话框 ...

    对话框类型

    普通对话框

    进度条对话框

    单选对话框

     one.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    
                    builder.setIcon(R.mipmap.ic_launcher);
                    builder.setTitle("提示方式");
                   final String s[]=new String[]{"1","2"};
                    builder
                            .setSingleChoiceItems(s, 0, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    Toast.makeText(MainActivity.this, "111", Toast.LENGTH_SHORT).show();
                                }
                            }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();
                        }
                    }).create().show();
    
                }
            });
    

    多选对话框

      AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    
    
                    builder.setIcon(R.mipmap.ic_launcher);
                    builder.setTitle("提示方式");
                    final String s[]=new String[]{"1","2"};
                    final boolean[] b=new boolean[]{true,false};
                    builder
                            .setMultiChoiceItems(s, b, new DialogInterface.OnMultiChoiceClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    
    
    
                                }
                            }).create().show();
    

    时间对话框

     Date date = new Date();
                    int hour=date.getHours();
                    int mm=date.getSeconds();
                    TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    
                        }
                    },hour,mm,true);
                    timePickerDialog.show();
    

    日期对话框

    
      Calendar calendar = Calendar.getInstance();
                    int year=calendar.get(Calendar.YEAR);
                    int mouth=calendar.get(Calendar.MONTH);
                    int day=calendar.get(Calendar.DATE);
    
                    DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
    
                        }
                    },year,mouth,day);
                    datePickerDialog.show();
    

    自定义对话框

    自定义对框框需要创建一个小布局放入自定义的对话类让其显示然后对其进行自定义化

    展开全文
  • 文章目录QDialog和QWidget对话框的类型(模态,非模态,混和)Dialog.hDialog.cppmain.cpp对话框的返回值(注意事项) 文章引用: 1 QDialog和QWidget #include <QtGui/QApplication> #include <QWidget>...

    狄泰软件课程笔记

    文章引用: 1

    QDialog和QWidget

    #include <QtGui/QApplication>
    #include <QWidget>
    #include <QDialog>
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        /*显示两个窗口,QDialog不会嵌套到QWidget中,且QDialog在顶层
    
          QWidget widget;
          QDialog dialog(&widget);   // 结果: 并没有被嵌入到父组件中去(只能是顶层窗口存在)
    
          widget.show();
          widget.setWindowTitle("I'm widget");
          dialog.show();
          dialog.setWindowTitle("I'm dialog");
    */
    
    
    
        /* */
    
        //QWidget嵌套到QDialog中,显示一个窗口
        QDialog dialog;
        QWidget widget(&dialog);  // 结果: 作为一个部件,被嵌入到QDialog
    
        widget.show();
        widget.setWindowTitle("I'm widget");
        dialog.show();
        dialog.setWindowTitle("I'm dialog");
    
    
        return a.exec();
    }
    
    
    

    非模态对话框需要指定Qt::WA_DeleteOnClose属性, 即:关闭对话框和删除对话框对象

    对话框的类型(模态,非模态,混和)

    Dialog.h

    
    #include "Dialog.h"
    
    #include <QDebug>
    
    Dialog::Dialog(QWidget *parent) :
            QDialog(parent), ModalBtn(this), NormalBtn(this), MixedBtn(this)
    {
        ModalBtn.setText("Modal Dialog");
        ModalBtn.move(20, 20);
        ModalBtn.resize(100, 30);
    
        NormalBtn.setText("Normal Dialog");
        NormalBtn.move(20, 70);
        NormalBtn.resize(100, 30);
    
        MixedBtn.setText("Mixed Dialog");
        MixedBtn.move(20, 120);
        MixedBtn.resize(100, 30);
    
        connect(&ModalBtn, SIGNAL(clicked()), this, SLOT(ModalBtn_Clicked()));
        connect(&NormalBtn, SIGNAL(clicked()), this, SLOT(NormalBtn_Clicked()));
        connect(&MixedBtn, SIGNAL(clicked()), this, SLOT(MixedBtn_Clicked()));
    
        resize(140, 170);
    }
    
    // 模态对话框
    void Dialog::ModalBtn_Clicked()
    {
        qDebug() << "ModalBtn_Clicked() Begin";
    
        QDialog dialog(this);      // 一般而言,模态和非模态使用时都要指定父组件。
    
        dialog.exec();             //如果是 dialog->show();  结果会一闪而过,是非堵塞的,程序继续向下运行,函数运行完毕,会释放掉变量。
    
        // done(Accepted);
    
        qDebug() << "ModalBtn_Clicked() End";
    }
    
    // 非模态对话框
    void Dialog::NormalBtn_Clicked()
    {
        qDebug() << "NormalBtn_Clicked() Begin";
    
        QDialog* dialog = new QDialog(this);         // 非模态中要指定父子关系 , 指针在函数内部被定义,之后就没有指针指向窗口对象了,对话框可以被关闭,内存资源并没有被释放;
    
        dialog->setAttribute(Qt::WA_DeleteOnClose);  // 小技巧:设置属性,对话框会释放掉自己,不产生任何的内存泄露
        dialog->show();
    
        // done(Rejected);
    
        qDebug() << "NormalBtn_Clicked() End";
    }
    
    // 混合属性对话框(运行机理上是非模态对话框,表现模式上是模态对话框)
    void Dialog::MixedBtn_Clicked()
    {
        qDebug() << "MixedBtn_Clicked() Begin";
    
        QDialog* dialog = new QDialog(this);
    
        dialog->setAttribute(Qt::WA_DeleteOnClose);
        dialog->setModal(true);                      // 设置非模态对话框,行为类似于模态对话框
        dialog->show();
    
        // done(100);
    
        qDebug() << "MixedBtn_Clicked() End";
    }
    
    Dialog::~Dialog()
    {
        qDebug() << "~Dialog()";
    }
    
    

    Dialog.cpp

    
    #include "Dialog.h"
    
    #include <QDebug>
    
    Dialog::Dialog(QWidget *parent) :
            QDialog(parent), ModalBtn(this), NormalBtn(this), MixedBtn(this)
    {
        ModalBtn.setText("Modal Dialog");
        ModalBtn.move(20, 20);
        ModalBtn.resize(100, 30);
    
        NormalBtn.setText("Normal Dialog");
        NormalBtn.move(20, 70);
        NormalBtn.resize(100, 30);
    
        MixedBtn.setText("Mixed Dialog");
        MixedBtn.move(20, 120);
        MixedBtn.resize(100, 30);
    
        connect(&ModalBtn, SIGNAL(clicked()), this, SLOT(ModalBtn_Clicked()));
        connect(&NormalBtn, SIGNAL(clicked()), this, SLOT(NormalBtn_Clicked()));
        connect(&MixedBtn, SIGNAL(clicked()), this, SLOT(MixedBtn_Clicked()));
    
        resize(140, 170);
    }
    
    // 模态对话框
    void Dialog::ModalBtn_Clicked()
    {
        qDebug() << "ModalBtn_Clicked() Begin";
    
        QDialog dialog(this);      // 一般而言,模态和非模态使用时都要指定父组件。
    
        dialog.exec();             //如果是 dialog->show();  结果会一闪而过,是非堵塞的,程序继续向下运行,函数运行完毕,会释放掉变量。
    
        // done(Accepted);
    
        qDebug() << "ModalBtn_Clicked() End";
    }
    
    // 非模态对话框
    void Dialog::NormalBtn_Clicked()
    {
        qDebug() << "NormalBtn_Clicked() Begin";
    
        QDialog* dialog = new QDialog(this);         // 非模态中要指定父子关系 , 指针在函数内部被定义,之后就没有指针指向窗口对象了,对话框可以被关闭,内存资源并没有被释放;
    
        dialog->setAttribute(Qt::WA_DeleteOnClose);  // 小技巧:设置属性,对话框会释放掉自己,不产生任何的内存泄露
        dialog->show();
    
        // done(Rejected);
    
        qDebug() << "NormalBtn_Clicked() End";
    }
    
    // 混合属性对话框(运行机理上是非模态对话框,表现模式上是模态对话框)
    void Dialog::MixedBtn_Clicked()
    {
        qDebug() << "MixedBtn_Clicked() Begin";
    
        QDialog* dialog = new QDialog(true);
    
        dialog->setAttribute(Qt::WA_DeleteOnClose);
        dialog->setModal(true);                      // 设置非模态对话框,行为类似于模态对话框
        dialog->show();
    
        // done(100);
    
        qDebug() << "MixedBtn_Clicked() End";
    }
    
    Dialog::~Dialog()
    {
        qDebug() << "~Dialog()";
    }
    
    

    main.cpp

    #include <QtGui/QApplication>
    #include <QWidget>
    #include <QDialog>
    #include "Dialog.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Dialog dlg;
    
        dlg.show();
    
        return a.exec();
    }
    
    
    

    对话框的返回值(注意事项)

    注意实际开发中,最后的返回值
    其他操作,请看引用文章

    #include <QtGui/QApplication>
    #include "Dialog.h"
    #include <QDebug>
    
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Dialog w;
        int r = w.exec();       //这里已经是进入消息循环,所以返回值那里不再用a.exec()
    
        if(r==QDialog::Accepted)
        {
            qDebug() << "Accepted";
        }
        else if(r == QDialog::Rejected)
        {
            qDebug() << "Rejected";
        }
        else
        {
            qDebug() << r;
        }
    
        //return a.exec();   应该返回 r: 用户的选择,否则会两次进入消息循环,关闭主窗口,应用程序不结束,因为消息循环没有退出。
        return r;
    }
    
    
    展开全文
  • 对话框及其类型

    2019-01-21 21:34:26
    模态对话框,显示后无法与父窗口进行交互,阻塞式的对话框调用方式; 非模态对话框,显示后独立存在,可以与与父窗口进行交互;非阻塞式的对话框调用方式。 模态对话框;依赖用户选择场合;消息提示...
  • 针对dialog各种对话框的总结,每类都有代码提供,方便使用
  • 一个简单而强大的对话框,基于Vue2.x的对话框类型,包括Modal,Alert,Mask和Toast
  • QDialog是QT中所有对话框的基类,QDialog继承于QWidget 是一种容器类型的组件,QDialog 对象 只能 必须 作为顶层的窗口而存在,不能作为子部件嵌入其他容器中,QDialog是定制了窗口样式的特殊的 QWidget。...
  • 1、对话框的概念 1.1、 对话框是与用户进行简短交互的顶层窗口 1.2、 QDialog是Qt中所有对话框窗口的基类 1.3、 QDialog继承于QWidget是一种容器类型的组件 2、QDialog的意义 2.1、 QDialog作为一种专用的交互...
  • 对话框的类关系图: QDialog有:是其他对话框的的父类。 #include "dialog.h" #include <QApplication> #include <QDebug> int main(int argc, char *argv[]) { QApplication ...
  • 1、对话框的概念 对话框是与用户进行简短交互的顶层窗口 QDialog 是 Qt 中所有对话框窗口的基类 QDialog 继承于 QWidget 是一种容器类型组件 QDialog 的意义 — QDialog 作为一种专用的交互窗口而存在 — QDialog ...
  • 1.对话框是与用户进行简单交互顶层窗口2.QDialog是Qt中所有对话框窗口基类3.QDialog继承于QWidget是一种容器类组件A.QDialog意义1.QDialog作为一种专用交互窗口而存在2.QDialog不能作为子部件嵌入其它容器...
  • 创建对话框主要分两大步:第一,创建对话框资源,主要包括创建新的对话框模板、设置对话框属性和为对话框添加各种控件;... 一、采用基于对话框的应用程序类型设计对话框 目的:设计模态与非模态对话框 ...
  • 长按事件触发对话框 Java代码(不全) @Override public boolean onItemLongClick(AdapterView&lt;?&gt; parent, View view, int position, long id) { AlertDialog.Builder builder ...
  • 文件对话框的创建

    2016-12-06 10:56:29
    文件对话框分为打开文件对话框和保存文件对话框, 打开文件对话框用于选择要打开的文件的路径,保存文件对话 ...BOOL bOpenFileDialog, // 指定文件对话框的类型。 TRUE :打开文件对话框,else:保存文件对话框
  • mfc 采用基于对话框的应用程序类型设计对话框,功能实现了建立模态对话框以及非模态对话框,形象的描述了二者的差别
  • 目录:简介对话框的类型深色主题实现前提条件创建对话框演示贡献功劳简介AestheticDialogs是一个提供美观定制的Dialog的库,其灵感来自Laravel Notify对话框的类型。AestheticDialog目前,该库提供了七种类型的...
  • 在运行中转换对话框类型需要用到属性 Dialog Frame WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_CLIPSIBLINGS | DS_MODALFRAME WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE Thin 比Dialog Frame缺少一个扩展属性...
  • win32 5.4 对话框的简介

    2019-05-21 10:18:50
    对话框的类型: modEl 对话框:模板对话框,用户在关闭对话框前不能切换到该程序的其他窗口。 modeless 对话框:非模板对话框,可以任意切换该程序的其他窗口。 对话框的工作原理: 对话框创建使用的函数: ...
  • Vue2简单干净说明性对话框插件,对话框类型包括Modal , Alert , Mask和Toast 范例与文件 资源管理器开启 jQuery版本: 对话框图标 警报对话框中使用图标由控件图标,使用吐司图标来自 安装 npm i -S v-...
  • JOptionPane有助于方便地弹出要求用户提供值或向其发出通知标准对话框,虽然由于方法数多使JOptionPane类可能显得复杂,但几乎所有此类使用都是对下列静态showXxxDialog方法之一单行调用: 所有这些方法还可能...
  • flex 打开指定类型的打开对话框flex 打开指定类型的打开对话框flex 打开指定类型的打开对话框flex 打开指定类型的打开对话框
  • 11.7 对话框

    2020-04-25 10:20:55
    1.选择对话框的类型(消息,确认,选项,输入) 2.选择图标(错误,信息,警告,问题,无或者自定义) 3.选择消息(字符串,图标,自定义组件,或者他们的集合) 4.对于确认对话框,选择选项类型(默认,Yes/No,Yes...
  • 一个综合了各个类型对话框的demo一个综合了各个类型对话框的demo一个综合了各个类型对话框的demo一个综合了各个类型对话框的demo
  • 对话框

    2020-10-12 11:34:26
    一、对话框的创建和使用与Frame相似,不同的对话框表示一次信息交换的活动。当完成交换后,单击对话框的按钮将关闭该对话框,对话框只是应用程序生命周期的一部分。 #对话框的创建 import wx #定义窗口类MyFrame,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,366
精华内容 3,746
关键字:

对话框的类型