QlineEdit selectAll不起作用?

时间:2016-02-26 13:44:26

标签: qt qlineedit selectall

我使用以下代码。其中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!");
}

3 个答案:

答案 0 :(得分:3)

在这里找到答案Select text of QLineEdit on focus

相反ui->lineEdit->selectAll() 应该使用QTimer::singleShot(0,ui->lineEdit,SLOT(selectAll())), 因为mousePressEventfocusInEvent之后立即进行了分组,因此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);
}