Ответ 1
Предполагая, что вы просто установили QGridLayout в QtDesigner в ваш центральный виджет в MainWindow следующим образом:
вы можете получить к нему доступ в своем коде MainWindow таким образом с правильным именем объекта (здесь это gridLayout):
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->gridLayout->addWidget(new QLabel("hello world"),0,0);
}
Если вы установили макет в QtDesigner или в коде и хотите изменить макет, QWidget не позволит вам установить еще один, и вы получите сообщение об ошибке, подобное этому:
QWidget:: setLayout: попытка установить QLayout "на MainWindow" MainWindow", у которого уже есть макет
В этом случае сначала необходимо удалить существующий макет, а затем установить новый, как в приведенном выше коде.
Если вы хотите получить доступ к макету в своей основной функции, вы можете добиться этого с помощью функции QObject:: findChild следующим образом:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
QGridLayout *gridLayout = w.findChild<QGridLayout*>("gridLayout");
Q_ASSERT(gridLayout);
gridLayout->addWidget(new QLabel("hello, the second"));
w.show();
return a.exec();
}