QT Creator 主窗口 - 如何从菜单中更改每个元素的界面?
Posted
技术标签:
【中文标题】QT Creator 主窗口 - 如何从菜单中更改每个元素的界面?【英文标题】:QT Creator Main window - how to change the interface for each element from the menu? 【发布时间】:2011-07-19 12:41:17 【问题描述】:我是 QT Creator 的新手。我确实创建了一个菜单:登录 ||打开。单击登录时,我希望看到行编辑和按下按钮。单击打开时,我想在窗口中看到一张图片。我可以根据我在菜单栏中单击的内容更改同一窗口的界面吗?我该怎么做?
【问题讨论】:
你考虑过QStackWidget 吗? “QStackedWidget 类提供了一堆小部件,其中一次只能看到一个小部件” 我没有。非常感谢,你能给我一些例子的链接吗? 我首先尝试找到一些有链接但没有找到任何...如果您遵循 Qt 精神,尝试一下它是一种直截了当的(从给定的开始Qt 文档中的一段代码)。如果您有任何问题,请随时编辑您的问题。 更常见的设计是显示一个单独的窗口,显示您用于登录的控件。这样做要简单得多,因为您可以使用 Creator 绘制登录窗口。如果您以其他方式执行此操作,则需要编写代码来创建控件。 【参考方案1】:我做了类似的事情 - 一个有几个主要区域的应用程序,由顶部的图标栏切换。
我使用QStackWidget
将不同的应用程序区域堆叠在一起,使用设计器创建的一组QAction
s,并使用QActionGroup
来实现切换。
当动作被标记为“可检查”并分组在QActionGroup
中时,QToolBar
只允许一个处于活动状态。
这是我的代码的简化摘录:
// MyApp.h
#include <QMainWindow>
class QAction;
class QActionGroup;
namespace Ui
class MyApp;
class MyApp: public QMainWindow
Q_OBJECT
public:
explicit MyApp(QWidget *parent = 0);
~MyApp();
public slots:
void showSection(QAction* a);
private:
Ui::MyApp *ui;
QActionGroup* sections;
;
//MyApp.cpp
#include "structureapp.h"
#include "ui_structureapp.h"
#include <QActionGroup>
MyApp::MyApp(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyApp),
sections(new QActionGroup(this)),
ui->setupUi(this);
/* Populate section list */
/* Page indices for the stack widget*/
ui->actionSectionOne-> setData(0);
ui->actionSectionTwo-> setData(1);
ui->actionSectionThree-> setData(2);
sections->addAction(ui->actionSectionOne);
sections->addAction(ui->actionSectionTwo);
sections->addAction(ui->actionSectionThree);
ui->mainToolBar->addSeparator();
connect(sections, SIGNAL(triggered(QAction*)), this, SLOT(showSection(QAction*)));
/* Show the default section */
ui->actionContentSection->trigger();
MyApp::~MyApp()
delete ui;
void MyApp::showSection(QAction *a)
ui->mainArea->setCurrentIndex(a->data().toInt());
【讨论】:
【参考方案2】:是的,你可以。正如我所解释的earlier,每个菜单条目都是一个信号,并且连接到一个插槽。使用两个不同的菜单条目,您有两个信号,您可以将它们连接到两个不同的插槽。因此,您可以将第一个插槽命名为 onLogin
,将第二个插槽命名为 onOpen
。 (选择描述性的名称会有所帮助,这样您在周一回来时就会了解您的程序)。
现在,它是插槽onLogin
,您输入了登录代码。在插槽onOpen
中,您放置了另一个代码。但是请考虑如果您一个接一个地单击两个菜单项会发生什么。这应该是可能的吗?如果没有,您可能需要其他解决方案。使用QDialog
登录是很常见的。当对话框处于活动状态时,您无法使用主应用程序的菜单,因此您不会在忙于登录时意外点击onOpen
。
【讨论】:
以上是关于QT Creator 主窗口 - 如何从菜单中更改每个元素的界面?的主要内容,如果未能解决你的问题,请参考以下文章