Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从主函数调用事件 我在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 - Fatal编程技术网

从主函数调用事件 我在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(); }

从主函数调用事件 我在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(“点击按钮!”); //…任何你想在点击按钮后发生的事情

PS:我知道使用Qt设计器表单更好,但我只是想问一下执行此任务的可能性。Qt提供了这种机制。您只需将
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
也可以工作。