gpt4 book ai didi

c++ - 访问 QStackedWidget 中的小部件

转载 作者:行者123 更新时间:2023-11-28 01:46:12 24 4
gpt4 key购买 nike

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

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

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

最佳答案

QStackedWidget提供了获取child widgets by index的方法,以及 current widget .

一个简单的例子如下:

MOC header

class MyWidget: QWidget
{
Q_OBJECT

public:
using QWidget::QWidget

QWidget *ptr;
};

源文件

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 默认使用虚拟接口(interface),所以如果您有需要提取的自定义子部件,可以使用qobject_cast。 . qobject_cast 基本上是一个快速的 dynamic_cast,即使没有 RTTI 也能工作。在模板驱动代码中,dynamic_cast 有点代码味道:这意味着您过早地丢失了有用的类型信息。对于虚拟接口(interface),情况恰恰相反:您应该根据需要使用 qobject_cast

关于c++ - 访问 QStackedWidget 中的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44980383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com