Qt:update - 在运行时将ui对象添加到现有窗口

时间:2011-06-08 16:57:30

标签: qt qt4

是否可以将ui对象(按钮,文本框等)添加到可见的qt窗口,即我有一个具有QTextEdit的窗口,用户可以在其中添加一个数字,然后有一个按钮可以添加另一个QTetEdit另一个数字和一个删除它的按钮。这意味着我可以添加任意数量的字段,稍后我可以对所有元素执行某种计算,因为我需要能够添加任意数量的额外对象,因此显示和隐藏元素可能效率低下。这是一个组成的例子,但它证明了我所追求的目的。

有没有人做过类似的事情?

- 更新 -

下面是我正在尝试的一些不适合我的代码,代码运行时窗口已经可见:

void MainWindow::addArgument()
{
    QPushButton button;
    ui->addArgRowHorizontalLayout->addWidget(&button);
    button.show();
    this->show();
}

任何人都知道我做错了什么,一切都在qtcreator中自动完成并编译没有错误所以我不知道下一步该去哪里。

Ĵ

5 个答案:

答案 0 :(得分:7)

我正在参考更新的内容。 您是否已从C#/ Java迁移到C ++?

QPushButton button;

此指令在堆栈上创建QPushButton对象,堆栈上的对象在其作用域结束时被销毁,在本例中是函数的结束括号。要使对象持久,您应该在

上分配它
QPushButton* button = new QPushButton();

当然,从现在开始你必须使用指针语义。

通常在C ++中,当应用程序的逻辑不再需要它时,您必须从堆中手动删除对象。值得庆幸的是,Qt会跟踪QObject,因此您很少需要自己处理它们。启动C ++的好地方是C++ FAQ。此外,您应该阅读Qt手册,它非常容易阅读并获得Qt的概念。

答案 1 :(得分:3)

我设法动态地将小部件添加到我的主窗口,如下所示:

MainWindow :: addWidget()是MainWindow的一个插槽

void MainWindow::addWidget()
{
    QPushButton* button = new QPushButton;
    ui->HorizontalLayout->addWidget(button);
    button->show();
}

当你知道如何:

时很简单

答案 2 :(得分:0)

是的,这是可能的。没有什么可以阻止您动态地从布局中动态添加或删除小部件。

如果您的容器在布局更改后需要重新调整大小,您可能需要查看可能需要调用的adjustSize()函数。

试一试。

答案 3 :(得分:0)

Qt如何创建其ui对象并不神秘:Qt Designer生成C ++源代码,您可以查看。如果您的表单名称是MyForm.ui,那么您应该在构建目录中找到一个文件ui_MyForm.h;该文件中的函数setupUi向您展示如何从头开始构建ui。

答案 4 :(得分:0)

检查this post。我在之前的一个项目中做了类似的事情,它就像一个魅力。