代码之家  ›  专栏  ›  技术社区  ›  Shatodor

QlineEdit selectAll不工作?

  •  2
  • Shatodor  · 技术社区  · 8 年前

    我使用以下代码。在里面 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;
    }
    

    更新:做了什么 伊利亚 建议。还有同样的问题。

    void myLine::focusInEvent(QFocusEvent* event)
    {
        setText("Focused!");
        selectAll();
    }
    
    void myLine::focusOutEvent(QFocusEvent* event)
    {
        setText("UnFocused!");
    }
    
    3 回复  |  直到 8 年前
        1
  •  4
  •   Community Romance    7 年前

    在此处找到答案 Select text of QLineEdit on focus

    相反 ui->lineEdit->selectAll() 应使用 QTimer::singleShot(0,ui->lineEdit,SLOT(selectAll())) , 因为 mousePressEvent 触发器 focusInEvent 所以在中选择了文本 焦点在事件中 取消选择者 鼠标按下事件 .

        2
  •  0
  •   Ilya    8 年前

    没有真正回答这个问题,但有一种更“标准”的方式来定制这些事件。

    • 创建一个QLineEdit子类并定义自己的 focusInEvent / focusOutEvent 处理程序。

    • 如果使用的是UI Designer,请将lineEdit升级到子类(右键单击>“升级到”)。

        3
  •  -1
  •   RazrFalcon    8 年前

    因为您以错误的方式使用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);
    }