我使用QtDesigner创建了一个对话框。对话框中有一个QLineEdit
对象,其中包含一些默认内容。当对话框初始化并且焦点转移到QLineEdit
时,我希望自动选择默认内容,因此一旦用户开始写入,之前的内容将被覆盖。
编辑:
在构造函数中:
dialog->accept();
和
connect( dialog, SIGNAL(accepted()), QlineObj, SLOT( selectAll() ) );
答案 0 :(得分:9)
呼叫
lineEdit->selectAll();
设置默认文本后。 (也许在对话框构造函数中。)
答案 1 :(得分:7)
有一种更简单的方法可以获得几乎相同的行为,即使用setPlaceholderText()而不是setText()设置默认内容。这将显示灰色的默认内容,一旦QLineEdit获得焦点,它将消失。
答案 2 :(得分:4)
这是一个比较老的问题,但是,尽管如此,我还是在这里寻找这个确切问题的解决方案。可以通过以下方式解决:
创建一个从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);
}
以防万一其他人想知道如何做到这一点;-)
答案 3 :(得分:0)
您可以将 QApplication::focusChanged
与 QTimer::singleShot
一起使用来选择更改焦点上的所有文本。
通常你的 QApplication
是在 main 中声明的,所以在那里使用 QObject::connect
,例如:
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
My_Main_Window w();
QObject::connect(&a, SIGNAL(focusChanged(QWidget*, QWidget*)),
&w, SLOT(my_focus_changed_slot(QWidget*, QWidget*)));
w.show();
return a.exec();
}
记得在 My_Main_Window
类中设置公共槽:
public slots:
void my_focus_changed_slot(QWidget*, QWidget*);
然后在您对 my_focus_changed_slot
的定义中,检查第二个 QWidget*
(指向新聚焦的小部件)是否与您希望全选的 QLineEdit
相同,并且使用 QTimer::singleShot
执行此操作,以便调用事件循环,然后 QLineEdit
会立即调用 selectAll
槽,例如
void My_Main_Window::focus_changed(QWidget*, QWidget* new_widget) {
if (new_widget == my_lineedit) {
QTimer::singleShot(0, my_lineedit, &QLineEdit::selectAll);
}
}
其中 my_lineedit
是指向 QLineEdit
的指针,并且是 My_Main_Window
类的一部分。