проблема с QMainWindow setCentralWidget и stackedWidget - PullRequest
0 голосов
/ 15 мая 2010

У меня есть графический интерфейс, созданный в конструкторе, простой.
QMainWIndow, который содержит stackedWidget, приложение запускается с
stackedWidget индекс 0, который содержит виджет qwebkit, и после некоторого потока пользователя он меняется на stackedWidget
индекс 1, содержащий виджет QTree, для центрирования первого виджета, который я использую в конструкторе QMainWindow, в этой строке кода
этом-> setCentralWidget (ui.webView); но когда приложение переключается на индекс № 1, я получаю исключение
исходя из команды переключения.
Зачем ?

Ответы [ 3 ]

4 голосов
/ 15 мая 2010

Сложенный виджет - это контейнерный виджет, который содержит другой виджет. В ваших настройках вы, кажется, используете два сложенных виджета: виджет QWebKit и QTreeWidget.

Чтобы они отображались в QMainWindow, необходимо установить центральный виджет QMainWindow в качестве виджета с накоплением и использовать слот QStackedWidget::changeCurrentIndex() для перехода от первого виджета к другому.

Вот пример кода с использованием QPushButton и QLabel в качестве элементов составного виджета.

QMainWindow *mainWindow = new QMainWindow();
QStackedWidget *stackedWidget = new QStackedWidget();

// stacked item 0
QPushButton *pushButton = new QPushButton("Here is a button");
stackedWidget->addItem(pushButton);

// stacked item 1
QLabel *label = new QLabel("Here is a label");
stackedWidget->addItem(label);

// add the stacked widget to the main window
mainWindow->setCentralWidget(stackedWidget);

Чтобы изменить текущий отображаемый элемент с кнопки на метку, вы можете использовать:

stackedWidget->setCurrentIndex(1); // go to the label widget
stackedWidget->setCurrentIndex(0); // go back to the button widget

Альтернативный ответ на комментарии. Вы уверены, что хотите использовать сложенный виджет? На самом деле, стекирующий виджет специализирован для создания вкладки, подобной презентации виджета. Если вы хотите переключиться с одного виджета на другой, вы можете напрямую использовать метод QMainWindow :: setCentralWidget (), как показано в следующем коде.

QMainWindow *mainWindow = new QMainWindow();
QVector< QWidget* > widgets;

// stacked item 0
QPushButton *pushButton = new QPushButton("Here is a button");

// stacked item 1
QLabel *label = new QLabel("Here is a label");

widgets << pushButton << label;

// add the first widget to the main window
mainWindow->setCentralWidget(widgets[0]);

Если вы хотите переключиться на другой виджет, вы можете использовать:

mainWindow->setCentralWidget(widgets[1]);
1 голос
/ 15 мая 2010

Если вы пытаетесь выровнять веб-представление по центру, setCentralWidget - это не то, что вы думаете. Центральный виджет - это главный виджет в главном окне. Термин «центральный» означает, что это основной виджет, в который вы помещаете свое содержимое, тогда как панели инструментов, виджеты закрепления и строка состояния похожи на «вспомогательные виджеты».

Чтобы выровнять или иным образом расположить виджет, взгляните на QLayout и добавьте правильный макет в основное окно или в центральный виджет.

0 голосов
/ 15 мая 2010

Похоже, что центральный виджет QMainWindow должен быть виджетом с накоплением, а не webView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...