当前位置:  开发笔记 > 编程语言 > 正文

将QLineEdit焦点设置在Qt中

如何解决《将QLineEdit焦点设置在Qt中》经验,为你挑选了2个好方法。

我有一个qt问题.我希望QLineEdit小部件在应用程序启动时具有焦点.以下面的代码为例:

#include 
#include 
#include 
#include 
#include 


 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);

     QWidget *window = new QWidget();
     window->setWindowIcon(QIcon("qtest16.ico"));
     window->setWindowTitle("QtTest");

     QHBoxLayout *layout = new QHBoxLayout(window);

     // Add some widgets.
     QLineEdit *line = new QLineEdit();

     QPushButton *hello = new QPushButton(window);
     hello->setText("Select all");
     hello->resize(150, 25);
     hello->setFont(QFont("Droid Sans Mono", 12, QFont::Normal));

     // Add the widgets to the layout.
     layout->addWidget(line);
     layout->addWidget(hello);

     line->setFocus();

     QObject::connect(hello, SIGNAL(clicked()), line, SLOT(selectAll()));
     QObject::connect(line, SIGNAL(returnPressed()), line, SLOT(selectAll()));

     window->show();
     return app.exec();
 }

为什么line->setFocus()只在布局窗口小部件之后放置它并且如果在它不工作之前使用它时,将焦点放在行窗口小部件@app启动上?



1> Ariya Hidaya..:

可能有用的另一个技巧是使用单一计时器:

QTimer::singleShot(0, line, SLOT(setFocus()));

实际上,这会在事件系统"空闲"之后立即调用QLineEdit实例的setFocus()槽,即在完全构造窗口小部件之后的某个时间.



2> Judge Maygar..:

键盘焦点与小部件选项卡顺序相关,默认的Tab键顺序基于小部件的构造顺序.因此,创建更多小部件会更改键盘焦点.这就是你必须最后调用QWidget :: setFocus的原因.

我会考虑在主窗口中使用QWidget的子类来覆盖showEvent虚函数,然后将键盘焦点设置为行编辑.这将具有在显示窗口时始终给出线编辑焦点的效果.


小修正:Tab键顺序不是子构造_constructed_的顺序,而是它们_added_到父级的顺序.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有