c++ - Qt 中的错误:QMainWindowLayout::addItem:请改用公共(public) QMainWindow API

标签 c++ qt layout

for (int x = 0; x < size; x++) {
        for (int y = 0; y < size; y++) {
            QLineEdit *newEdit = new QLineEdit(" ");
            newEdit->setGeometry(y * 50, x * 25, 50, 25);
            newEdit->setText("0");
            layout()->addWidget(newEdit);
            objMatrix[y + x * size] = newEdit;
        }
    }

我正在使用该代码动态添加小部件。然后我得到这个错误:

QMainWindowLayout::addItem: Please use the public QMainWindow API instead

代码 layout()->addWidget(newEdit); 多次有效。 我应该做什么来防止它?

抱歉我的英语不好。

最佳答案

您应该以另一种方式使用布局,因为在您的代码小部件中没有aby布局,因此您指向布局的指针是错误的,因此您的程序崩溃了。在构造函数中尝试例如:

        

QWidget *centralWidget = new QWidget(this);   
QGridLayout *layout = new QGridLayout();
centralWidget->setLayout(layout);
        
layout->addWidget(new QPushButton("Button  1"),0,0);
layout->addWidget(new QPushButton("Button  2"),0,1);     
layout->addWidget(new QPushButton("Button  3"),0,2);     
 
setCentralWidget(centralWidget); 

如果您想自己设置小部件的位置,那么您根本不需要布局。只需将centralWidget设置为所有其他小部件的父级并调用setGeometry就没有任何问题。请注意,在这种情况下,centralWidget 的左上角将为子部件提供 0;0 坐标。

关于c++ - Qt 中的错误:QMainWindowLayout::addItem:请改用公共(public) QMainWindow API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26455050/

相关文章:

c++ - 如何更改Qt中进度条的默认样式颜色

layout - 如何正确设置 ListView 的高度

使用 fragment 和 inflater 将布局膨胀为 fragment 时,Android 布局会重叠

c++ - std::cout/std::cerr 段错误

qt - QProcess.startDetached() 并写入其标准输入

c++ - 不支持基本模板的概念专用模板

c++ - 如何阻止来自 cURL 库的 Qt 应用程序信号 SIGSEGV?

android:(坏)布局背景图像质量低

c++ - 两边都有省略号的 Lambda 包捕获 - 是什么意思?

c++ - 列表c++的内存泄漏