我使用以下代码。其中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!");
}
答案 0 :(得分:3)
在这里找到答案Select text of QLineEdit on focus
相反ui->lineEdit->selectAll()
应该使用QTimer::singleShot(0,ui->lineEdit,SLOT(selectAll()))
,
因为mousePressEvent
在focusInEvent
之后立即进行了分组,因此focusInEvent
中选择的文字会被mousePressEvent
取消选择。
答案 1 :(得分:0)
并没有真正回答这个问题,但有一个更多的标准"定制这些事件的方式。
创建QLineEdit子类并定义自己的focusInEvent
/ focusOutEvent
处理程序。
如果您正在使用UI设计器,请将lineEdit提升为您的子类(右键单击>"提升为")。
答案 2 :(得分:-1)
因为你以错误的方式使用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);
}