Мне нужен макет QMainWindow для изменения в зависимости от количества ядер. Поэтому я устанавливаю его вручную (не используя режим разработки).Правильный способ вручную установить макет окна в Qt
Мой вопрос: После того как этот макет был создан, как я могу обратиться к виджетам, которые он содержит?
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//...
buildLayout();
//...
// Now I'd like to use something like this:
// ui->threadingTable->...
// However, it's not the member of ui
}
void MainWindow::buildLayout()
{
QWidget *window = new QWidget(this);
QTableView *threadingTable = new QTableView(window);
//...
QGridLayout *layout = new QGridLayout(window);
layout->addWidget(threadingTable, 0, 0);
//...
window->setLayout(layout);
this->setCentralWidget(window);
}
я могу получить QLayoutItem из this->centralWidget()
. Или я могу сделать все виджеты в элементах макета класса MainWindow и получить к ним доступ напрямую.
Однако я чувствую, что ни один из них не является правильным способом.
Есть ли способ передать виджеты ui? Чтобы я мог получить к ним доступ, позвонив по телефону ui->threadingTable
По-моему, нет ничего плохого в том, что виджеты также входят в «основной» класс. Конечно, вам обычно не нужно обращаться ко всем из них, и сигналы могут быть подключены, прежде чем добавлять их в макет. – juzzlin