在最q的web开发中是不是就?x)用C些选择器,发现很多其是CSS3新增的不太熟(zhn),在此ȝ一下?/p>
不同U别
1. 在属性后面?!important ?x)覆盖页面内M位置定义的元素样式?/p>
2.作ؓ(f)style属性写在元素内的样?/p>
3.id选择?/p>
4.c选择?/p>
5.标签选择?/p>
6.通配W选择?/p>
7.览器自定义
同一U别
同一U别中后写的?x)覆盖先写的样?/p>
选择?/strong> | 含义 |
* | 通用元素选择器,匚w面M元素Q这也就军_?jin)我们很用?j) |
#id | id选择器,匚w特定id的元?/td> |
.class | c选择器,匚wclass包含(不是{于)特定cȝ元素 |
element | 标签选择?/td> |
* { /*面所有元素都使用*/ border:0; } #test { /*id=test 的元?/span>*/ background-color:#0e0; } .staus { /*含有cstatus的元?/span>*/ border:0; } div { /*面所有div*/ background-color:#0e0; }
选择?/strong> | 含义 |
E,F | 多元素选择器,?#8221;,分隔Q同时匹配元素E或元素F |
E F | 后代选择器,用空格分隔,匚wE元素所有的后代Q不只是子元素、子元素向下递归Q?/strong>元素F |
E>F | 子元素选择器,?#8221;>”分隔Q匹配E元素的所有直接子元素 |
E+F | 直接盔R选择器,匚wE元素之后?strong style="margin: 0px; padding: 0px;">盔R?strong style="margin: 0px; padding: 0px;">同元素F |
E~F | 普通相邻选择器(弟弟选择器)(j)Q匹配E元素之后?strong style="margin: 0px; padding: 0px;">同元素FQ无论直接相M否)(j) |
.class1.class2 | q个姑且也算一个吧Q没什么名字,匚wcd中既包含class1又包含class2的元?/td> |
我就不一一举例子了(jin)Q选择器ƈ不是只能写两层,发现有些朋友有q种误解Q认为只能写E>Fq样的,我们写可以写E>F.class Elementq样Q你要你搞得定优先
选择?/strong> | 含义 |
E[attr] | 匚w所有具有属性attr的元素,div[id]p取到所有有id属性的div |
E[attr=value] | 匚w属性attrgؓ(f)value的元素,div[id=test],匚wid=test的div |
E[attr~=value] | 匚w所有属性attrh多个I格分隔、其中一个值等于value的元?/td> |
E[attr|=value] | 匚w所有att属性具有多?#8221;-”分隔、其中一个gvalue开头的元素Q主要用于lang属性,比如“en”?#8220;en-us” |
E[attr ^=value] | 匚w属性attr的gvalue开头的元素 |
E[attr $=value] | 匚w属性attr的gvaluel尾的元?/td> |
E[attr *=value] | 匚w属性attr的值包含value的元?/td> |
选择?/strong> | 含义 |
E:first-child | 匚w元素E的第一个子元素 |
E:link | 匚w所有未被点ȝ链接 |
E:visited | 匚w所有已被点ȝ链接 |
E:active | 匚w鼠标已经其上按下、还没有释放的E元素 |
E:hover | 匚w鼠标(zhn)停其上的E元素 |
E:focus | 匚w获得当前焦点的E元素 |
E:lang(c) | 匚wlang属性等于c的E元素 |
E:enabled | 匚w表单中可用的元素 |
E:disabled | 匚w表单中禁用的元素 |
E:checked | 匚w表单中被选中的radio或checkbox元素 |
E::selection | 匚w用户当前选中的元?/td> |
E:root | 匚w文档的根元素Q对于HTML文档Q就是HTML元素 |
E:nth-child(n) | 匚w其父元素的第n个子元素Q第一个编号ؓ(f)1 |
E:nth-last-child(n) | 匚w其父元素的倒数Wn个子元素Q?span style="margin: 0px; padding: 0px; font-family: 微Y雅黑, 'Segoe UI'; color: #ff0000;">W一个编号ؓ(f)1 |
E:nth-of-type(n) | ?nth-child()作用cMQ但是仅匚w使用同种标签的元?/td> |
E:nth-last-of-type(n) | ?nth-last-child() 作用cMQ但是仅匚w使用同种标签的元?/td> |
E:last-child | 匚w父元素的最后一个子元素Q等同于:nth-last-child(1) |
E:first-of-type | 匚w父元素下使用同种标签的第一个子元素Q等同于:nth-of-type(1) |
E:last-of-type | 匚w父元素下使用同种标签的最后一个子元素Q等同于:nth-last-of-type(1) |
E:only-child | 匚w父元素下仅有的一个子元素Q等同于:first-child:last-child?:nth-child(1):nth-last-child(1) |
E:only-of-type | 匚w父元素下使用同种标签的唯一一个子元素Q等同于:first-of-type:last-of-type?:nth-of-type(1):nth-last-of-type(1) |
E:empty | 匚w一个不包含M子元素的元素Q?span style="margin: 0px; padding: 0px; font-family: 微Y雅黑, 'Segoe UI'; color: #ff0000;">文本节点也被看作子元?/span> |
E:not(selector) | 匚w不符合当前选择器的M元素 |
选择?/strong> | 含义 |
E:first-line | 匚wE元素内容的第一?/td> |
E:first-letter | 匚wE元素内容的第一个字?/td> |
E:before | 在E元素之前插入生成的内?/td> |
E:after | 在E元素之后插入生成的内?/td> |
自动重启Q也是退出当前进E,启动一个新的进E。于是,先看E序如何退?/p>
QtE序的一般结构如下:(x)
int main(int argc, char** argv) { QApplication app(argc, argv); Widget w; w.show() return app.exec(); }
最后一句启动了(jin)ȝE的事g循环。而要退出程序,是要退?gu)个事件@环,使main函数q回?/p>
正确方式Q?/p>
它还有一个马?/p>
对于QApplication来说Q它有一个常用的属?/p>
quitOnLastWindowClosed
所以,当最后一个窗口关闭时Q它可以自动调用前面的exit()
而至于关闭窗口呢Q我们还可以使用
注:(x)一般来_(d)对于多个H口的程序,调用q个?x)比直接调用quit要好。因L(fng)口可以接受到Close事g?/p>
在Qt中,做这个工作的非QProcess莫属?jin),要启动当前程序的另一个进E,有要使二者没?父子"关系。恩
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
可是Qؓ(f)什么不写成下面q样Q?/p>
QProcess::startDetached(qApp->applicationFilePath());
当然Q如果\径中不包含空|q个也可以工作?/p>
现在单了(jin)Q要重新启动Q只需要调?/p>
void XXX::onXXX() { qApp->quit(); QProcess::startDetached(qApp->applicationFilePath(), QStringList()); }
或者:(x)
void XXX::onXXX() { qApp->closeAllWindow(); QProcess::startDetached(qApp->applicationFilePath(), QStringList()); }
管没什么好处,但有时候,我似乎更喜欢q样写:(x)
void XXX::onXXX() { qApp->exit(773) }
然后main函数Ҏ(gu)
int main(int argc, char** argv) { .... int ret = app.exec(); if (ret == 773) { QProcess::startDetached(qApp->applicationFilePath(), QStringList()); return 0; } return ret; }
q里面我用了(jin)一个魔敎ͼ(x)773Q没什么特别含义,只是因ؓ(f)我觉?/p>
773 = 'r'+'e'+'s'+'t'+'a'+'r'+'t' ==>restart
上班?jin),写到这?..
QTableViewQ:(x)verticalScrollBar()->setSliderPosition()Q?span style="word-wrap: normal; word-break: normal; line-height: 18px;">
QTableViewQ:(x)verticalScrollBar()->maximum();
QTableViewQ:(x)verticalScrollBar()->value();
然后命o(h)行输入lupdate ***.pro
打开.ts文gQ一条一条的译是?br />最后lrelease ***.pro
看如下代码示例:(x)
动M弄到一?/strong>
既然一个动ȝ本就是一个动ȝQ你可以把它d到其它组中。如此,你可以徏立v一个动L(wi)?br />
Qt动画架构中的主要cd下图所C:(x)
动画框架由基c?/span>QAbstractAnimation和它的两个儿?/span>QVariantAnimation?/span>QAnimationGroupl成?/span>QAbstractAnimation是所有动ȝ的祖宗。它包含?jin)所有动ȝ基本属性。比如开始,停止和暂停一个动ȝ能力。它也可以接收时间改变通知?/span>
动画框架又进一步提供了(jin)QProertyAnimationcR它l承?/span>QVariantAnimationq对某个Qt属性(它须?/span>Qt?#8221;元数据对象系l?#8221;的一部分Q见http://blog.csdn.net/nkmnkm/article/details/8225089Q执行动甅R此cd属性执行一个宽松曲U插倹{所以当你想dM个值时Q你可以把它声明Z个属性,q且让你的类成ؓ(f)一?/span>QObject。这l予我们极大的自由度来动画那些已存在?/span>widget和其?/span>QObject?/span>
复杂的动d以通过建立一?/span>QAbstractAnimation的树(wi)来构建。这个树(wi)通过使用QAnimationGroups来创建,QAnimationGroups作ؓ(f)其它动画的容器。注意动ȝ也是?/span>QAbstractAnimationz的,所以动ȝ可以再包含其它动ȝ?/span>
动画框架可以单独使用Q同时也被设计ؓ(f)状态机框架的一部分。状态机提供?jin)一个特定的状态可以用来播攑֊甅R在q入或退出某个状态时QState也可以设|属性们Qƈ且这个特定的动画状态将在指?/span>QPropertyAnimation时给予的g间做插D。后面我们要q一步介l此问题?/span>
在场景的背后Q动画被一个全局定时器收集,q个定时器发?/span>update到所有的正在播放的动M?/span>
所有动ȝ的基c?/span> | |
动画l的基类 | |
控制动画的宽松曲U类 | |
q行动画l类 | |
串行动画l类的暂停类 | |
动画Qt属性的c?/span> | |
串行动画l类 | |
控制动画的时间线c?/span> | |
各动ȝ的虚基类 |
如前面所ԌQPropertyAnimationcd以修?/span>Qt属性们。要动画一个|需要用此cR实际上Q它的父c,QVariantAnimationQ是一个虚拟类Q不能被直接使用?/span>
我们选择动画Qt属性的一个主要理由是Qt属性ؓ(f)我们提供?jin)自己动d存在的类的自由度。尤其是QWidgetc(我们也可以把它嵌入到一?/span>QGraphicsView中)(j)h很多属性表C其bounds,colors{等。让我们看一个小例子Q?/span>
q段代码把按钮?/span>10U种内从屏幕的左上角Ud?/span>(250,250)处?/span>
上面的例子D在开始值和l束g间做U性插倹{还可以在开始和l束g间设||插D就?x)经q这些点?/span>
在此例中Q动d按钮?U中内弄?250,250)处,然后?U种内又弄回原位。移位是在这些点中间以线性插D行的?/p>
?也有可能动画一个QObject的|虽然q些值ƈ没有被声明ؓ(f)Qt属性。唯一的要求就是这个值具有一个setter。之后你可以从这个类z子类从而包 含这些值ƈ且声明一个用这个setter的属性。注意每个Qt属性都需要有一个getterQ所以你需要提供一个getterQ如果它不存在的话?/p>
在上例中Q我们派生了(jin)QGraphicsRectItemq定义了(jin)一个geometry属性。我们现在可以动画这个widget的geometry?jin),即QGraphicsRectItem没有提供geometry属性?/p>
当你惛_?/span>QGraphicsItemsQ你也要?/span>QPropertyAnimation。然而,QGraphicsItem不是?/span>QObjectz的。一个好的解x(chng)案是z要动ȝ囑Şitem。派生类也要?/span>QObjectz。这PQPropertyAnimation可以被用于QGraphicsItems?jin)?/span>
如上一节中所讲的Q我们需要定义希望去动画的属性?/span>
注意Q?/span>QObject必须是承中的第一个,因ؓ(f)元数据对象系l需要这样做?/span>
QPropertyAnimation在属性的开始值和l束g间执行一个插D。除?jin)向动画d更多的关键值外Q你q可以用一个宽松曲Uѝ宽松曲U描qC(jin)一个在0?/span>1之间插值的速度变化的函敎ͼ如果你想控制一个动ȝ速度而不改变插值的路径Ӟ非常有用?/span>
q里Q动d按照一个曲U进行,q个曲线使得动画像一个蟩动的皮球从开始位|蟩到结束位|?/span>QEasingCurveh一个大曲线集合Q你可以从里面选择一个。它们被定义?/span>QEasingCurve::Type枚D。如果你需要不一L(fng)曲线Q你也可以自己实C个,然后注册?/span>QEasingCurve?/span>