初级会员
- 积分
- 53
- 金钱
- 53
- 注册时间
- 2018-12-10
- 在线时间
- 14 小时
|
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) 函数中运行,
这是为什么????????????
|
|