我有一个QT问题。我希望QLineEdit的小部件必须在应用程序启动时的焦点。以下面的代码例如:

#include <QtGui/QApplication>
#include <QtGui/QHBoxLayout>
#include <QtGui/QPushButton>
#include <QtGui/QLineEdit>
#include <QtGui/QFont>


 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启动,如果它不能正常工作之前使用?

有帮助吗?

解决方案

键盘焦点是对窗口小部件的标签订单,默认选项卡顺序的是基于在该小部件被构造的顺序。因此,创造更多的widget改变键盘焦点。这就是为什么你必须做出 QWidget::setFocus 的最后一次通话。

我会考虑使用一个子类QWidget的该覆盖的 showEvent 虚函数和然后设置键盘焦点lineEdit。这将具有的始终给予lineEdit焦点时,示出的窗口中的效果。

其他提示

这可能工作另一个窍门是通过使用singleshot定时器:

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

实际上,这调用事件系统右后setFocus()实例的QLineEdit时隙是“免费”这样做,即后的某个微件被完全构造。

也许这是一个更新作为最后的答案是在2012和OP最后编辑在2014年他们的方式,我得到这个工作的问题是改变策略,然后设置焦点。

line->setFocusPolicy(Qt::StrongFocus);
line->setFocus();

在的Qt的setFocus()是一个槽,则可以尝试其它重载的方法,这需要的Qt :: FocusReason参数如线如下所示:

line->setFocus(Qt::OtherFocusReason);

可以了解在下面的链接焦点原因选项:

http://doc.trolltech.com/4.4/qt.html #FocusReason-枚举

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top