我想做一些当QMainWindow准备就绪时会访问网络的东西。
我想我不应该在构造函数中这样做,所以我试图找到一个小部件将得到的信号,并尝试在其他UI库中实现类似OnReady()的回调。但我仍然无法找到办法做到这一点。
非常感谢。有没有办法在Qt4中实现OnReady()回调?
2
A
回答
4
如果我理解正确,只要应用程序的事件循环准备好处理事件,就需要做一些事情。
你不能在构造函数中完成它的原因,因为应用程序的事件循环尚未准备好,直到之后构造函数完成运行。
你可以做的是在你的MainWindow类中创建一个包含你想要运行的代码的插槽,在构造函数中设置一个单次计时器,并让该计时器调用你的插槽。例如:
mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void doStuff(); // This slot will contain your code
// ...
// ...
// ...
}
mainwindow.cpp
:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QTimer::singleShot(0, this, SLOT(doStuff())); // This will call your slot when the event loop is ready
// ...
// ...
// ...
}
void MainWindow::doStuff()
{
// This code will run as soon as the event loop is ready
}
0
替代的方式是使用QMetaObject::invokeMethod
与排队连接。如果你使用invokeMethod,你也可以传递一个参数。
QMetaObject::invokeMethod(
this,
"onReady",
Qt::QueuedConnection,
Q_ARG(QString, argument));
相关问题
- 1. 有没有办法在Ruby中强制实现接口方法?
- 2. 有没有办法在GDI +中实现图层?
- 3. 有没有办法在Java中动态实现接口?
- 4. 有没有办法在iOS 5中实现可缩放的UIPageViewController?
- 5. 有没有办法在C#中实现“void func(out params object [] parameters)”#
- 6. 有没有办法在Pymunk中实现静摩擦
- 7. 有没有办法在Firebase中实现ForEach?
- 8. 有没有办法在HTML中实现6点按钮?
- 9. 有没有办法在C#中实现平面文本框?
- 10. 有没有办法在回调中保持引用?
- 11. 实现WebSocket但没有找到回调?
- 12. 有没有办法确保实现接口的类实现静态方法?
- 13. 有没有办法改变龙卷风PeriodicCallback实例中的回调超时?
- 14. 有没有办法避免有全局变量来实现qsort
- 15. 有没有办法在ec2实例中获取实例ID
- 16. 有没有办法在Pymongo 3.0中跳过insert_many的现有_id?
- 17. 有没有办法从Ruby中的实例调用私有的类方法?
- 18. 有没有办法重用Job实例?
- 19. 有没有办法使用Object.keys()来实现Nashorn JSObject的自定义实现?
- 20. 有没有办法让YQL返回HTML?
- 21. 有没有办法在Java中说“方法返回这个”?
- 22. 有没有办法实现两个tableview的并行滚动?
- 23. 有没有办法“超载”或重新实现__stack_chk_fail?
- 24. 有没有办法通过ToolboxBitmap实现真正的透明度?
- 25. 有没有办法通过box2d来实现引力的变化?
- 26. 有没有办法在可调用方法中使用参数?
- 27. 有没有办法在NetBeans
- 28. 有没有办法在Notepad ++
- 29. 有没有办法在UIWebview
- 30. 有没有办法在Groovy中拥有可调用的对象?
非常感谢。我仍然想知道为什么Qt没有一个简单的方法来处理这个简单的任务... – jagttt 2010-05-02 12:03:29
使用单次计时器更通用。它也可以用于其他时间,必须延迟操作直到当前事件处理完成。 – baysmith 2010-05-02 17:38:33