题
我有一个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);
可以了解在下面的链接焦点原因选项:
不隶属于 StackOverflow