我用的是折页码。在它中,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!");
}发布于 2016-03-01 14:46:35
在这里找到答案Select text of QLineEdit on focus
相反,ui->lineEdit->selectAll()应该使用QTimer::singleShot(0,ui->lineEdit,SLOT(selectAll())),因为mousePressEvent trigers就在focusInEvent之后,所以focusInEvent中选择的文本被mousePressEvent取消了。
发布于 2016-02-26 15:18:03
没有真正回答这个问题,但是有一种更“标准”的方式来定制这些事件。
focusInEvent / focusOutEvent处理程序。发布于 2016-02-26 13:53:33
因为您以错误的方式使用eventFilter:
bool Widget::eventFilter(QObject *object, QEvent *event)
{
if (object == ui->lineEdit && event->type() == QEvent::FocusIn )
{
ui->lineEdit->selectAll();
ui->label->setText("Focused!");
}
if (object == ui->lineEdit && event->type() == QEvent::FocusOut )
{
ui->label->setText("unFucused!");
}
return QWidget::eventFilter(object, event);
}https://stackoverflow.com/questions/35653331
复制相似问题