问题 在焦点上选择QLineEdit的文本


我使用QtDesigner创建了一个对话框。有一个 QLineEdit 具有一些默认内容的对话框中的对象。当对话框初始化并且焦点转到 QLineEdit,我希望自动选择默认内容,因此一旦用户开始写入,之前的内容将被覆盖。

编辑:

在构造函数中:

dialog->accept(); 

connect( dialog, SIGNAL(accepted()), QlineObj, SLOT( selectAll() ) );

9797
2017-08-08 11:44


起源



答案:


呼叫

lineEdit->selectAll();

设置默认文本后。 (也许在对话框构造函数中。)


8
2017-08-08 13:53



谢谢我已经做过了;)dialog-> accept(); {in constructor}和connect(dialog,SIGNAL(accepted()),QlineObj,SLOT(selectAll())); - GG.
这适用于构造函数:QTimer :: singleShot(0,lineEdit,SLOT(selectAll())); - Zmey


答案:


呼叫

lineEdit->selectAll();

设置默认文本后。 (也许在对话框构造函数中。)


8
2017-08-08 13:53



谢谢我已经做过了;)dialog-> accept(); {in constructor}和connect(dialog,SIGNAL(accepted()),QlineObj,SLOT(selectAll())); - GG.
这适用于构造函数:QTimer :: singleShot(0,lineEdit,SLOT(selectAll())); - Zmey


有一种更简单的方法可以获得几乎相同的行为,即使用setPlaceholderText()而不是setText()设置默认内容。这将显示灰色的默认内容,一旦QLineEdit获得焦点,它将消失。


7
2018-02-05 13:32





这是一个较老的问题,但尽管如此,我最终在这里寻找解决方案这个确切的问题。它可以通过以下方式解决:

创建一个派生自的类 QLineEdit 并覆盖 focusInEvent 在标题中:

virtual void focusInEvent(QFocusEvent *event) override;

然后像这样实现它:

void MyLineEdit::focusInEvent(QFocusEvent *event)
{
    // First let the base class process the event
    QLineEdit::focusInEvent(event);
    // Then select the text by a single shot timer, so that everything will
    // be processed before (calling selectAll() directly won't work)
    QTimer::singleShot(0, this, &QLineEdit::selectAll);
}

以防万一其他人想知道如何做到这一点;-)


1
2017-08-12 08:54



你不想要它,但你指出它作为答案。 :) - eyllanesc