【问题标题】:How to add an object into an existing layout in qt? --Solved如何将对象添加到qt中的现有布局中? - 解决了
【发布时间】:2020-10-06 20:05:00
【问题描述】:

我正在处理一个 qt 项目,我正在尝试将一个对象作为小部件添加到我的布局中,我该怎么做?

int main(int argc, char *argv[])
{

        QApplication app(argc, argv);
        GLobj obj; //this is the object I want to add and it extends QGLWidget
        QWidget *window = new QWidget;
        QGridLayout *grid = new QGridLayout;

        grid->addWidget(&obj,0,0,4,5);//it works

        window->setLayout(grid);            
        window->show();
        return app.exec();
 }

【问题讨论】:

  • 也许,你必须为QGridLayout指明行和列
  • @AntonShwarts 我会删除 Maybe。 ;-)
  • 不,它不起作用,它说没有匹配的函数调用。
  • GLobj 是 QWidget 的派生类吗?
  • 请更新您的问题,以逐字显示您尝试过的最新代码以及任何错误消息。

标签: c++ qt user-interface qlayout


【解决方案1】:

QGridLayout::addWidget 方法需要 一个指针 指向 QWidget 派生类的实例,因此如果 GLobj 恰好是这样的:

class GLobj : public QWidget
{
...

你可以这样做:

grid->addWidget(&obj);

【讨论】:

  • 它扩展了 QGLWidget 类
  • @Ashley 仍然无法解决您传递/投错的事实。
  • 是的,你是对的!调整显示参数后,我终于让它显示了。谢谢!
【解决方案2】:

如文档中指定的here

addWidget(*Widget, row, column, rowspan, colspan)

所以替换

grid->addWidget(obj);//I'm not able to do it..

grid->addWidget(obj, 1, 1, 2, 2); //Now I'm able to do it.. :)

【讨论】:

  • grid->addWidget(obj, 1, 1);