簡體   English   中英

從主函數調用事件

[英]Call events from the main function

在 java 中,我幾乎在任何地方創建事件,但是在 c++ ( Qt ) 中,我注意到您必須創建一個類才能使用對象的事件。 我的問題如下:是否可以從主函數使用屬於QPushButton MouseEvent (或任何其他事件)?

#include <QApplication>
#include <QWidget>
#include <QPushButton>

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

    QWidget window;

    QPushButton* btn = new QPushButton("Add",&window);

    //Here, an event related to 'btn' to update the window...

    window.show();

    return app.exec();
}

PS:我知道最好使用 Qt Designer 表單,但我只是詢問是否可以執行此任務。

某些事件,例如鼠標移動或焦點更改,無法通過插槽/信號訪問。

您可以使用一個小的代理 QObject 來過濾其他對象的事件。 有關代碼示例,請參閱installEventFilter() 您不需要實際過濾事件; 你可以只聽,讓他們通過。

同樣,您可以通過QCoreApplication通過notify()手動觸發/偽造事件。

正如 Joel Bodenmann 所說,Qt 使用信號和槽。 您可以在QObject上有一個插槽,但 Qt 也可以連接到 lambda。 您的 lambda 必須通過引用捕獲window ,以便它可以更新窗口。

您可能想要連接clicked事件。

Qt 提供了信號和插槽機制。 您可以簡單地將QPushButton::clicked()信號連接到一個插槽,然后執行您所指的更新。

使用 C++11 的 lambda:

// Create pushbutton
QPushButton* btn = nw QPushButton("Add",&window);

// Connect slot to 'clicked' signal
QObject::connect(btn, &QPushButton::clicked, []{
    qDebug("Button clicked!");
    // ... whatever else you want to happen on a button click
});

請記住,正如注釋中指出的那樣,您的代碼中還有其他問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM