Я пытаюсь создать gui с QTabWidget
с несколькими вкладками. В качестве предварительного теста я создал один, который имеет две вкладки, используя те же макеты. Первая вкладка (Страница 1) пуста, но вторая показывает QTableView
, которую я создал. Оба вкладки были созданы точно так же, но они выполняются по-разному. Кто-нибудь знает, почему первый пуст ...?Вкладка QTabWidget ничего не отображает на одной из вкладок
Я заметил, что если я прокомментирую строку int8Window->setLayout(_layout);
. Page 1 показывает, с правильной планировкой и закладка второй пустой в этот раз ...
Вот код для графического интерфейса:
// Main window and layout
QWidget* mainWindow = new QWidget;
QVBoxLayout *mainLayout = new QVBoxLayout;
// Tab widget
QTabWidget* tabWidget = new QTabWidget;
// The pages in the tab widget
QWidget* uInt8Window = new QWidget;
uInt8Window->setWindowTitle(QString("Page 1"));
QWidget* int8Window = new QWidget;
int8Window->setWindowTitle(QString("Page 2"));
QTableView* tableView = new QTableView;
QStandardItemModel* model = new QStandardItemModel(5, 5);
for (int row = 0; row < 5; ++row) {
model->setItem(row, 0, new QStandardItem("3"));
model->setItem(row, 1, new QStandardItem(5));
model->setItem(row, 2, new QStandardItem(2));
model->setItem(row, 3, new QStandardItem(1));
model->setItem(row, 4, new QStandardItem(5));
}
tableView->setModel(model);
// Setting the tab page layouts
_layout = new QVBoxLayout;
_layout->addWidget(tableView);
uInt8Window->setLayout(_layout);
int8Window->setLayout(_layout);
// Add the pages to the tab widget
tabWidget->addTab(uInt8Window, "Page 1");
tabWidget->addTab(int8Window, "Page 2");
// Add the tab widget to the main layout and show
mainLayout->addWidget(tabWidget);
mainWindow->setLayout(mainLayout);
mainWindow->show();
Хммм, ваш комментарий к управлению памятью. Я думал, Qt управляет памятью для вас и очищает память после закрытия окна gui? Прямо сейчас у моего конструктора есть эти аргументы 'testGUI (QWidget * parent = 0)' в файле заголовка. Это то, что вы имеете в виду? –
, если вы правильно установите родителя. Qt использует шаблон управления памятью дерева. Объект автоматически удаляется, если его родитель был уничтожен. Если у объекта нет родителя, его нужно удалить другими способами. В вашем примере виджеты и макет устанавливаются родителями при добавлении их в макет или назначении виджетам соответственно. Модель данных здесь не имеет кода, который назначает родителя (модель может использоваться несколькими видами). –
Итак, для объектов, у которых нет родителей, я должен их установить. То есть. 'QWidget * mainWindow = новый QWidget (родительский);', 'QTableView * tableView = новый QTableView (родительский);' и 'QStandardItemModel * model = new QStandardItemModel (5, 5, parent);'. –