61阅读

as用法总结-QTreeWidget用法总结

发布时间:2017-11-30 所属栏目:as用法

一 : QTreeWidget用法总结

1.1. QTreeWidget用法

1、简介

QTreeWidget的初始化是使用一个QTreeWidgetItem 的list填充到QTreeWidget中。(www.61k.com) QTreeWidget的setColumnCount ( int )方法可以设置QTreeWidget显示的列数。

2、代码

int CEnergyquery::InitLeftTree()

{

//初始化左边作树形结构

QList<QTreeWidgetItem *> TreeWigItms; //使用一个QTreeWidgetItem 的list填充到

//QTreeWidget中

int ID = 0;

QString Name;

// QTreeWidgetItem的list中插入N个元素

for(int m=0;m<N;m++)

{

QTreeWidgetItem *PareNodeItm = new QTreeWidgetItem;

PareNodeItm->setData(0,Qt::UserRole,NodeID); //存储节点相关数据 PareNodeItm->setText(0, Name); //设置节点的名称 TreeWigItms.push_back(PareNodeItm);

//为 list中插入的元素添加M个子节点

for(int k=0;k<M;k++)

{

QTreeWidgetItem *ChidNodeItm = new QTreeWidgetItem(PareNodeItm); ChidNodeItm->setData(0, Qt::UserRole,ID); //节点相关数据 ChidNodeItm->setText(0, Name); //节点名称

}

}

//在QTreeWidget上显示树形结构

ui->treeWidget->insertTopLevelItems(0,TreeWigItms);

return 1;

widget QTreeWidget用法总结

}

widget QTreeWidget用法总结

3、常用函数:

1)void QTreeWidget::insertTopLevelItems ( int index, const QList<QTreeWidgetItem *> & items ) 从QTreeWidget的第Index元素处,开始插入列表QList<QTreeWidgetItem *> & items

2)QList<QTreeWidgetItem *> QTreeWidget::findItems ( const QString & text, Qt::MatchFlags flags, int column = 0 ) const

在QTreeWidget的Item节点中检索包含text字符串的节点,并返回这些节点的列表。(www.61k.com)

有用初始化QTreeWidget的时候使用的是QList<QTreeWidgetItem *>列表,检索时只从QList<QTreeWidgetItem *>列表的元素中检索,检索元素下的子节点。需要自己实现代码检索QList<QTreeWidgetItem *>列表元素以及元素下的子节点。

for(int m=0;m< RowNum; m++) //遍历所有父节点

{

CurTopLevItm = ui->treeWidget->topLevelItem(m); //显示与关键字匹配的馈线 TopNodText=CurTopLevItm->text(0);

IsContain=TopNodText.contains(KeyWord,Qt::CaseInsensitive); //节点名字是否包含关键字

if(IsContain)

{

if(CurTopLevItm->isHidden())

CurTopLevItm->setHidden(false); //显示此节点

}

else

CurTopLevItm->setHidden(true);

//遍历该父节点下的子节点

for(int n =0;n<CurTopLevItm->childCount();n++)

{

CurChidItm = CurTopLevItm->child(n);

ChilNodText=CurChidItm->text(0);

IsContain = ChilNodText.contains(KeyWord,Qt::CaseInsensitive); //节点名字是否包含关键字

if(!IsContain) //与关键字不匹配

{

CurChidItm->setHidden(true);

continue;

}

CurChidItm->setHidden(false); //与关键字匹配

if(CurTopLevItm->isHidden()) //显示其父节点

CurTopLevItm->setHidden(false);

if(!CurTopLevItm->isExpanded())

CurTopLevItm->setExpanded(true); //展开父节点

}

widget QTreeWidget用法总结

}

二 : MaskedTextBox用法总结

1、概念

MaskedTextBox类是一个增强型的TextBox控件,它支持用于接受或拒绝用户输入的声明性语法。通过使用Mask属性,无需在应用程序中编写任何自定义验证逻辑,即可指定下列输入:

MaskedTextBox控件在运行时显示时,会将掩码表示为一系列提示字符和可选的原义字符。表示一个必需或可选输入的每个可编辑掩码位置都显示为单个提示字符。例如,数字符号(#) 通常用作数字字符输入的占位符。可以使用PromptChar属性来指定自定义提示字符。HidePromptOnLeave属性决定当控件失去输入焦点时用户能否看到提示字符。

当用户在掩码文本框中键入内容时,有效的输入字符将按顺序替换其各自的提示字符。如果用户键入无效的字符,将不会发生替换。在这种情况下,如果BeepOnError属性设置为true,将发出警告声,并引发MaskInputRejected事件。可以通过处理此事件来提供您自己的自定义错误处理逻辑。

如果当前插入点位于原义字符处,用户将有多种选择:

可以使用MaskFull属性来验证用户是否输入了所有必需的输入内容。Text属性将始终检索按照掩码和TextMaskFormat属性设置格式的用户输入。

实际上,MaskedTextBox控件将所有掩码处理工作交给由MaskedTextProvider属性指定的System.ComponentModel.MaskedTextProvider类来完成。此标准提供程序支持除代理项和纵向组合字符以外的所有Unicode 字符;但是,可以使用AsciiOnly属性将输入限定为字符集a-z、A-Z 和 0-9 内的字符。

掩码不能保证用户输入一定会表示给定类型的有效值,例如,输入的年龄值可能为-9。通过将值的类型的实例赋给ValidatingType属性,可以确保用户输入表示一个有效值。通过监视TypeValidationCompleted事件,可以检测当MaskedTextBox包含无效值时,用户是否将焦点从该控件移开。如果键入验证成功,可以通过TypeValidationEventArgs参数的ReturnValue属性使用表示该值的对象。

TextBox控件一样,几个通用键盘快捷键不能用于MaskedTextBox。尤其是Ctrl-R(右对齐文本)、Ctrl-L(左对齐文本)和 Ctrl-E(文本居中)都无效。

2.掩码元素一览

掩码元素
说明
0数字,必选。此元素将接受0 到 9 之间的任何一个数字。
9数字或空间,可选。
#数字或空间,可选。如果掩码中该位置为空白,在Text 属性中将把它呈现为一个空格。允许使用加号 (+) 和减号 (-)。
L字母,必选。将输入限定为 ASCII 字母 a-z 和A-Z。此掩码元素等效于正则表达式中的 [a-zA-Z]。
?
字母,可选。输入限定为 ASCII 字母 a-z 和A-Z。此掩码元素等效于正则表达式中的 [a-zA-Z]?。
&
字符,必选。如果AsciiOnly 属性设置为 true,此元素的行为将与“L”元素类似。
C
字符,可选。任何非控制字符。如果AsciiOnly 属性设置为 true,此元素的行为将类似于“?”元素。
A字母数字,可选。如果将AsciiOnly 属性设置为 true,则它接受的唯一字符是 ASCII 字母 a-z 和 A-Z。
a字母数字,可选。如果将AsciiOnly 属性设置为 true,则它接受的唯一字符是 ASCII 字母 a-z 和 A-Z
.小数点占位符。使用的实际显示字符将是相应于格式提供程序的小数点占位符,格式提供程序由控件的FormatProvider 属性决定。
,千分位占位符。使用的实际显示字符将是相应于格式提供程序的千分位占位符,格式提供程序由控件的FormatProvider 属性决定。
:
时间分隔符。使用的实际显示字符将是相应于格式提供程序的时间占位符,格式提供程序由控件的FormatProvider 属性决定。
/日期分隔符。使用的实际显示字符将是相应于格式提供程序的日期占位符,格式提供程序由控件的FormatProvider 属性决定。
$货币符号。显示的实际字符将是相应于格式提供程序的货币符号,格式提供程序由控件的FormatProvider 属性决定。
<转换为小写。将后续所有字符都转换为小写。
>
转换为大写。将后续所有字符都转换为大写。
|禁用前一个大写转换或小写转换。
\
转义。对掩码字符进行转义,将其转变为原义字符。“\\”是反斜杠的转义序列。
其他所有字符原义字符。所有非掩码元素都将原样出现在MaskedTextBox 中。原义字符在运行时始终占据掩码中的一个固定位置,用户不能移动或删除该字符。

三 : as的用法总结

四 : const 用法总结(C++)

根据个人的学习和理解,下面我将从以下几个分类来进行讨论,如有错误之处,还请各位大虾多多指教!(部分内容直接转载,以供学习和参考)

一、关于一般常量

声明或定义的格式如下:

const <类型说明符> <变量名> = <常量或常量表达式>; [1]

<类型说明符> const <变量名> = <常量或常量表达式>; [2]

[1]和[2]的定义是完全等价的。

例如:

整形int(或其他内置类型:float,double,char)

const int bufSize = 512;

或者

int const bufSize = 512;

因为常量在定义后就不能被修改,所以定义时必须初始化。

bufSize = 128; // error:attempt to write to const object

const string cntStr = "hello!"; // ok:initialized

const i, j = 0; // error: i is uninitialized const

非const变量默认为extern。

const 对象默认为文件的局部变量。要使const变量能够在其他的文件中访问,必须显式地指定它为extern。

例如:

const int bufSize = 512; // 作用域只限于定义此变量的文件

extern const int bufSize = 512; // extern用于扩大作用域,作用域为整个源程序(只有extern 位于函数外部时,才可以含有初始化式)

二、关于数组及结构体

声明或定义的格式如下:

const <类型说明符> <数组名>[<大小>]…… [1]

<类型说明符> const <数组名>[<大小>]…… [2]

[1]和[2]的定义是完全等价的。

例如:

整形int(或其他内置类型:float,double,char)

const int cntIntArr[] = {1,2,3,4,5};

或者

int const cntIntArr[] = {1,2,3,4,5};

struct SI

{

int i1;

int i2;

};

const SI s[] = {{1,2},{3,4}};

// 上面的两个const都是变量集合,编译器会为其分配内存,所以不能在编译期间使用其中的值(例如:int temp[cntIntArr[2]],这样的话编译器会报告不能找到常量表达式)

三、关于引用

声明或定义的格式如下:

const <类型说明符> &<变量名> = …… [1]

<类型说明符> const &<变量名> = …… [2]

[1]和[2]的定义是完全等价的。

例如:

const int i = 128;

const int &r = i;(或者 int const &r = i;)

const 引用就是指向const 对象的引用。

普通引用不能绑定到const 对象,但const 引用可以绑定到非const 对象。

const int ii = 456;

int &rii = ii; // error

int jj = 123;

const int &rjj = jj; // ok

非const 引用只能绑定到与该引用同类型的对象。

const 引用则可以绑定到不同但相关的类型的对象或绑定到右值。

例如:

1.const int &r = 100; // 绑定到字面值常量

2.int i = 50;

const int &r2 = r + i; // 引用r绑定到右值

3.double dVal = 3.1415;

const int &ri = dVal; // 整型引用绑定到double 类型

编译器会把以上代码转换成如下形式的编码:

int temp = dVal; // create temporary int from double

const int &ri = temp; // bind ri to that temporary

四、关于指针

1.指向const 对象的指针(指针所指向的内容为常量)

声明或定义的格式如下(定义时可以不初始化):

const <类型说明符> *<变量名> …… [1]

<类型说明符> const *<变量名> …… [2]

[1]和[2]的定义是完全等价的。

例如:

const int i = 100;

const int *cptr = &i;

或者

int const *cptr = &i; [cptr 是指向int 类型的const 对象的指针]

允许把非const 对象的地址赋给指向const 对象的指针,例如:

double dVal = 3.14; // dVal is a double; its value can be change

const double *cdptr = &dVal; // ok;but can't change dVal through cdptr

不能使用指向const 对象的指针修改基础对象。然而如果该指针指向的是一个没const 对象(如cdptr),可用其他方法修改其所指向的对象。

如何将一个const 对象合法地赋给一个普通指针???

例如:

const double dVal = 3.14;

double *ptr = &dVal; // error

double *ptr = const_cast<double*>(&dVal);

// ok: const_cast是C++中标准的强制转换,C语言使用:double *ptr = (double*)&dVal;

2.const 指针(指针本身为常量)

声明或定义的格式如下(定义时必须初始化):

<类型说明符> *const <变量名> = ……

例如:

int errNumb = 0;

int iVal = 10;

int *const curErr = &errNumb; [curErr 是指向int 型对象的const 指针]

指针的指向不能被修改。

curErr = &iVal; // error: curErr is const

指针所指向的基础对象可以修改。

*curErr = 1; // ok:reset value of the object(errNumb) which curErr is bind

3.指向const 对象的const 指针(指针本身和指向的内容均为常量)

声明或定义的格式如下(定义时必须初始化):

const <类型说明符> *const <变量名> = ……

例如:

const double pi = 3.14159;

const double dVal = 3.14;

const double *const pi_ptr = &pi; [pi_ptr 是指向double 类型的const 对象的const 指针]

指针的指向不能被修改。

pi_ptr = &dVal; // error: pi_ptr is const

指针所指向的基础对象也不能被修改。

*pi_ptr = dVal; // error: pi is const

五、关于一般函数

1.修饰函数的参数

class A;

void func1(const int i); // i不能被修改

void func3 (const A &rA); // rA所引用的对象不能被修改

void func2 (const char *pstr); // pstr所指向的内容不能被修改

2.修饰函数的返回值

返回值:const int func1(); // 此处返回int 类型的const值,意思指返回的原函数里的变量的初值不能被修改,但是函数按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何的const或非const类型变量,完全不需要加上这个const关键字。

[*注意*]但这只对于内部类型而言(因为内部类型返回的肯定是一个值,而不会返回一个变量,不会作为左值使用,否则编译器会报错),对于用户自定义类型,返回值是常量是非常重要的(后面在类里面会谈到)。

返回引用:const int &func2(); // 注意千万不要返回局部对象的引用,否则会报运行时错误:因为一旦函数结束,局部对象被释放,函数返回值指向了一个对程序来说不再有效的内存空间。

返回指针:const int *func3(); // 注意千万不要返回指向局部对象的指针,因为一旦函数结束,局部对象被释放,返回的指针变成了指向一个不再存在的对象的悬垂指针。

六、关于类

class A

{

public:

void func();

void func() const;

const A operator+(const A &) const;

private:

int num1;

mutable int num2;

const size_t size;

};

1.修饰成员变量

const size_t size; // 对于const的成员变量,[1]必须在构造函数里面进行初始化;[2]只能通过初始化成员列表来初始化;[3]试图在构造函数体内对const成员变量进行初始化会引起编译错误。

例如:

A::A(size_t sz):size(sz) // ok:使用初始化成员列表来初始化

{

}

A::A(size_t sz)

2.修饰类成员函数

void func() const; // const成员函数中不允许对数据成员进行修改,如果修改,编译器将报错。如果某成员函数不需要对数据成员进行修改,最好将其声明为const 成员函数,这将大大提高程序的健壮性。

const 为函数重载提供了一个参考

class A

{

public:

void func(); // [1]:一个函数

void func() const; // [2]:上一个函数[1]的重载

……

};

A a(10);

a.func(); // 调用函数[1]

const A b(100);

b.func(); // 调用函数[2]

如何在const成员函数中对成员变量进行修改???

下面提供几种方式(只提倡使用第一种,其他方式不建议使用)

(1)标准方式:mutable

class A

{

public:

A::A(int i):m_data(i){}

void SetValue(int i){ m_data = i; }

private:

mutable int m_data; // 这里处理

};

(2)强制转换:static_cast

class A

{

public:

A::A(int i):m_data(i){}

void SetValue(int i)

{ static_cast<int>(m_data) = i; } // 这里处理

private:

int m_data;

};

(3)强制转换:const_cast

class A

{

public:

A::A(int i):m_data(i){}

void SetValue(int i)

{ const_cast<A*>(this)->m_data = i; } // 这里处理

private:

int m_data;

};

(4)使用指针:int *

class A

{

public:

A::A(int i):m_data(i){}

void SetValue(int i)

{ *m_data = i; } // 这里处理

private:

int *m_data;

};

(5)未定义的处理方式

class A

{

public:

A::A(int i):m_data(i){}

void SetValue(int i)

{ int *p = (int*)&m_data; *p = i } // 这里处理

private:

int m_data;

};

注意:这里虽然说可以修改,但结果是未定义的,避免使用!

3.修饰类对象

const A a; // 类对象a 只能调用const 成员函数,否则编译器报错。

4.修饰类成员函数的返回值

const A operator+(const A &) const; // 前一个const 用来修饰重载函数operator+的返回值,可防止返回值作为左值进行赋值操作。

例如:

A a;

A b;

A c;

a + b = c; // errro: 如果在没有const 修饰返回值的情况下,编译器不会报错。

七、使用const的一些建议

1.要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委;

2.要避免最一般的赋值操作错误,如将const变量赋值,具体可见思考题;

3.在参数中使用const应该使用引用或指针,而不是一般的对象实例,原因同上;

4.const在成员函数中的三种用法(参数、返回值、函数)要很好的使用;

5.不要轻易的将函数的返回值类型定为const;

6.除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;

八、cons有什么主要的作用?

1.可以定义const常量,具有不可变性。

例如:

const int Max=100;

int Array[Max];

2.便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。

例如:

void f(const int i) { .........}

编译器就会知道i是一个常量,不允许修改;

3.可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。

同宏定义一样,可以做到不变则已,一变都变!如(1)中,如果想修改Max的内容,只需要:const int Max=you want;即可!

4.可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。

还是上面的例子,如果在函数体内修改了i,编译器就会报错;

例如:

void f(const int i) { i=10;//error! }

5.为函数重载提供了一个参考。

class A

{

......

void f(int i) {......} file://一个函数

void f(int i) const {......} file://上一个函数的重载

......

};

6.可以节省空间,避免不必要的内存分配。

例如:

#define PI 3.14159 file://常量宏

const doulbe Pi=3.14159; file://此时并未将Pi放入ROM中

......

double i=Pi; file://此时为Pi分配内存,以后不再分配!

double I=PI; file://编译期间进行宏替换,分配内存

double j=Pi; file://没有内存分配

double J=PI; file://再进行宏替换,又一次分配内存!

const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。

7.提高了效率。

编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

{

size = sz; // error:试图在构造函数体内对const成员变量进行初始化

}

五 : Such用法总结

such可以分为三种不同的词性。

一、形容词的用法

1.such做形容词,是最常见、也是最简单的用法,起到一种强调作用。

She's got such talent.她很有天赋。

We're having such a wonderfultime. 我们过得很愉快。

I've had such ashock.我大吃一惊。

Why are you in such a hurry?为什么你这么匆忙?

2.注意上面的第二个例子,"such a wonderfultime"。

通常情况下,如果such与名词之间还带有形容词,这时不提倡使用such,因为会引起歧义。而要说"sowonderful a time"或者"a time so wonderful"。

3.当句子末尾加上that引导从句,形成such...that结构时,表示因为前面提到的原因,引起了某种结果。

He speaks to me in such a waythat I alwaysfeel he is insulting me. 他总是用那种方式跟我说话,总是使得我觉得受到了侮辱。

It was such a boringspeech (that)I fell asleep. 这是个乏味的演说,使得我睡着了。

二、限定词的用法

4.所谓“限定词”,指的是对名词的涵义加以限制的词。又分为后对应限定和前对应限定两种。

5.前对应限定的such,指的是前面提到过的某一种类。

He noticed her necklace. Such jewels musthave cost thousands, he thought. 他注意到了她的项链。这一定值几千元,他想。

This isn't the only story of crulty to children. Many such cases arereported every day. 这并非虐待儿童的唯一事件。每天都有许多类似案例被报道。

6.后对应限定的such,指的是后面将要提到的某一种类。通常使用such... as/that ...的结构。

Such a disaster as this had never happenedto her before.以前她从未遇到过这样的灾难。

The knot was fastened in such a waythat it wasimpossible to undo.

这个结打得很牢固,根本解不开。

Such advice as he was given provedalmost worthless.他得到的那些建议,被证明毫无价值。

He's not such a foolas he looks.他并非看上去那样蠢。

注意,规范的用法是,这时应避免使用such...that,而只使用such...as,方便与前面的第3点相区分。

三、代词的用法

7.such做代词的时候,也分为前指代和后指代两种。

8.前指代的意思是,指代前面提到过的某个人或某件事。通常,这时指代的是前面整句话的涵义。

Cricket was boring. Such was heropinion befor meeting Ian.

板球很乏味。遇到Ian之前,她一直这么认为。

She's a competent manager and has always been regarder assuch byher colleagues.

她是一个能干的经理。同事们一直这样看待她。

9.后指代的意思是,指代后面提到的某个人或某件事。这时通常采用suchas to do sth或such that的结构。

Such is the influence of TV that it can make a personfamous overnight.

这就是电视的影响,它可以使人一夜成名。

Thepain in her foot wasn't such as to stop herwalking. 她脚上的痛,还没有到妨碍走路的地步。

The damage was suchthat it would cost too much to repair.损害很严重,要用很多钱才能修好。

四、词组 such as 和 assuch

10.suchas可以连在一起,作为词组使用,意思是“比如、就像”,同like类似。

Wild flowers suchas orchids and primroses are becoming rare.

像兰花和樱草花那样的野花,越来越少见了。

Large and important projects such as this oneoften take years to develop.

类似这一个的大型重要项目,需要好多年才能发展起来。

11.词组assuch通常用在词尾,其实只是代词用法的一个引申,或者表示“像看上去那样”。

If this is not genuine champagne, it should not be labelledassuch.

既然这不是真的香槟酒,就不应该这样标识。

The new job is not promotion as such but it hasgood prospects.

新工作并非真的升职,不过前景不错。

五、莎士比亚著作中的such例句

12.such是一个很老的词,莎士比亚就经常用。下面是一些从他著作中选出的例句。

Good night, good night! parting is such sweetsorrow,
Romeo and Juliet: II, ii
良宵,良宵!此时分别真是甜蜜又悲伤。
《罗密欧与朱丽叶》第二幕,第二场

We are such stuff as dreams are made on, and our little life isrounded with a sleep.
The Tempest: IV, iv
构成我们的料子也就是那梦幻的料子,我们短暂的一生,前后都环绕在酣睡之中。
《暴风雨》第四幕,第四场

Alas, our frailty is the cause, not we: For such as we are made of,such we be.
The Twelfth Night
唉,原因在于我们的弱点,而非我们:因为我们由什么材料制成,就会成为什么样子。
《第十二夜》

I had rather be a dog, and bay the moon, than such aRoman.
Julius Caesar: IV, iii
我宁愿做一只向月亮狂吠的狗,也不愿做这样一个罗马人。
《尤利乌斯·恺撒》第四幕,第三场

Teach not thy lip such scorn, for it was made For kissing, lady,not for such contempt.
KING RICHARD III: I, ii
何必如此出言讥讽,夫人,天生你可亲吻的香唇,不是给你做侮蔑之用的。
《理查三世》第一幕,第三场

We were, fair queen, Two lads that thought there was no morebehind. But such a day to-morrow as
to-day. And to be boy eternal.
The Winter's Tale: I, ii
我们那时是两个不知道有将来的孩子,以为明天就跟今天一样,永远是个孩子。
《明天的故事》第一幕,第二场

本文来自http://www.ruanyifeng.com/blog/

本文标题:as用法总结-QTreeWidget用法总结
本文地址: http://www.61k.com/1103118.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1