[英]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.