gpt4 book ai didi

c++ - 如何创建可以包含不同小部件的 QVector 或其他容器?

转载 作者:行者123 更新时间:2023-12-01 14:44:20 36 4
gpt4 key购买 nike

我正在用 Qt5 开发一个 GUI,在这个 GUI 的主窗口中,它包含至少 4 个选项卡小部件,每个选项卡小部件将包含多个不同的子 QWidget,例如 QLineEdit、QSpinBox、QLCDnumber 等。然后当我打开选项卡,它的所有子小部件都将出现。

因此,对于每个选项卡,我决定创建一个 QVector(或其他容器类型)来包含其所有子 Widget,例如:

QVector<QWidget*> wids;

对于第一个选项卡小部件,如果它具有以下子级:

QLineEdit* line=new QLineEdit(this);
QLCDNumber* lcd=new QLCDNumber(this);
QSpinBox* spn=new QSpinBox(this);

然后不知何故我想做

wids.append(line);
wids.append(lcd);
wids.append(spn);

接下来,我想操作选项卡内的每个小部件,例如:

wids[0]->setText("good");
wids[1]->display(1);
wids[2]->setRange(0,10);

我知道我需要使用 dynamic_cast<...> ,但我不知道该怎么做,有没有人可以给我一些建议?

非常感谢!

最佳答案

QLineEdit , QLCDNumberQSpinBox已经从 QWidget 继承.所以如果你把它们放在 QVector (或任何容器,可能是 std::vector<QWidget*> )您必须处理 QWidget指针。

正如您正确指出的那样:

wids.push_back(line);
wids.push_back(lcd);
wids.push_back(spn);

让你各自的类(class)回来,例如 QLineEdit回来,你需要 垂头丧气来自 QWidgetQLineEdit , QLCDNumber或从 QWidget 继承的任何其他内容.

QLineEdit * line = dynamic_cast<QLineEdit*>(wids[0]);

这当然假设您确切知道对象位于哪个位置。您当然可以测试您的 Actor 是否成功:

if( line == nullptr )
{
// cast failed, either wids[0] is invalid or does not derive from QWidget
}

else
{
// cast was successful, use 'line' as regular QLineEdit.
}

单线虽然非常不安全,但将是:

dynamic_cast<QLineEdit*>(wids[0])->setText("myText");

关于c++ - 如何创建可以包含不同小部件的 QVector 或其他容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58517788/

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