Qt4.74 请教:关于控件获取焦点问题!!

shen_wei 2012-03-22 05:40:49


如上图:

1。左右实现Qtoolbutton切换并显示不同的界面,上下来实现下面Button focus的选择!
(类似于tab类型) QtoolButton是一个QFrame ,下面的界面也是QFrame
这个有什么好的方法来实现。。

2。现在本人吧所有的Button 都是Qt::NoFocus 模式,现在可以实现左右Qtoolbutton切换并显示不同的界面

3。上下键,只要设置 其中一个 pMain_Button1->setFocus();
Widget::keyPressEvent(QKeyEvent *pe) 这个消息就不能截获到,四个方向键了。。
本人不明白其中原因,为啥设置了setFocus();就不能截获到方向键了,求解答!!


本人刚接触Qt,很多还不是很懂!求大家帮忙了。。。

Ubuntu 11.10 +Qt 4.74
在调试程序时,按F10,竟然弹出Qt【文件】菜单。。只能鼠标单击单步调试,哪位高人知道如何解决这个。。。拜谢了!!



...全文
772 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen_wei 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yiyaaixuexi 的回复:]

也许快捷键设置有冲突

Tools -> Options -> Enviroment -> Keyboard

Debugger.NextLine 设置别的快捷键
[/Quote]

yiyaaixuexi 我的这个没有冲突。查看了快捷键设置。。很是奇怪,现在设置成F8了。。。怪啊!!系统默认的竟然不能用!
Qt 4.7 安装完就没有动过。。。也是这样。。哎

yiyaaixuexi 美女,帮我 看看9楼的简单测试源码。。只要设置了 focus 就不能按键了。。我是新人!!
希望
shen_wei 2012-03-23
  • 打赏
  • 举报
回复
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);

pFrame = new QFrame;
pFrame ->setFrameStyle(QFrame::Panel|QFrame::Raised);

pButton = new QPushButton("Button");
pButton->setAutoDefault(true);
pButton->setFocusPolicy(Qt::NoFocus);
pButton->installEventFilter(this);

pButton1 = new QPushButton("Button1");
pButton1->setAutoDefault(true);
pButton1->setFocusPolicy(Qt::NoFocus);
pButton1->installEventFilter(this);

pButton2 = new QPushButton("Button2");
pButton2->setAutoDefault(true);
pButton2->setFocusPolicy(Qt::NoFocus);
pButton2->installEventFilter(this);

plab = new QLabel;
QVBoxLayout *vBox = new QVBoxLayout;
vBox->addWidget(pButton);
vBox->addWidget(pButton1);
vBox->addWidget(pButton2);
vBox->addWidget(plab);
pFrame->setLayout(vBox);
QVBoxLayout *vBoxFra = new QVBoxLayout;
vBoxFra->addWidget(pFrame);
setLayout(vBoxFra);
}

Widget::~Widget()
{
delete ui;
}

void Widget::keyPressEvent(QKeyEvent *pe)
{
switch(pe->key())
{
case Qt::Key_Left:
{
pButton->setFocus();
}
break;
case Qt::Key_Up:
plab->setText("this is UP");
break;
case Qt::Key_Down:
plab->setText("this is Down");
break;
case Qt::Key_Right:
plab->setText("this is Right");
break;
}
}
bool Widget::eventFilter(QObject *obj, QEvent *pe)
{
if(obj == pButton ||obj == pButton1 || obj==pButton)
{
if(pe->type() == QEvent::KeyPress )
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(pe);
if(keyEvent->key() == Qt::Key_Space || keyEvent->key() == Qt::Key_Tab)
{
return true;
}
}
else
{
return false;
}
}
return QWidget::eventFilter(obj,pe);
}


附上一个测试源码。。。

当按下方向键时,只要没有Button 设置成焦点,怎么按键都可以。。
只要 Key_Left 之后,所有的按键就失灵了。。谁能解释下,应该怎么解决。。。
万分感激!!!
念茜 2012-03-23
  • 打赏
  • 举报
回复
也许快捷键设置有冲突

Tools -> Options -> Enviroment -> Keyboard

Debugger.NextLine 设置别的快捷键
shen_wei 2012-03-23
  • 打赏
  • 举报
回复
这就是过滤消息。。这个消息我已经使用了。。屏蔽了 tab 键

不过这个有些缺点,每一个控件都要加进去。。

if(obj == pMain_Button ||obj == pMain_Button1 || obj==pAi_Button)

如果有N 多个就可以加载死了。。。我暂时的理解@@

希望大家帮我解决 1楼的问题。。。
xiachm 2012-03-23
  • 打赏
  • 举报
回复
对整个窗体设置消息过滤器
xiachm 2012-03-23
  • 打赏
  • 举报
回复
看看这个已经解决的问题,或许对你有帮助。

http://topic.csdn.net/u/20120322/11/02e0daba-c055-4454-90b3-7e6ca8101620.html
shen_wei 2012-03-23
  • 打赏
  • 举报
回复
但是现在这个要求就是 屏蔽tab键。。。全部用方向键来实现!!

我是这样 屏蔽了Tab键
所有的控件都是无焦点的。。setFocusPolicy(Qt::NoFocus);

根据这样的来实现方向键。。

我不知到其它方法,怎么屏蔽tab键了。。

jdwx 2012-03-23
  • 打赏
  • 举报
回复
一般是按TAB键移动焦点,有些个控件会用到方向键,把TAB顺序设置好了就可以了。
shen_wei 2012-03-23
  • 打赏
  • 举报
回复
那应该怎么实现哪?做标记还是其它方法。。刚刚接触Qt。。

但是,你想想在Widget上有N 多控件时,不也是可以切换焦点吗??用方向键来选择。。。。

我的这个是 QPushButtong->QGrilayout->QFrame->QWidget
是这样的顺序排列的。。。
shen_wei 2012-03-23
  • 打赏
  • 举报
回复
没有人来了吗?////
jdwx 2012-03-22
  • 打赏
  • 举报
回复
关于方向键的问题,其实不是什么问题,只是你没有注意而已。
仔细想想,如果你是桌面上有好几个程序运行,例如两个记事本,
想在另外一个记事本里输入文本,怎么办?
这是系统的一个基本设计,只能有一个活动窗口,每个控件也是窗口,
每次只能有一个控件(活动)有焦点,活动的窗口才能获得键盘输入。

16,199

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧