【发布时间】:2016-02-26 13:44:26
【问题描述】:
我使用以下代码。其中lineEdit->selectAll() 工作由pushButton 调用,仅 在首次启动时由eventFilter 调用。尽管label->setText 一直正常工作。为什么?
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->lineEdit->installEventFilter(this);
}
void Widget::on_pushButton_clicked()
{
ui->lineEdit->selectAll();
}
bool Widget::eventFilter(QObject *object, QEvent *event)
{
if (object == ui->lineEdit && event->type() == QEvent::FocusIn )
{
ui->lineEdit->selectAll();
ui->label->setText("Focused!");
return false;
}
if (object == ui->lineEdit && event->type() == QEvent::FocusOut )
{
ui->label->setText("unFucused!");
return false;
}
return false;
}
UPD:按照 Ilya 的建议做了。还是有同样的问题。
void myLine::focusInEvent(QFocusEvent* event)
{
setText("Focused!");
selectAll();
}
void myLine::focusOutEvent(QFocusEvent* event)
{
setText("UnFocused!");
}
【问题讨论】:
-
为什么不用
QWidget的focusInEvent / focusOutEvent? -
如果我由设计师创建
QLineEdit,是否可以(使用focusInEvent)? -
我不明白为什么不呢?
-
我应该添加这个:
void lineedit::focusInEvent(QFocusEvent* event) { ui->lineEdit->selectAll(); QLineEdit::focusInEvent(event); }?但是代码在哪里? -
是的,它有效吗?