我使用QtDesigner创建了一个对话框。有一个 QLineEdit
具有一些默认内容的对话框中的对象。当对话框初始化并且焦点转到 QLineEdit
,我希望自动选择默认内容,因此一旦用户开始写入,之前的内容将被覆盖。
编辑:
在构造函数中:
dialog->accept();
和
connect( dialog, SIGNAL(accepted()), QlineObj, SLOT( selectAll() ) );
我使用QtDesigner创建了一个对话框。有一个 QLineEdit
具有一些默认内容的对话框中的对象。当对话框初始化并且焦点转到 QLineEdit
,我希望自动选择默认内容,因此一旦用户开始写入,之前的内容将被覆盖。
编辑:
在构造函数中:
dialog->accept();
和
connect( dialog, SIGNAL(accepted()), QlineObj, SLOT( selectAll() ) );
呼叫
lineEdit->selectAll();
设置默认文本后。 (也许在对话框构造函数中。)
呼叫
lineEdit->selectAll();
设置默认文本后。 (也许在对话框构造函数中。)
有一种更简单的方法可以获得几乎相同的行为,即使用setPlaceholderText()而不是setText()设置默认内容。这将显示灰色的默认内容,一旦QLineEdit获得焦点,它将消失。
这是一个较老的问题,但尽管如此,我最终在这里寻找解决方案这个确切的问题。它可以通过以下方式解决:
创建一个派生自的类 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);
}
以防万一其他人想知道如何做到这一点;-)