qt win7当前窗口失去焦点点不起效

Qt之界面出现、消失动画效果
在学习Qt的这2、3个月里,对Qt越发感兴趣,从刚开始的盲目、无所适从到现在的学习、研究、熟练、掌握的过程中,我学到了很多东西,也学会了如何通过自学让自己更加成熟、强大起来,如何更有效地提高自己学习、工作效率。
关于Qt界面的出现消失效果,我简单介绍两种方法。
(1)界面出现
将下面这段代码放在界面的构造函数当中就行
&//界面动画,改变透明度的方式出现0 - 1渐变
&QPropertyAnimation *animation = new
QPropertyAnimation(this, "windowOpacity");
&animation-&setDuration(1000);
&animation-&setStartValue(0);
&animation-&setEndValue(1);
&animation-&start();
(2)界面消失:
既然是界面消失,应当是按下关闭按钮时界面消失,如下:
//连接关闭按钮信号和槽
QObject::connect(close_button, SIGNAL(clicked()), this,
SLOT(closeWidget()));
//槽函数如下,主要进行界面透明度的改变,完成之后连接槽close来调用closeEvent事件
bool LoginDialog::closeWidget()
&& //界面动画,改变透明度的方式消失1 - 0渐变
&& QPropertyAnimation *animation
= new QPropertyAnimation(this, "windowOpacity");
animation-&setDuration(1000);
animation-&setStartValue(1);
animation-&setEndValue(0);
&& animation-&start();
&& connect(animation,
SIGNAL(finished()), this, SLOT(close()));
void LoginDialog::closeEvent(QCloseEvent *)
&&& //退出系统
QApplication::quit();
在这里贴出消失时候的代码,其实出现的时候类似
界面消失:
void LoginDialog::closeEvent(QCloseEvent *)
&for(int i=0; i& 100000; i++)
&&if(i&10000)
&&&this-&setWindowOpacity(0.9);
&&else if(i&20000)
&&&this-&setWindowOpacity(0.8);
&&else if(i&30000)
&&&this-&setWindowOpacity(0.7);
&&else if(i&40000)
&&&this-&setWindowOpacity(0.6);
&&else if(i&50000)
&&&this-&setWindowOpacity(0.5);
&&else if(i&60000)
&&&this-&setWindowOpacity(0.4);
&&else if(i&70000)
&&&this-&setWindowOpacity(0.3);
&&else if(i&80000)
&&&this-&setWindowOpacity(0.2);
&&else if(i&90000)
&&&this-&setWindowOpacity(0.1);
&&&this-&setWindowOpacity(0.0);
&//进行窗口退出
&&QApplication::quit();
对比看来,第二种方法比较笨拙,而且效率差,所以优先选择方法一,其实学习就是一个累积的过程,没有对比就没有进步,只要是可以行通的,不妨多下点功夫研究一下,条条大路通罗马,知识在与钻研、分享!
&&技术在于交流、沟通,转载请注明出处并保持作品的完整性。
&&作者:&&原文:。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Qt设置某一窗口获取不到焦点,或者焦点一直在某一窗口上
[问题点数:60分,结帖人u]
Qt设置某一窗口获取不到焦点,或者焦点一直在某一窗口上
[问题点数:60分,结帖人u]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。怎么改变获取到焦点的QLineEdit的颜色,失去焦点后颜色变回 - QT开发当前位置:& &&&怎么改变获取到焦点的QLineEdit的颜色,失去焦点后怎么改变获取到焦点的QLineEdit的颜色,失去焦点后颜色变回&&网友分享于:&&浏览:255次如何改变获取到焦点的QLineEdit的颜色,失去焦点后颜色变回如题:
在通过键盘改变焦点到不同的QLineEdit上时获取到焦点的控件改变颜色,失去焦点后变回原来的颜色。我用eventFilter事件过滤没有效果,还有什么其他办法吗?&
------解决方案--------------------引用:如题:
在通过键盘改变焦点到不同的QLineEdit上时获取到焦点的控件改变颜色,失去焦点后变回原来的颜色。我用eventFilter事件过滤没有效果,还有什么其他办法吗?&
设置样式:
QLineEdit{
border:1px&solid&
QLineEdit:hover{
border-width:2
border-color:rgb(170,&170,&255);
QLineEdit:focus&{
border-width:2
border-color:rgb(170,&170,&255);
注意:QLineEdit:focus这是获取焦点的样式!------解决方案--------------------还有一种方法,
class&CEdit&:&public&QLineEdit&{
protected:
&&void&focusInEvent(QEvent&&*);
&&void&focusOutEvent(QEvent&*);
重载上面两个函数,在这两个函数了,改变焦点的颜色------解决方案--------------------3.使用getFocusWidget();,得到获得焦点的控件,然后改变颜色
QWidget&*pWidget&=&QApplication::getFocusWidget();------解决方案--------------------
void&foo()&{
&&&&QWidget&*w&=&new&QWidget();
&&&&QLineEdit&*edit1&=&new&QLineEdit();
&&&&QLineEdit&*edit2&=&new&QLineEdit();
&&&&QVBoxLayout&*layout&=&new&QVBoxLayout();
&&&&layout-&addWidget(edit1);
&&&&layout-&addWidget(edit2);
&&&&w-&setLayout(layout);
&&&&QString&style("QLineEdit{border:&3px&solid&}"
&&&&&&&&&&&&&&&&&&"QLineEdit:focus{border:&3px&solid&}");
&&&&w-&setStyleSheet(style);
&&&&w-&show();
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有17466人阅读
在应用程序中,都会有一个当前窗口,即当前获得焦点事件的窗口,这个窗口可以接受键盘的输入。当应用有多个窗口时就要使用焦点事件了!
Qt中有很好的焦点事件管理,我在这里抛砖引玉了。一个空间要先设置它焦点事件的模式,即窗口如何接受焦点事件(通过鼠标单击、Tab键、不接受焦点事件等)
setFocusPolicy&( Qt::FocusPolicy&policy&)
就是设置焦点事件模式的函数,其中函数的参数为
Description
Qt::TabFocus
the widget accepts focus by tabbing.
Qt::ClickFocus
the widget accepts focus by clicking.
Qt::StrongFocus
TabFocus | ClickFocus | 0x8
the widget accepts focus by both tabbing and clicking. On Mac OS X this will also be indicate that the widget accepts tab focus when in 'Text/List focus mode'.
Qt::WheelFocus
StrongFocus | 0x4
like Qt::StrongFocus plus the widget accepts focus by using the mouse wheel.
Qt::NoFocus
the widget does not accept focus.
如果想通过单击鼠标获取焦点事件,那么就可以选择参数Qt::ClickFocus,其他不赘述。
当前有焦点事件的窗口只能有一个,当一个窗口获取焦点事件或失去焦点事件时,可能需要相应的操作,或者如何判断一个才窗口有没有焦点事件。Qt中亦有相应的函数。
void&QWidget::focusInEvent&(&&*&event&)&[virtual
protected]
void&QWidget::focusOutEvent&(&&*&event&)&[virtual
protected]
这两个就是窗口获取或失去焦点事件的函数,需要我们重写(好多窗口都是从QWidget继承这两个函数的)
bool&hasFocus&() const
这个函数就是判断当前窗口有没有焦点事件的,返回布尔值。
void&QWidget::setFocus&(&&reason&)
void&QWidget::clearFocus&()
这两个函数就是设置或清除焦点事件的。
要想知道更多,只需要在“Qt助手”的“索引”中输入“Focus”,自己动手吧!!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:416642次
积分:6565
积分:6565
排名:第2532名
原创:256篇
转载:11篇
评论:120条
阅读:2583
阅读:2835QT窗体失去或者重获焦点后,怎么使窗体不进行重绘_百度知道

我要回帖

更多关于 qt控件失去焦点 的文章

 

随机推荐