精华内容
下载资源
问答
  • 常见的模式对话框
    2017-09-23 09:16:19

    对话框是用来提醒用户输入,分为模式对话框和非模式对话框;
    模式对话框弹出后,之前的窗口被锁定,只有关闭对话框后,才能回到之前界面;(比较常见)
    非模式对话框则可以同时操作前后两个窗口;
    为了演示模式对话框,首先创建两个窗口,一个为带有登陆按钮的窗口,另一个是登陆界面如图:
    这里写图片描述
    这里写图片描述
    第一个窗口的创建很简答,之前已经学习过,通过连接PushButton的信号与槽,建立联系;
    重点在第二个窗口的创建,这个也是新学到的内容,右键点击解决方案,选择添加QT类,出现如下对话框,选择GUI类,进入下一个对话框
    这里写图片描述
    这里写图片描述
    重命名,并且把父类改为QDialog,创建完成后,解决方案中会增加新的ui以及对应的头文件和cpp文件。此时可以创建第二个对话框,并设置属性。同时建立按钮的关联。

    Qt7_1A.cpp

    #include "Qt7_1A.h"
    #include"LoginDlg.h" // 引用LoginDlg头文件
    #include<QDebug>  //  打印输出
    Qt7_1A::Qt7_1A(QWidget *parent)
        : QMainWindow(parent)
    {
        ui.setupUi(this);
        // 连接登陆按钮的信号与槽
        connect(ui.btnLogin,SIGNAL(clicked()),
            this, SLOT(OnBtnLogin()));
    }
    
    
    int Qt7_1A::OnBtnLogin() // 点击登陆按钮后,进入当前函数
    {
        // 使用对话框
        LoginDlg dlg(this);
        // 这里exce()函数要有一个返回值,要不然程序会堵塞
        int ret = dlg.exec(); // exec()函数就是执行命令,弹出对话框
        if (ret == QDialog::Accepted)
        {
            //取得用户输入
            qDebug() << dlg.m_user << dlg.m_password;
    
        }
        else
        {
    
    
        }
        return 0;
    }

    LoginDlg.cpp

    #include "LoginDlg.h"
    
    LoginDlg::LoginDlg(QWidget *parent)
        : QDialog(parent)
    {
        ui.setupUi(this);
    
        connect(ui.BtnOK, SIGNAL(clicked()), this, SLOT(OnBtnOK()));
        connect(ui.BtnCancel, SIGNAL(clicked()), this, SLOT(OnBtnCancel()));
    
    }
    
    LoginDlg::~LoginDlg()
    {
    }
    
    int LoginDlg::OnBtnOK()
    {
        //取得用户的输入
         m_user = ui.EditUser->text();
         m_password = ui.EditPassword->text();
    
        accept(); // 关闭当前对话框,并使exce()函数返回Accepted
        return 0;
    }
    int LoginDlg::OnBtnCancel()
    {
    
        reject();
        return 0;
    }
    更多相关内容
  • 窗口模式对话框只阻止访问与该对话框相关联的窗口,允许用户继续使用应用程序中的其他窗口。 显示模态对话框最常见的方法是调用它的exec()函数。当用户关闭对话框时,exec()将提供一个有用的返回值。想要关闭对..

    一、模态对话框

    模态对话框是一个对话框,它阻塞了对同一应用程序中其他可见窗口的输入。用于向用户请求文件名或用于设置应用程序首选项的对话框通常是模态的。对话框可以是应用程序模式(默认)或窗口模式。当应用程序模态对话框打开时,用户必须完成与对话框的交互并关闭它,然后才能访问应用程序中的任何其他窗口。窗口模式对话框只阻止访问与该对话框相关联的窗口,允许用户继续使用应用程序中的其他窗口。

    显示模态对话框最常见的方法是调用它的exec()函数。 当用户关闭对话框时,exec()将提供一个有用的返回值。 想要关闭对话框并返回适当的值,您必须连接一个默认按钮(对话框的默认按钮是当用户按Enter (Return)时按下的按钮。 此按钮用于表示用户接受对话框的设置并希望关闭对话框。 使用QPushButton::setDefault(), QPushButton::isDefault()和QPushButton::autoDefault()来设置和控制对话框的默认按钮。   ),例如一个OK按钮到accept()槽,一个Cancel按钮到reject()槽。 或者,您可以使用Accepted或Rejected调用done()槽。  

    另一种方法是调用setModal(true)或setWindowModality(),然后调用show()。 与exec()不同,show()将控制权立即返回给调用者。 调用setModal(true)对于进度对话框特别有用,因为用户必须能够与对话框交互,例如取消长时间运行的操作。 如果您同时使用show()和setModal(true)来执行长时间操作,则必须在处理过程中定期调用QCoreApplication::processEvents()来使用户能够与对话框进行交互。 

    其中setModal(ture)为模态对话框,setModal(false)为非模态对话框。

    二、非模态对话框:

    非模态对话框是在同一个应用程序中独立于其他窗口操作的对话框。文字处理器中的查找和替换对话框通常是非模态的,允许用户与应用程序的主窗口和对话框进行交互。

    使用show()显示非模态对话框,它会立即将控制权返回给调用者

    如果在隐藏对话框后调用show()函数,对话框将显示在原来的位置。这是因为窗口管理器决定了程序员未显式放置的窗口的位置。要保留被用户移动的对话框的位置,请将其位置保存在closeEvent()处理程序中,然后在再次显示对话框之前将其移动到该位置。

    调用close()方法后首先它会向widget发送一个关闭事件(QCloseEvent)。如果widget接受了关闭事件(QCloseEvent),窗口将会隐藏(实际上调用hide())。如果widget不接受关闭事件,那么窗口将什么也不做。默认情况下widget会接受关闭事件,我们可以重写QCloseEvent事件,可以选择接受或者不接受。

       如果widget设置了Qt::WA_DeleteOnClose属性,widget将会被释放。不管widget是否可见,关闭事件都会传递给widget。即接收到QCloseEvent事件后,除了调用hide()方法将窗口隐藏,同时会调用deleteLater()方法将窗口释放掉,不会再占用资源。

       所以说调用close()并不一定就会将窗口对象销毁。而只有设置了 Qt::WA_DeleteOnClose属性才会删除销毁。如果这个属性没有设置,close()的作用和hide(),setvisible(false)一样,只会隐藏窗口对象而已,并不会销毁该对象。

    三、实现

    在此我们使用按钮来跳转到槽函数,进而实现对话框的调用。

    接着实现槽函数

    别忘记头文件

    最后实现效果

    展开全文
  • 3.五种常见对话框

    2022-04-07 09:14:10
    五种常见对话框简介一、普通对话框二、单选对话框三、多选对话框四、进度条对话框五、消息对话框六、代码 简介 对话框也是程序与用户交互的一种方式,通常用于显示当前程序提示信息以及相关说明,以小窗口形式展现。...

    3.五种常见对话框

    简介

    对话框也是程序与用户交互的一种方式,通常用于显示当前程序提示信息以及相关说明,以小窗口形式展现。

    常见对话框有以下几种:

    • 普通对话框
    • 单选对话框
    • 多选对话框
    • 进度条对话框
    • 消息对话框
    • 自定义对话框

    本文主要介绍前五种对话框,对于自定义对话框暂不赘述。

    一、普通对话框

    普通对话框(Dialog)一般只会显示提示信息,并具有确定和取消按钮。

    在这里插入图片描述

    private void btn_normalClcik() {
    		// 1. 先要创建构建器 this
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    
    		// 标题
    		builder.setTitle("警告");
    
    		// 图标
    		builder.setIcon(R.drawable.ic_launcher);
    
    		// 提示信息
    		builder.setMessage("你确定要退出吗?");
    
    		// 确定按钮
    		// DialogInterface: 区分view包下的 OnClickListener();
    		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getApplicationContext(), "点击了确定按钮",
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 取消按钮
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getApplicationContext(), "点击了取消按钮",
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 一定要把对话框显示出来
    		builder.show();
    
    	}
    

    二、单选对话框

    单选对话框和RadioButton作用类似,只能选择一个选项,它是通过AlertDialog对象调用setSingleChoiceItems()方法创建的。

    在这里插入图片描述

    private void btn_singleChoseCLick() {
    
    		// 创建默认值
    		int moren = 1;
    
    		checked = moren;
    
    		// 1. 先要创建构建器 this
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    
    		// 标题
    		builder.setTitle("请选择你的性别?");
    
    		// 图标
    		builder.setIcon(R.drawable.ic_launcher);
    
    		// 创建items
    		final String[] items = new String[] { "男", "女", "中" };
    
    		// 设置内容 -1 表示没有默认值
    		builder.setSingleChoiceItems(items, moren,
    				new DialogInterface.OnClickListener() {
    
    					@Override
    					public void onClick(DialogInterface dialog, int which) {
    						// TODO Auto-generated method stub
    						// System.out.println("----which---"+which);
    
    						checked = which;
    					}
    				});
    
    		// 确定按钮
    		// DialogInterface: 区分view包下的 OnClickListener();
    		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    
    			@Override
    			// which -2
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    
    				Toast.makeText(getApplicationContext(), items[checked],
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 取消按钮
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
    			@Override
    			// which -1
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getApplicationContext(), "点击了取消按钮",
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 显示出来
    		builder.show();
    
    	}
    

    三、多选对话框

    多选对话框通常在需要勾选多种选项时使用,例如添加兴趣爱好、喜爱的电影等。创建多选对话框与创建单选对话框类似,调用setMultiChoiceItems()方法就可实现。

    在这里插入图片描述

    	// 点击多选对话框
    	private void btn_moreChoseCLick() {
    		// 1. 先要创建构建器 this
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    
    		// 标题
    		builder.setTitle("请选择你喜欢的运动?");
    
    		// 图标
    		builder.setIcon(R.drawable.ic_launcher);
    
    		// 创建items
    		final String[] items = new String[]{"乒乓球","羽毛球","篮球","足球"};
    		
    		//创建默认值 
    		final boolean[] checkedItems = new boolean[]{false,false,true,false};
    		// 设置内容 
    		builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    				// TODO Auto-generated method stub
    //				System.out.println("which = "+which + ", ischecked :"+isChecked );
    				checkedItems[which] = isChecked;	
    			}
    		});
    		
    
    		// 确定按钮
    		// DialogInterface: 区分view包下的 OnClickListener();
    		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    
    			@Override
    			// which -2
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				
    				//代码实现
    				String text ="";
    				for (int i = 0; i < items.length; i++) {
    					if(checkedItems[i]){
    						text+=items[i];
    					}
    				}
    
    				Toast.makeText(getApplicationContext(), "你喜欢的运动是"+text,
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 取消按钮
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
    			@Override
    			// which -1
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getApplicationContext(), "点击了取消按钮",
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 显示出来
    		builder.show();
    
    	}
    

    四、进度条对话框

    进度条对话框一般在应用程序实现耗时操作时使用。Android中提供了两种进度条样式,圆形进度条和水平进度条。

    在这里插入图片描述

    	//进度条对话框
    	private void btn_progresCLick() {
    		
    		final ProgressDialog pro = new ProgressDialog(this);
    		
    		pro.setIcon(R.drawable.ic_launcher);
    		
    		pro.setTitle("正在努力下载中》》》》");
    		
    		pro.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    		
    		
    		//进度条最大值
    		pro.setMax(100);
    		//当前值
    		
    		new Thread(new Runnable() {	
    			@Override
    			public void run() {
    				int progress =0;
    				// TODO Auto-generated method stub
    				for (int i = 1; i <= 100; i++) {
    					
    					pro.setProgress(i);
    					//让线程睡一会
    					try {
    						new Thread().sleep(50);
    						progress++;
    						pro.incrementProgressBy(progress);
    					}
    					 catch (InterruptedException e) {
    						e.printStackTrace();
    					}	
    				}
    				
    				//让对话框消失  
    				pro.dismiss();
    			}
    		}).start();
    		
    		//对话框 消失的时候 应提示用户 下载完成 
    		
    		//代码实现
    
    		pro.setOnDismissListener(new DialogInterface.OnDismissListener() {
    			
    			@Override
    			public void onDismiss(DialogInterface dialog) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getApplicationContext(),"下载完成",Toast.LENGTH_SHORT).show(); 
    			}
    		});
    		
    		
    		
    		
    		pro.show();
    	
    		
    	}
    

    五、消息对话框

    消息对话框(Toast)是轻量级信息提醒机制,显示在应用程序界面的最上层,一段时间后自动消失不会打断当前操作,也不获得焦点。
    在这里插入图片描述

    Toast.makeText ( this, "Hello,Toast" , Toast.LENGTH_SHORT ).show();
    

    六、代码

    layout文件:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.example.dialog.MainActivity" >
    
        <Button
            android:id="@+id/btn_normal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="普通对话框" />
        
        <Button
            android:id="@+id/btn_singlechose"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="单选对话框" />
        
        <Button
            android:id="@+id/btn_morechose"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="多选对话框" />
        
         <Button
            android:id="@+id/btn_progress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="进度条对话框" />
    
    </LinearLayout>
    
    

    MainActivity.java文件

    package com.example.dialog;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.ProgressDialog;
    import android.content.DialogInterface;
    import android.content.res.Resources.Theme;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class MainActivity extends Activity implements OnClickListener {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		// 1.找到按钮
    		Button btn_normal = (Button) findViewById(R.id.btn_normal);
    		Button btn_singlechose = (Button) findViewById(R.id.btn_singlechose);
    		Button btn_morechose = (Button) findViewById(R.id.btn_morechose);
    		Button btn_progress = (Button) findViewById(R.id.btn_progress);
    
    		// 2.监听按钮点击
    		btn_normal.setOnClickListener(this);
    		btn_singlechose.setOnClickListener(this);
    		btn_morechose.setOnClickListener(this);
    		btn_progress.setOnClickListener(this);
    	}
    
    	// 关于对话框 AlertDialog.Builder(this);
    	// 获取上下文环境 :
    	// 一定要用this 不能使用getApplicationContext()
    
    	@Override
    	// 按钮点击方法
    	public void onClick(View v) {
    		int id = v.getId();
    
    		switch (id) {
    		case R.id.btn_normal: // 点击的普通对话框按钮
    
    			btn_normalClcik();
    
    			break;
    		case R.id.btn_singlechose: // 点击的单选对话框
    			btn_singleChoseCLick();
    			break;
    		case R.id.btn_morechose: // 点击的多选对话框
    			btn_moreChoseCLick();
    			break;
    			
    		case R.id.btn_progress: // 点击的进度条对话框
    			btn_progresCLick();
    			break;
    
    		}
    
    	}
    
    	//进度条对话框
    	private void btn_progresCLick() {
    		
    		final ProgressDialog pro = new ProgressDialog(this);
    		
    		pro.setIcon(R.drawable.ic_launcher);
    		
    		pro.setTitle("正在努力下载中》》》》");
    		
    		pro.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    		
    		
    		//进度条最大值
    		pro.setMax(100);
    		//当前值
    		
    		new Thread(new Runnable() {	
    			@Override
    			public void run() {
    				int progress =0;
    				// TODO Auto-generated method stub
    				for (int i = 1; i <= 100; i++) {
    					
    					pro.setProgress(i);
    					//让线程睡一会
    					try {
    						new Thread().sleep(50);
    						progress++;
    						pro.incrementProgressBy(progress);
    					}
    					 catch (InterruptedException e) {
    						e.printStackTrace();
    					}	
    				}
    				
    				//让对话框消失  
    				pro.dismiss();
    			}
    		}).start();
    		
    		//对话框 消失的时候 应提示用户 下载完成 
    		
    		//代码实现
    
    		pro.setOnDismissListener(new DialogInterface.OnDismissListener() {
    			
    			@Override
    			public void onDismiss(DialogInterface dialog) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getApplicationContext(),"下载完成",Toast.LENGTH_SHORT).show(); 
    			}
    		});
    		
    		
    		
    		
    		pro.show();
    	
    		
    	}
    
    	// 点击多选对话框
    	private void btn_moreChoseCLick() {
    		// 1. 先要创建构建器 this
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    
    		// 标题
    		builder.setTitle("请选择你喜欢的运动?");
    
    		// 图标
    		builder.setIcon(R.drawable.ic_launcher);
    
    		// 创建items
    		final String[] items = new String[]{"乒乓球","羽毛球","篮球","足球"};
    		
    		//创建默认值 
    		final boolean[] checkedItems = new boolean[]{false,false,true,false};
    		// 设置内容 
    		builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    				// TODO Auto-generated method stub
    //				System.out.println("which = "+which + ", ischecked :"+isChecked );
    				checkedItems[which] = isChecked;	
    			}
    		});
    		
    
    		// 确定按钮
    		// DialogInterface: 区分view包下的 OnClickListener();
    		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    
    			@Override
    			// which -2
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				
    				//代码实现
    				String text ="";
    				for (int i = 0; i < items.length; i++) {
    					if(checkedItems[i]){
    						text+=items[i];
    					}
    				}
    
    				Toast.makeText(getApplicationContext(), "你喜欢的运动是"+text,
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 取消按钮
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
    			@Override
    			// which -1
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getApplicationContext(), "点击了取消按钮",
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 显示出来
    		builder.show();
    
    	}
    
    	int checked = 2;
    
    	// 单选对话框
    	private void btn_singleChoseCLick() {
    
    		// 创建默认值
    		int moren = 1;
    
    		checked = moren;
    
    		// 1. 先要创建构建器 this
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    
    		// 标题
    		builder.setTitle("请选择你的性别?");
    
    		// 图标
    		builder.setIcon(R.drawable.ic_launcher);
    
    		// 创建items
    		final String[] items = new String[] { "男", "女", "中" };
    
    		// 设置内容 -1 表示没有默认值
    		builder.setSingleChoiceItems(items, moren,
    				new DialogInterface.OnClickListener() {
    
    					@Override
    					public void onClick(DialogInterface dialog, int which) {
    						// TODO Auto-generated method stub
    						// System.out.println("----which---"+which);
    
    						checked = which;
    					}
    				});
    
    		// 确定按钮
    		// DialogInterface: 区分view包下的 OnClickListener();
    		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    
    			@Override
    			// which -2
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    
    				Toast.makeText(getApplicationContext(), items[checked],
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 取消按钮
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
    			@Override
    			// which -1
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getApplicationContext(), "点击了取消按钮",
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 显示出来
    		builder.show();
    
    	}
    
    	// 点击了普通对话框
    	private void btn_normalClcik() {
    		// 1. 先要创建构建器 this
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    
    		// 标题
    		builder.setTitle("警告");
    
    		// 图标
    		builder.setIcon(R.drawable.ic_launcher);
    
    		// 提示信息
    		builder.setMessage("你确定要退出吗?");
    
    		// 确定按钮
    		// DialogInterface: 区分view包下的 OnClickListener();
    		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getApplicationContext(), "点击了确定按钮",
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 取消按钮
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getApplicationContext(), "点击了取消按钮",
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    
    		// 一定要把对话框显示出来
    		builder.show();
    
    	}
    
    }
    
    
    展开全文
  • 模式对话框 描述 阻塞同一应用程序中其它可视窗口输入的对话框。模式对话框有自己的事件循环,用户必须完成这个对话框中的交互操作,并且关闭了它之后才能访问应用程序中的其它任何窗口。模式对话框仅阻止访问与...

    模式对话框


    描述
    阻塞同一应用程序中其它可视窗口输入的对话框。模式对话框有自己的事件循环,用户必须完成这个对话框中的交互操作,并且关闭了它之后才能访问应用程序中的其它任何窗口。模式对话框仅阻止访问与对话相关联的窗口,允许用户继续使用其它窗口中的应用程序。

    显示模态对话框最常见的方法是调用其exec()函数,当用户关闭对话框,exec()将提供一个有用的返回值,并且这时流程控制继续从调用exec()的地方进行。通常情况下,要获得对话框关闭并返回相应的值,我们连接默认按钮,例如:”确定”按钮连接到accept()槽,”取消”按钮连接到reject()槽。另外我们也可以连接done()槽,传递给它Accepted或Rejected。

    如当我们用QtCreator打开一个项目或文件时,会出现以下画面

    我们可以正常点击模式对话框里的内容,并且可以放大和缩小对话框。

    但是我们不能点击除了模式对话框以外的对话框,包括主界面,(当然可以点击其他程序的对话框,如QQ)

    只有当我点击  打开   或   取消    后才能退出模式对话框,只有模式对话框退出后程序才能继续运行

    以下的代码都以mainwindow为主基类

    实例代码:主函数

    #include "mainwindow.h"
    #include <QApplication>
    #include <QDialog>
    #include <QtDebug>
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.setWindowTitle(QObject::tr("主界面"));
        w.show();
        QDialog *dlg=new QDialog(&w);
        dlg->setWindowTitle(QObject::tr("模式对话框"));
        dlg->exec();
        qDebug()<<"退出模式对话框"<<endl;
        w.setWindowTitle(QObject::tr("主界面模式对话框"));
        return a.exec();
    }

    运行结果:

    非模式对话框


    描述
    和同一个程序中其它窗口操作无关的对话框。在文字处理中的查找和替换对话框通常是非模式的,允许用户同时与应用程序的主窗口和对话框进行交互。调用show()来显示非模式对话框,并立即将控制返回给调用者。
    如果隐藏对话框后调用show()函数,对话框将显示在其原始位置,这是因为窗口管理器决定的窗户位置没有明确由程序员指定,为了保持被用户移动的对话框位置,在closeEvent()中进行处理,然后在显示之前,将对话框移动到该位置。

    我们不仅可以点击非模式对话框,还可以点击主界面

    实例代码:

    #include "mainwindow.h"
    #include <QApplication>
    #include <QDialog>
    #include <QtDebug>
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.setWindowTitle(QObject::tr("主界面"));
        w.show();
        QDialog *dlg=new QDialog(&w);
        dlg->setWindowTitle(QObject::tr("非模式对话框"));
        dlg->show();
        w.setWindowTitle(QObject::tr("主界面非模式对话框"));
        qDebug() << QStringLiteral("非模式对话框可立即执行");
        return a.exec();
    }

     

    半模式

    调用setModal(true)或者setWindowModality(),然后show()。有别于exec(),show() 立即返回给控制调用者。

    对于进度对话框来说,调用setModal(true)是非常有用的,用户必须拥有与其交互的能力,例如:取消长时间运行的操作。

    也就是说,半模式介于模式和非模式之间,程序可以再打开半模式对话框后继续运行,但是不能点击主界面

    实例代码:

    #include "mainwindow.h"
    #include <QApplication>
    #include <QDialog>
    #include <QtDebug>
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.setWindowTitle(QObject::tr("主界面"));
        w.show();
        QDialog *dlg=new QDialog(&w);
        dlg->setWindowTitle(QObject::tr("半模式对话框"));
        dlg->setModal(true);
        dlg->show();
        w.setWindowTitle(QObject::tr("主界面半模式对话框"));
        qDebug() << QStringLiteral("半模式对话可立即执行");
        return a.exec();
    }

     

     

     

     

    展开全文
  • React中的模式对话框

    2018-07-30 13:52:56
    在16.x版本之后React提供了Protals功能来解决模式对话框不在Dom根节点导致的一些BUG。除了Protal还有更多的方法去解决这些问题,本文来自David Gilbertson的博客,详细解释了React中模式对话框的一些问题,以及他给...
  • Android 常见对话框

    2021-06-07 09:14:39
    下面代码写了常见的几个对话框,包含:1、确定取消对话框2、单选对话框3、多选对话框4、进度对话框(加载时的)5、下载进度对话框packagecom.yuanlp.dialogs;importandroid.app.ProgressDialog;importandroid.content....
  • 提醒对话框手机上的App极大地方便了人们的生活,很多业务只需用户拇指一点即可轻松办理,然而这也...这个提醒对话框便是App开发常见的AlertDialog,说起这个AlertDialog,安卓开发者都有所耳闻,该对话框不外乎消...
  • Qt 之模式、非模式、半模式对话框

    万次阅读 多人点赞 2016-04-05 19:17:52
    模式对话框 描述 效果 源码 非模式对话框 描述 效果 源码 半模式对话框 描述 效果 源码 更多参考模式对话框描述阻塞同一应用程序中其它可视窗口输入的对话框。模式对话框有自己的事件循环,用户必须完成这个对话框中...
  • 创建无模式对话框

    2016-12-15 18:17:30
    在MFC的对话框程序中,对于初学者来说我们经常调用的是无模式对话框,因为它比较常见,而且简单,那么如何创建无模式对话框呢? 首先我们通过资源编辑器生成对话框资源,具体过程为: menu->insert->resource->...
  • Windows --- 模态对话框

    2022-06-04 19:46:54
    模态对话框:点击打开后,如果不把下面这个窗口关掉,不能操作它后面的窗口阻塞非模态对话框:DialogBoxA macro (winuser.h) - Win32 apps | Microsoft DocsDialogBoxA macro (winuser.h) - Win32 apps | Microsoft ...
  • 常见的查找和替换对话框便是无模式对话框的典型,在该对话框打开的同时,我们还可以进行其他工作。模式对话框会始终保持焦点。除非关闭对话框,否则无法切换窗口。 无模式对话框不会始终保持焦点,但始终保持显示...
  • 将窗口设计成对话框的样子方式比较多,很常见的方法就是使用XAML代码来修改样式,而此这边将讨论如何利用WIN32API 实现这个对话框 . . . 我们刚开始的样子是这样的: 改过的样子如下所示: 先准备Win32API: 后台...
  • C#对话框的使用

    2019-01-09 16:57:40
    在C#的行业中,弹出对话框是任何一个人都应该熟练掌握的内容,因为它非常常见,而且简单、易用。弹出对话框需要用到的函数是System.Windows.Forms中的MessageBox.Show函数,其中的参数介绍如下:
  • 一、对话框的两个特点和一些常见对话框 1.当弹出对话框是会结束UI线程(即主线程); 2.当前的Activity会失去焦点; 3.消息对话框、确认对话框、列表对话框、单选和多选对话框、自定义对话框 二、对话框的组成...
  • Javascript有许多内建的方法来产生对话框,如:window.alert(), window.confirm(),window.prompt().等。 然而IE提供更多的方法支持对话框。如:  showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5...
  • 模式对话框:  window.showModalDialog(sURL [, vArguments] [, sFeatures]) ; 参数说明:  sURL  必选参数,类型:字符串。用来指定对话框要显示的文档的URL。  vArguments  可选参数,类型:变体...
  • 模式对话框有自己的事件循环,用户必须完成这个对话框中的交互操作,并且关闭了它之后才能访问应用程序中的其它任何窗口。模式对话框仅阻止访问与对话相关联的窗口,允许用户继续使用其它窗口中的应用程序。 显
  • HTML窗口与对话框

    2021-01-20 07:01:51
    对话框是在当前窗口打开一个简易的交互框,对话框没有地址; 模态对话框则需要在关闭对话框的状况下才能对父窗口操作。 浏览器窗口(Window) window 是浏览器默认的对象, 该对象有一个open()方法打开一个新的...
  • 显示模态对话框常见的方法是调用其exec()函数: #pragma execution_character_set("utf-8") MainWindow *pMainWindow = new MainWindow(); pMainWindow->setWindowTitle("主界面"); pMainWindow->show(); ...
  • js模式对话框

    2012-07-13 11:08:00
    Javascript有许多内建的方法来产生对话框,如:window.alert(), window.confirm(),window.prompt().等。 然而IE提供更多的方法支持对话框。如:  showModalDialog() (IE 4+ 支持)  showModelessDialog() (IE 5...
  • MFC消息机制,UI线程,工作线程,模式对话框原理,非模式对话框原理

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,412
精华内容 18,164
热门标签
关键字:

常见的模式对话框