QMainWindow setCentralWidget和stackedWidget的问题

时间:2010-05-15 11:56:58

标签: user-interface qt

我拥有我在设计师中创造的gui,简单的 包含stackedWidget的QMainWIndow,应用程序以
开头 stackedWidget索引0包含qwebkit小部件,在一些用户流之后,它变为stackedWidget
包含QTree小部件的索引1,将我在QMainWindow约束器中使用的第一个小部件居中,这行代码
这 - > setCentralWidget(ui.webView);但是当应用程序切换到索引编号1时,我将获得异常 来自切换命令。
为什么?

3 个答案:

答案 0 :(得分:4)

堆叠小部件是包含其他小部件的容器小部件。在您的设置中,您似乎使用了两个堆叠小部件:QWebKit小部件和QTreeWidget。

要让它们显示在QMainWindow中,您必须将QMainWindow的中央窗口小部件设置为堆叠窗口小部件,并使用QStackedWidget::changeCurrentIndex()插槽从第一个窗口小部件传递到其他

以下是使用QPushButtonQLabel作为堆叠小部件元素的代码示例。

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。