首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QStackedWidget中访问小部件

在QStackedWidget中访问小部件
EN

Stack Overflow用户
提问于 2017-07-08 06:13:04
回答 2查看 3.4K关注 0票数 0

我正在用QtDesigner开发一个Qt应用程序。

以前,很容易访问特定的小部件来使用它们来做一些事情,比如连接信号。添加QStackedWidget后,我不能再使用类似ui->stack->page1->widget的方式访问特定的小部件。

有没有办法做到这一点呢?或者我应该总是调用findChild方法?或者至少可以将堆栈小部件中的一些嵌套小部件分配给主windwo类的属性?

EN

回答 2

Stack Overflow用户

发布于 2017-07-08 06:18:17

QStackedWidget提供了一种获取child widgets by index以及current widget的方法。

下面是一个快速示例:

MOCed标头

代码语言:javascript
复制
class MyWidget: QWidget
{
    Q_OBJECT

public:
    using QWidget::QWidget

    QWidget *ptr;
};

源文件

代码语言:javascript
复制
QStackedWidget *stackedWidget = new QStackedWidget;
stackedWidget->addWidget(new MyWidget);     // index 0
stackedWidget->addWidget(new QWidget);      // index 1
stackedWidget->addWidget(new MyWidget);     // index 2

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(stackedWidget);
setLayout(layout);

// do something specific with the first widget's ptr element
auto* widget = stackedWidget->widget(0);
auto* mywidget = qobject_cast<MyWidget*>(widget);
if (mywidget) {
    mywidget->ptr->setObjectName("FirstPage");    
}

现在,Qt默认使用虚拟接口,所以如果您有一个需要提取的定制子小部件,您可以使用qobject_cast。qobject_cast基本上是一个快速的dynamic_cast,即使没有RTTI也能工作。在模板驱动的代码中,dynamic_cast有点代码味道:它意味着您过早地丢失了有用的类型信息。对于虚拟接口,情况正好相反:您应该根据需要使用qobject_cast

票数 2
EN

Stack Overflow用户

发布于 2017-07-12 19:05:39

为什么你一层一层的获取小部件,如果你的小部件是在Qt designer中添加的,你可以通过ui->widget直接获取。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44980383

复制
相关文章

相似问题

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