您的位置 首页 焦点资讯

Qt界面focus焦点设置的一些体会

今天调试登录框的时候,发现登录框出现的时候,发现focus不在密码输入框中。就四处查焦点问题,以及tab键的焦点调转顺序。
首先要感谢这篇文章:【QT】新弹窗默认无焦点
给了我一个思路,我能不能在窗口show出来之后,或者show事件中知道当前的focus在哪个控件上?
如果你是界面是继承自QWidget的话:

void ResetPasswordDialog::showEvent(QShowEvent *event) { if(this->focusWidget()){ qDebug() << this->focusWidget()->objectName(); } QWidget::showEvent(event); } 

如果是继承自QDialog,可以这样:

void ResetPasswordDialog::showEvent(QShowEvent *event) { if(this->focusWidget()){ qDebug() << this->focusWidget()->objectName(); } QDialog::showEvent(event); } 

为了更形象地说明什么是objectName,我这里截一张图:
在这里插入图片描述
最终发现我的登录框出现的时候,焦点是有的,但它在窗体上,不在输入框里。

ui->accountLineEdit->setFocus(); 

其实只要一行代码就解决了问题,刚才的那行可以写在构造函数里。

问题二:
我希望我的Tab顺序是在账号框和密码框来回跳,又该怎么做呢?
其实这个问题跟我们的focusePolicy有关系的。

setTabOrder(ui->accountLineEdit, ui->passwordLineEdit); 

也是一行代码。
但是你发现,连续按tab键的时候,怎么会出现,账号框->密码框->焦点不知道去哪里了->账号框->密码框…这样循环往复。
怎么让按tab键的时候,只在账号框和密码框来回跳?
这个也简单:
去检查你的界面的空间,包括QWidget窗体的焦点策略,要设置为NoFocus
在这里插入图片描述
或者是代码哪里有调用这个函数:

void setFocusPolicy(Qt::FocusPolicy policy) 

最后说一句:有人会说,怎么某个焦点时候有虚线框?那个虚线框其实就是告诉你这个控件以及处于focus状态了。
怎么去掉它?
其中一种办法是用qss设置。
举例:

this->setStyleSheet("QLineEdit:focus {background:white; border:1px groove lightgray; border-radius:2px}"); 

回车键对控件焦点的跳转问题,我们下回再分解。

参考:
【QT】新弹窗默认无焦点
QLineEdit 仿QQ签名框(思路很独特:用QSS::hover显示额外的图片)
Qt 焦点窗口

原文链接:https://blog.csdn.net/hp_cpp/article/details/105847810?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166580747916800180620972%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166580747916800180620972&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-25-105847810-null-null.nonecase&utm_term=%E7%84%A6%E7%82%B9

热门文章