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 将不同的应用程序区域堆叠在一起,使用设计器创建的一组QActions,并使用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 主窗口 - 如何从菜单中更改每个元素的界面?的主要内容,如果未能解决你的问题,请参考以下文章

[Qt Creator 快速入门] 第5章 应用程序主窗口

Qt Creator 源码学习笔记 05,菜单栏是怎么实现插件化的?

QT creator 中如何预览 form 文件?

qt creator源码全方面分析(2-10)

将应用程序的主窗口 GUI 布局更改为代码

Qt中的主窗口之菜单栏