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/