OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2354|回复: 1

Qt 滑动界面历程,加入的画面里,点击设置了无聚焦属性控件后,控件焦点会转移

[复制链接]

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2018-12-10
在线时间
14 小时
发表于 2023-5-18 16:12:06 | 显示全部楼层 |阅读模式
5金钱
请教各位有没有遇到过这样的问题??
我使用的是 Qt滑动界面的历程,class SlidePage
只加入了一个画面,里面有两个 label 一个 按钮,
1.label 设置了点击产生焦点,
2.button 设置 无焦点

MLabel 类继承 了QLabel类 重写了
void focusInEvent(QFocusEvent *ev) ;
void focusOutEvent(QFocusEvent *ev) ;


class MLabel :public QLabel
{
public:
    MLabel(QWidget *parent = nullptr);
    ~MLabel();

    QHBoxLayout *layout;
protected:
    void focusInEvent(QFocusEvent *ev) ;
    void focusOutEvent(QFocusEvent *ev) ;
    bool focusNextPrevChild(bool next) ;

};



class file : public QWidget    //窗口 类
{
    Q_OBJECT

public:
    file(QWidget *parent = nullptr);
    ~file();

    QVBoxLayout *Layout;
    QPushButton *btn;
    MLabel      *label1;
    MLabel      *label2;

private slots:
    void slot_buttonclicked(void);
};


在.cpp 中 MLabel 重写了
void MLabel::focusInEvent(QFocusEvent *ev)
{
    qDebug()<<"focusInEvent="<<this;
    QLabel:: focusInEvent(ev);
}
void MLabel::focusOutEvent(QFocusEvent *ev)
{
     qDebug()<<"focusOutEvent="<<this;
     QLabel:: focusOutEvent(ev);
}

bool MLabel::focusNextPrevChild(bool next)
{
    return QLabel:: focusNextPrevChild(next);
}


// 窗口类的实现
file::file(QWidget *parent)
      Widget(parent)
{
    QPalette pal;
    pal.setColor(QPalette::Background,Qt::red);

    btn    = new QPushButton();
    btn->setText("button");
    btn->setFocusPolicy(Qt::NoFocus);
    btn->setPalette(pal);
    btn->setAutoFillBackground(true);

    label1 = new MLabel ();
    label1->setFocusPolicy(Qt::ClickFocus);
    label1->setText("label1");
    label1->setPalette(pal);
    label1->setAutoFillBackground(true);

    label2 = new MLabel ();
    label2->setFocusPolicy(Qt::ClickFocus);
    label2->setText("label2");
    label2->setPalette(pal);
    label2->setAutoFillBackground(true);

    Layout = new QVBoxLayout ();
    Layout->setContentsMargins(100,50,100,50);
    Layout->addWidget(label1);
    Layout->addWidget(label2);
    Layout->addWidget(btn);

    this->setLayout(Layout);
}


将窗口加入到 sligepage 中

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0,0,800,480);
    f = new file();
//    this->setCentralWidget(f);
    slide = new SlidePage(this);
    slide->resize(this->width(),this->height());
    slide->addPage(f);
}






这个时候,聚焦 本应该在 label1 和 label2 之间相互传递,
但是点击button控件的时候,程序会进入到 void MLabel::focusOutEvent(QFocusEvent *ev) 函数中运行,
这是为什么????????????




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165369
金钱
165369
注册时间
2010-12-1
在线时间
2110 小时
发表于 2023-5-19 00:06:17 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-1-19 08:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表