糖果派对官方网站_可以赌钱的糖果游戏_手机版
Android开辟必知--两种区别对话框的完成

Android开辟必知--两种区别对话框的完成

作者:网络编程    来源:未知    发布时间:2019-12-23 19:51    浏览量:

本身做了个缓慢解决方案,为了便利在各类子对话框中调用CStatusBar,小编将它定义在了App文件中。小编第大器晚成在主对话框对m_statusBar做初步化操作,未有毛病,可是当自个儿在叁个子对话框的线程中调用时却夭亡了。前边是代码:

 1   /**
 2      * 多选列表项对话框
 3      * @author codingblock 2015-8-11
 4      * @param  context     上下文
 5      * @param  title            对话框标题
 6      * @param  items       对话框列表项 CharSequence类型数组
 7      * @param  checked     对话框初始选定状态  boolean类型数组
 8      * @return
 9      */
10     public AlertDialog.Builder multiChoiceDialog(final Context context, String title, final CharSequence[] items, final boolean[] checked){
11         AlertDialog.Builder builder = new AlertDialog.Builder(context)
12         .setTitle(title)
13         .setIcon(R.drawable.ic_launcher)
14         //第二个参数为默认选中项,是一个boolean型的数组
15         .setMultiChoiceItems(items, checked, null)
16         .setPositiveButton("完成", null)
17         .setNegativeButton("取消", null);
18         return builder;
19     }
话题一:QDialog的show()和exec()定义

** 1. show()**
呈现三个情势对话框。调整权立刻重返给调用函数。弹出窗口是还是不是情势对话框,决定于modal属性的值。
**Android开辟必知--两种区别对话框的完成。 2. exec()**
浮现叁个方式对话框,何况锁住程序直到顾客关闭该对话框截至。函数重返一个DialogCode结果。
在对话框弹出里面,客商不可切换同程序下的此外窗口,直到该对话框被关门。
** 3. 形式和非方式对话框**
形式对话框:弹出窗口的时候,整个程序就被锁定了,处于等候景况,直到对话框被关闭。这时候往往是急需对话框的再次回到值进行下边包车型客车操作。如:确认窗口(选用“是”或“否”)。
非方式对话框:弹出窗口之后,调用立刻重回,继续上面包车型地铁操作。这里只是三个调用指令的产生,不等待也不做此外管理。如:查找框。show(卡塔尔(قطر‎即能够显得非方式也足以显得方式对话框(设置modal值)。当modal=true的时候是还是不是跟exec(卡塔尔国就同一了啊?经过测试,照旧有分其余。使用show(卡塔尔国,纵然在对话框弹出的时候,程序的其他操作(按键、窗口切换等)都失效了;可是程序依然在调用对话框之后,立即赶回继续实行前边的代码。那样,你就不会获得窗口的重回值。
使用exec(卡塔尔(英语:State of Qatar),在调用之后,程序就被锁定在原地。等待窗口的关门。

二.QWidget落成格局对话框
QDialog的show(卡塔尔(قطر‎函数来自其父类QWidget。而exec()则是同心同德的。
接二连三QWidget类来做弹出窗口,它的实惠正是便于、灵活,既可以够做为弹出窗口用也足以放置其余的页面里(QDialog是老大的)。但难题是,QWidget未有exec(卡塔尔国函数。所以想弹出那样效仿出来的情势对话框就可怜了。
也查过一些材质,有说用while(true卡塔尔(英语:State of Qatar)循环的,有说用接纳事件的,但都以为到不太好。
翻看了QDialog类的exec(卡塔尔国函数。发现此中相近调用了show(卡塔尔(قطر‎,只是在末端又调用了一句qApp->enter_loop()嵌套一个新的音讯循环来阻塞当前事件bb电子糖果派对,的施行;然后在hide(卡塔尔函数里调用了qApp->exit_loop()来退出当前的新闻循环并继续推行原事件。
到QT扶助里查了瞬间那多个函数,解释如下:
enter_loop():
以此函数被放任了。它依然被封存下来是为了使旧的代码能够世襲专业。大家刚强建议不要在新写的代码里使用它。那几个函数直接出席主音信循环里(递归地)。除非你真的明白您在做什么样,不然不要调用它。建议:QApplication::eventLoop(卡塔尔->enterLoop(卡塔尔国。
exit_loop():
同生龙活虎被撇下了。建议利用:QApplication::eventLoop(卡塔尔->exitLoop(卡塔尔(قطر‎。
唤醒:那三个操作都会进来主消息循环,慎用!
那就遵照提议的做呢,反正效果都以同黄金年代的。改进原本的自定义窗口,在其间扩大了四个函数,分别完毕打开和倒闭窗口,封装了eventLoop(卡塔尔的调用。代码如下:

#include <qapplication.h>
#include <qeventloop.h>
/*模拟QDialog::exec(),以模式对话框方式显示*/
void MyWidget::doExec()
{
    this->show();
    in_loop = TRUE;
    //qApp->enter_loop();
    QApplication::eventLoop()->enterLoop();
}
/*关闭窗口*/
void MyWidget::doClose()
{
    if ( in_loop ) {
    in_loop = FALSE;
    //qApp->exit_loop();
    QApplication::eventLoop()->exitLoop();
    }
    this->close();
}

归结:QWidget落成情势对话框exec(卡塔尔(قطر‎[[1]](https://www.jianshu.com/p/b47426f07893#fn1),内部机制为enter_loop() 即先举办对话框函数里面循环,完毕自身函数体内容,再实践exit_loop()退出函数体循环。相像Objective-C语言的runtime机制


  1. QDialog实现对话框的格局状态:在该对话框张开未关门早先,其余对话框(窗体卡塔尔不恐怕进展操作。 ↩
//定义的线程信息结构体structstruct_MyInfo{......CStatusBar*statusBar;};

//对话框中OnInitDialog()BOOLCXXXDlg::OnInitDialog(){CDialogEx::OnInitDialog();......theApp.m_statusBar.SetPaneText(0,L"正在获取版本信息...");//---这里没事struct_MyInfo*p=newstruct_MyInfo;......p-statusBar=(theApp.m_statusBar);//---m_statusBar我是定义在App中的CWinThread*pThread=AfxBeginThread(MyThread,(LPVOID)p);......returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//异常:OCX属性页应返回FALSE}

//线程UINTMyThread(LPVOIDlpParam){struct_MyInfo*p=(struct_MyInfo*)lpParam;......p-statusBar-SetPaneText(0,L"就绪");//---就这里会崩溃return0;}

  ·set艾达pter(卡塔尔(قطر‎:设置对话框内容为自定义列表项。

次第开展音讯循环,等待恐怕输入进行响应

  ·setView(卡塔尔(قطر‎:设置对话框内容为自定义View。

  4、调用AlertDialog.Builder的连带办法设置对话框内容。

  ·setSingleChoiceItems(卡塔尔:设置对话框内容为单选列表项。

 1 /**
 2      * 显示提示消息的对话框
 3      * @author codingblock 2015-8-11
 4      * @param  context     上下文
 5      * @param  title       对话框标题
 6      * @param  message     对话框提示内容
 7      * @return
 8      */
 9     public AlertDialog.Builder simpleDialog(final Context context, String title, String message){
10         AlertDialog.Builder builder = new AlertDialog.Builder(context)
11         .setTitle(title)
12         .setIcon(R.drawable.ic_launcher)
13         .setMessage(message)
14         .setPositiveButton("完成", null)
15         .setNegativeButton("取消", null);
16         return builder;
17     }
 1   public void onClickSimple(View v){
 2         builder = new Dialog().simpleDialog(this, "简单对话框", "对话框内容");
 3         builder.setPositiveButton("确定", new OnClickListener() {
 4             @Override
 5             public void onClick(DialogInterface arg0, int arg1) {
 6                 //确定
 7             }
 8         })
 9         .setNegativeButton("取消", new OnClickListener() {
10             @Override
11             public void onClick(DialogInterface arg0, int arg1) {
12                 //取消
13             }
14         });
15         builder.create().show();
16     }

  ·setItems(卡塔尔(英语:State of Qatar):设置对话框内容为简易列表项。

  bb电子糖果派对 1

6、自定义View的对话框

  ·setMessage(卡塔尔(قطر‎:设置对话框内容为简单文本内容。

 1   /**
 2      * 单选列表项对话框
 3      * @author codingblock 2015-8-11
 4      * @param  context     上下文
 5      * @param  title       对话框标题
 6      * @param  items       对话框列表项 CharSequence类型数组
 7      * @return
 8      */
 9     public AlertDialog.Builder simpleChoiceDialog(final Context context, String title, final CharSequence[] items){
10         AlertDialog.Builder builder = new AlertDialog.Builder(context)
11         .setTitle(title)
12         .setIcon(R.drawable.ic_launcher)
13         //第二个参数为默认选中项, 0:代表默认选中第一项
14         .setSingleChoiceItems(items, 0, new OnClickListener() {
15             @Override
16             public void onClick(DialogInterface dialog, int which) {
17                 Toast.makeText(context, "您选中了:"+ items[which], Toast.LENGTH_SHORT).show();
18             }
19         });
20         return builder;
21     }

4、多选列表对话框

  以上代码通过setAdapter(卡塔尔国设置了对话框的剧情,该办法需求传入叁个Adapter参数,那样的话,就足以经过Adapter实现三个构件的绘图。当中setAdapter方法中调用的构造文件array_item.xml代码如下:

上边通过多少个实例来介绍一下AlertDialog的用法。

 1   /**
 2      * 自定义列表项对话框
 3      * @author codingblock 2015-8-11
 4      * @param  context     上下文
 5      * @param  title       对话框标题
 6      * @param  items       对话框列表项 String类型数组,也可更具需要改成其他类型
 7      * @return
 8      */
 9     public AlertDialog.Builder customListDialog(final Context context, String title, String[] items){
10         AlertDialog.Builder builder = new AlertDialog.Builder(context)
11         .setTitle(title)
12         .setIcon(R.drawable.ic_launcher)
13         .setAdapter(new ArrayAdapter<String>(context, R.layout.array_item, R.id.tv_item, items), null)
14         .setPositiveButton("完成", null)
15         .setNegativeButton("取消", null);
16         return builder;
17     }

友情链接: 网站地图
Copyright © 2015-2019 http://www.tk-web.com. bb电子糖果派对有限公司 版权所有