我拥有我在设计师中创造的gui,简单的
包含stackedWidget的QMainWIndow,应用程序以
开头
stackedWidget索引0包含qwebkit小部件,在一些用户流之后,它变为stackedWidget
包含QTree小部件的索引1,将我在QMainWindow约束器中使用的第一个小部件居中,这行代码
这 - > setCentralWidget(ui.webView);但是当应用程序切换到索引编号1时,我将获得异常
来自切换命令。
为什么?
答案 0 :(得分:4)
堆叠小部件是包含其他小部件的容器小部件。在您的设置中,您似乎使用了两个堆叠小部件: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 :(得分:1)
如果您尝试居中对齐网络视图,setCentralWidget
不是您认为的那样。中央窗口小部件是主窗口中的主窗口小部件。术语“中心”用于表示它是您放置内容的主要小部件,而工具栏,停靠小部件和状态栏就像“附件小部件”。
要对齐或以其他方式定位窗口小部件,请查看QLayout并在主窗口或中央窗口小部件中添加适当的布局。
答案 2 :(得分:0)
听起来QMainWindow中央小部件应该是堆叠小部件,而不是webView。