当前位置:  编程技术>c/c++/嵌入式
本页文章导读:
    ▪QT中获取选中的radioButton的两种方法      QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行:方法一:采用对象名称进行获取代码: 1 QRadioButton* pbtn = qobject_cast<QRadioButton*>(ui->BG->checkedButton()); 2 .........
    ▪cocos2d-x:获取不重复的随机数      先上源码: 1 bool HelloWorld::init() 2 { 3 ////////////////////////////// 4 // 1. super init first 5 if ( !CCLayer::init() ) 6 { 7 return false; 8 } 9 int num[20];10 for (int i=0; i<20; i++) {11 num[i.........
    ▪关于vtordisp知多少?      关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自于对标题中“vtordisp”的好奇。其实这个关键词也是来源于我最近查看对象模型的时候偶然发现的。我是一个喜欢深究问题根.........

[1]QT中获取选中的radioButton的两种方法
    来源:    发布时间: 2013-10-14

QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行:

方法一:采用对象名称进行获取

代码:

1 QRadioButton* pbtn = qobject_cast<QRadioButton*>(ui->BG->checkedButton());
2 QString name = pbtn->objectName();
3 if(!QString::compare(name, "radioButton"))
4 {
5 QMessageBox::information(this, "Tips", "red chosed!", QMessageBox::Ok);
6 }
7 else if(!QString::compare(name, "radioButton_2"))
8 {
9 QMessageBox::information(this, "Tips", "blue chosed!", QMessageBox::Ok);
10 }
11 else
12 {
13 QMessageBox::information(this, "Tips", "black chosed!", QMessageBox::Ok);
14 }

该代码片段中,首先使用qobject_cast将checkedButton()函数返回的QAbstractionButton转换为其子类类型QRadioButton.然后,获取被选中按钮的对象名。这可以通过获取objectName这个属性获取。再稍作判断即可得知结果。注:BG是手动添加的QGroupButton类型,radioButton和radioButton_2,radioButton_3都是UI中添加的radioButton控件。

方法二:通过button的ID来获取

代码:

位于构造函数中的代码(初始选中第一个按钮):

1 ui->BG->setId(ui->radioButton, 0);
2 ui->BG->setId(ui->radioButton_2, 1);
3 ui->BG->setId(ui->radioButton_3, 2);
4 ui->radioButton->setChecked(true);

响应信号的槽函数或其他函数中的代码:

1 int a = ui->BG->checkedId();
2 switch(a)
3 {
4 case 0:
5 QMessageBox::information(this, "Tips", "Red chosed!", QMessageBox::Ok);
6 break;
7 case 1:
8 QMessageBox::information(this, "Tips", "blue chosed!", QMessageBox::Ok);
9 break;
10 case 2:
11 QMessageBox::information(this, "Tips", "black chosed!", QMessageBox::Ok);
12 break;
13 default:
14 break;
15 }

两种方法具有同样的效果。

本文链接


    
[2]cocos2d-x:获取不重复的随机数
    来源:    发布时间: 2013-10-14

先上源码:

1 bool HelloWorld::init()
2 {
3 //////////////////////////////
4 // 1. super init first
5 if ( !CCLayer::init() )
6 {
7 return false;
8 }
9 int num[20];
10 for (int i=0; i<20; i++) {
11 num[i] = i;
12 }
13
14 for (int i=0; i<20; i++) {
15 int r = random(i, 19);
16 swap(num[i], num[r]);
17 CCLOG("rand:%d", num[i]);
18 }
19
20 return true;
21 }
22
23 int HelloWorld::random(int start, int end){
24 float i = CCRANDOM_0_1()*(end-start+1)+start;
25 return (int)i;
26 }

第24行的语句的意思是获取[start, end]范围的随机数。

第9--12行初始化一个长度为20的数组,初始化的内容是将要被打乱的目标随机数。

第14-18行首先获取一个范围为[i, 19]的随机数r,然后将index为i和index为r的数进行交换,然后输出利用随机数打乱后的数组。

另外,实际使用时不要忘记设置随机数种子,不然的话每次获取的随机数都是相同的

1 srand(time(NULL)); //放在调用随机函数的循环外

 

本文链接


    
[3]关于vtordisp知多少?
    来源:    发布时间: 2013-10-14

关于vtordisp知多少?

我相信不少人看到这篇文章,多半是来自于对标题中“vtordisp”的好奇。其实这个关键词也是来源于我最近查看对象模型的时候偶然发现的。我是一个喜欢深究问题根源的人(有点牛角尖吧),所以当我第一次发现vtordisp的时候,我也是很自然的把它输进google查找相关资料,但是结果令我不太满意。不过,即使如此,我还是把与它相关的资料整理如下,并结合自己的理解和大家分享一下,希望能共同学习进步。

首先从产生“vtordisp”问题的那个例子开始。

class Base
{
public:
    int base;
    virtual void fun(){}
};
class Der:virtual public Base
{
    int der;
public:
    Der(){}
    virtual void fun(){}
};

Der对象模型如下:

1>  class Der    size(20):
1>      +---
1>   0    | {vbptr}
1>   4    | der
1>      +---
1>  8    | (vtordisp for vbase Base)
1>      +--- (virtual base Base)
1>  12    | {vfptr}
1>  16    | base
1>      +---
1>  
1>  Der::$vbtable@:
1>   0    | 0
1>   1    | 12 (Derd(Der+0)Base)
1>  
1>  Der::$vftable@:
1>      | -12
1>   0    | &(vtordisp) Der::fun
1>  
1>  Der::fun this adjustor: 12
1>  
1>  vbi:       class  offset o.vbptr  o.vbte fVtorDisp
1>              Base      12       0       4 1

我们发现对象的8字节偏移处,使用了4个字节存储了虚基类Base的vtordisp。在我的前一篇博客内,我们并未涉及这个内容。首先,我从查阅一下vtordisp的MSDN的解释

    
最新技术文章:
▪C++单例模式应用实例
▪C++设计模式之迭代器模式
▪C++实现动态分配const对象实例
▪C++设计模式之中介者模式
▪C++设计模式之备忘录模式
▪C++插入排序算法实例
▪C++冒泡排序算法实例
▪C++选择排序算法实例
▪C++归并排序算法实例
▪C++设计模式之观察者模式
▪C++中复制构造函数和重载赋值操作符总结
▪C++设计模式之状态模式
▪C++设计模式之策略模式
▪C++设计模式之访问者模式
▪C++设计模式之模板方法模式
▪C++实现下载的代码
▪C++模板之特化与偏特化详解
▪C++实现查壳程序代码实例
▪C语言、C++内存对齐问题详解
▪C语言、C++中的union用法总结
▪C++基于CreateToolhelp32Snapshot获取系统进程实例
▪C++中memcpy和memmove的区别总结
▪C++通过TerminateProess结束进程实例
▪C++内存查找实例
▪C++实现CreatThread函数主线程与工作线程交互的...
▪C++设计模式之桥接模式
▪C++中关键字Struct和Class的区别
▪C++设计模式之组合模式
▪C++ COM编程之什么是组件?
▪C++ COM编程之什么是接口?
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3