首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在向导页上处理取消

在向导页上处理取消
EN

Stack Overflow用户
提问于 2012-06-22 19:40:48
回答 3查看 2.6K关注 0票数 0

我怀疑我正在尝试让QWizardPage做比它应该做的更多的事情,这就是我遇到问题的原因,但也许有一种方法可以做到这一点。

因此,我在QWizard中有多个页面,在一个特定的页面上,我对一些硬件运行了一系列测试,然后将结果存储在数据库中。如果有必要,我希望能够取消。但是,现在Cancel按钮是QWizard的一部分,所以我不确定如何处理它。

我意识到我可以重写QWizardreject()函数,然后确定当前页面,如果它是我感兴趣的页面,则执行一些操作,但除非迫不得已,否则我不愿以这种方式将页面绑定在一起。

我确实尝试过将rejected()信号连接到向导,如下所示:

代码语言:javascript
运行
复制
connect(this, SIGNAL(rejected()), ui->runTestPage, SLOT(on_rejected()));

但这会立即关闭页面,然后我才能向用户显示任何内容,告诉用户我要取消。

我可以向向导页面添加一个按钮,当测试运行时将显示该按钮,以允许取消,但该页面仍然有主取消按钮。事实上,即使在测试完成后,Cancel仍然显示,因此能够删除或禁用它似乎是合适的。

那么,这是我可以做的事情,还是我需要重新使用向导的整个过程?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-22 23:33:25

是的,这是可行的。首先,你不一定需要覆盖rejected(),我会沿着取消QWizard cancel按钮的路线走下去,而是插入你自己的QPushButton (或其他任何东西),指向你自己的插槽,从那里做你的“立即取消”消息框,然后触发rejected()插槽。

这将为你省去很多处理默认信号/插槽的麻烦,并允许你将“Cancel”替换为“Close”,这在向导的上下文中可能更有意义(取决于向导、功能等)。

票数 2
EN

Stack Overflow用户

发布于 2012-09-17 20:39:47

一种方法是断开向导的reject()插槽与cancel按钮的clicked()信号的连接,然后从询问用户是否真的确定的位置连接您自己的插槽,如下所示:

在向导的构造函数中:

代码语言:javascript
运行
复制
// install a slot handling the cancel button, but disconnect the default slot that would close the wizard first
disconnect( button( QWizard::CancelButton ), SIGNAL( clicked() ), this, SLOT( reject() ) );
connect( button( QWizard::CancelButton ), SIGNAL( clicked() ), this, SLOT( cancelWizard() ) );

然后实现您自己的插槽处理取消:

代码语言:javascript
运行
复制
void SetupWizard::cancelWizard() {
    if( QMessageBox::question( this, trUtf8( "Quit Setup" ), trUtf8( "Setup is not complete yet. Are you sure you want to quit setup?" ), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) {
        // allow cancel
        reject();
    }
}
票数 5
EN

Stack Overflow用户

发布于 2019-12-27 18:32:58

您可以在向导类中重写reject方法,并在reject方法中调用QWizard::reject

代码语言:javascript
运行
复制
void MyWizard::reject()
{
    if( QMessageBox::question( this, trUtf8( "Quit Setup" ), trUtf8( "Setup is not complete yet. Are you sure you want to quit setup?" ), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) {
        // allow cancel
        QWizard::reject();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11155494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档