Wt C++按钮单击后使窗口不可单击
Wt C++ make window unclickable after button click
>编辑:下面的解决方案
使用 Wt(版本 3(C++框架:当单击调用函数的 WPushButton 时:
button->clicked(boost::bind(&Service::burn, this));
如何以这样的方式冻结屏幕(或所有按钮(,以便在函数运行时(运行很长时间(时无法单击任何内容。目前,当函数 Service::burn(( 运行时,我可以单击其他按钮,这些按钮在函数 Service::burn(( 完成后排队并执行。
请注意,冻结后需要恢复所有按钮/屏幕。还有一个函数:
溶液:
Wt::WPushButton* spec_button;
void testclass::test_only()
{
spec_button = new Wt::WPushButton("slow func");
auto some_long_func = [&](){
cout << "#######start n";
std::this_thread::sleep_for(std::chrono::seconds(1));
cout << "#######end n";
spec_button->setDisabled(false);
};
content()->addWidget(spec_button);
spec_button->clicked().connect(spec_button, &WPushButton::disable);
spec_button->clicked().connect(boost::bind<void>(some_long_func));
}
这应该有效:
button->clicked(button, &WPushButton::disable);
button->clicked(boost::bind(&Service::burn, this));
因此,您可以使用第一个处理程序禁用 UI,然后使用第二个处理程序启动繁重的长进程。
如果将这两个处理程序放入单个调用中,则它不起作用,因为在调用完成之前,UI 更改不会传播到浏览器。
Wt 在事件处理完成之前不会将小部件树修改发送到浏览器,这意味着 pf 按钮禁用的效果在 some_long_func 完成后才会变得可见。
解决此问题的一种方法是在禁用按钮后和调用some_long_func之前调用 wApp->processEvents((。这将导致小部件树的中间更新立即发送到浏览器。因此,按钮 clicked(( 处理程序可以如下所示(作为确保信号处理程序执行顺序的一个函数(:
{
spec_button->disable();
wApp->processEvents();
some_long_func();
}
Wt 应用程序有一个主容器,其中包含我自己的类,如下所示:
WtMain::WtMain ( void )
:Wt::WContainerWidget ( ) {
setId ( "wkmain-apps" ) ;
}
此类是在指针C_Main上创建的。当我冻结所有应用程序时,请运行以下命令:
C_Main->doJavaScript ( "$('#wkmain-apps').css({'opacity': 0.5,'z-index': 5,'pointer-events': 'none' });" ) ;
当你的函数完成工作时,做:
C_Main->doJavaScript ( "$('#wkmain-apps').css({'opacity': 1,'z-index': 'auto','pointer-events': 'all' });" ) ;
以解冻屏幕。
相关文章:
- 我想使用此代码单击某个特定窗口,但它无法正常工作
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 单击"推送"按钮应使用Qt C++在不同的窗口中显示绘图
- 如何在单击QT窗口时将键盘控件返回到QT窗口
- CMFCButton在分层窗口的子对话框中未单击
- 获取我单击的窗口的 HWND
- Win32:在单击其子窗口时,Combobox失去了焦点
- 单击不同窗口上的按钮时,请更改类的参数
- Wt C++按钮单击后使窗口不可单击
- 在窗口或桌面窗口中单击文件
- 在Qt中单击QTableView中行的特定单元格时,打开一个新窗口
- 在调整大小窗口时,如何使用鼠标单击来获取图像的坐标
- QT通过单击Menubar C 移动整个窗口/应用程序
- 单击另一个小组件时将窗口小部件标记为未选中
- 如何使用C++禁用窗口上的右键单击按钮
- 鼠标单击背景窗口,而无需移动鼠标C
- MFC单击并移动/拖动对话框窗口
- 如何通过单击按钮在窗口上生成对象
- 单击按钮后,如何在QT中更改窗口中的信息
- 单击窗口移动后的坐标