从主函数调用事件 我在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(); } #包括 #包括 #包括 int main(int argc,char*argv[]) { QApplication应用程序(argc、argv); QWidget窗口; QPushButton*btn=新的QPushButton(“添加”、&窗口); //这里,一个与“btn”相关的事件将更新窗口。。。 window.show(); 返回app.exec(); }
PS:我知道使用Qt设计器表单更好,但我只是想问一下执行此任务的可能性。Qt提供了这种机制。您只需将从主函数调用事件 我在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(); } #包括 #包括 #包括 int main(int argc,char*argv[]) { QApplication应用程序(argc、argv); QWidget窗口; QPushButton*btn=新的QPushButton(“添加”、&窗口); //这里,一个与“btn”相关的事件将更新窗口。。。 window.show(); 返回app.exec(); },c++,qt,C++,Qt,PS:我知道使用Qt设计器表单更好,但我只是想问一下执行此任务的可能性。Qt提供了这种机制。您只需将QPushButton::clicked()信号连接到一个插槽,然后执行您所指的更新 使用C++11的lambda: //创建按钮 QPushButton*btn=nw QPushButton(“添加”、&窗口); //将插槽连接到“点击”信号 QObject::connect(btn,&QPushButton::单击,[]{ qDebug(“点击按钮!”); //…任何你想在点击按钮后发生的事情
QPushButton::clicked()
信号连接到一个插槽,然后执行您所指的更新
使用C++11的lambda:
//创建按钮
QPushButton*btn=nw QPushButton(“添加”、&窗口);
//将插槽连接到“点击”信号
QObject::connect(btn,&QPushButton::单击,[]{
qDebug(“点击按钮!”);
//…任何你想在点击按钮后发生的事情
});
请记住,正如注释中指出的,代码中还有其他问题。正如Joel Bodenmann所指出的,Qt使用信号和插槽。您可以在
QObject
上有一个插槽,但Qt也可以连接到lambda。您的lambda必须通过引用捕获窗口
,以便更新窗口
您可能希望连接单击的
事件。某些事件,例如鼠标移动或焦点更改,无法通过插槽/信号访问
您可以使用小型代理QObject来过滤其他对象的事件。对于代码示例。您不需要实际过滤事件;你可以听进去,让他们通过
同样,您可以通过QCoreApplication
via.手动触发/伪造事件,但此
在主上下文中不存在,我同意。同时被其他人纠正的小错误<代码>鼠标事件
不会通过信号/插槽传播。widget类中有一个用于此的方法。@ypnos:Fair point,明确表示存在正确的信号。@RoQuOTriX:这是C++11之前的版本。@MSalters谢谢,我不知道。你能分享一下这个用法的例子吗?@RoQuOTriX:查看新的重载QMetaObject::Connection QObject::connect(const QObject*sender,pointertomberfunction signal,Functor Functor)
。Lambda是函子,它们有一个操作符()
。但是std::function
也可以工作。