Qt - 关于如何在UI表单之间实现导航的任何指南?

时间:2014-10-02 13:51:13

标签: c++ qt

我现在正在学习Qt,尝试制作一个简单的应用程序。我试图实施的是一个简单的欢迎'屏幕,有两个按钮('注册'和'登录')。问题是页面重定向到其他两个页面。

另外,我已经使用QtCreator(以.ui Forms格式)设置了屏幕。 到目前为止,我能想出的唯一解决方案是基于Qt本身的一个示例,该示例使用 QStackedWidget ,将 QWidget 添加为页面。问题是示例中的那些页面是以编程方式安装的(我想使用我拥有的表单)。

如果我试试这个:

MainWindow::MainWindow() :
        ui_home(new Ui::HomeView),
        ui_register(new Ui::RegisterView) {
    ui_home->setupUi(this);
    ui_register->setupUi(this);

    pagesWidget = new QStackedWidget;
    pagesWidget->addWidget(ui_home->centralWidget);
    pagesWidget->addWidget(ui_register->centralWidget);
    ...
}

它的作品'但结果太可怕了。 ' centralWidget'从我的表单添加到' pagesWidget',但是' setupUi'在此之前真正呈现了家庭'和'注册'一下子就把所有页面弄乱了。

所以,真正的问题是:

  

是否有关于如何在UI表单之间实现导航的指南?

其次:

  

如何从我的UI窗体中检索QWidget并添加到QStackedWidget,而不进行渲染?

我正在使用Ubuntu 12.04,使用QtCreator 3.2.1。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

你做错了。您应该创建一个包含2个项目的“MainWidget”:a)QStackedWidget,b)导航面板(您的按钮)。然后你应该将“MainWidget”设置为一个中心小部件。

之后,您可以将来自导航面板的信号(点击“注册”或“登录”按钮的信号)连接到相应的插槽,这将在QStackedWidget上选择必要的小部件

因此,在您的情况下,您需要接下来的3个ui表单:

  1. MainWindow(QStackWidget + 2个按钮)
  2. LoginWidget
  3. RegisterWidget
  4. 伪代码:

    // RegisterWidget.cpp + you should have RegisterWidget.ui
    RegisterWidget::RegisterWidget()
      : public QWidget(NULL)
      , ui( new Ui::RegisterWidget() )
    {}
    
    // LoginWidget.cpp + you should have LoginWidget.ui
    LoginWidget::LoginWidget()
      : public QWidget(NULL)
      , ui( new Ui::LoginWidget() )
    {}
    
    // MainWindow.cpp + you should have MainWindow.ui
    MainWindow::MainWindow()
      : public QMainWindow()
      , ui( new Ui::MainWindow() )
    {
      ui->setupUi(this);
    // !!!!!!!!!!!!!!!!!!!
    // Creating widgets here.
    // Possible - setup communication between widgets with signals / slots
    // !!!!!!!!!!!!!!!!!!!
      m_loginForm = new LoginWidget();
      m_regForm = new RegisterWidget();
      ui->stackedWidget->addWidget( m_loginForm  );
      ui->stackedWidget->addWidget( m_regForm );
    
      connect( ui->loginBtn, &QPushButton::clicked, this, &MainWindow::onLogin );
      connect( ui->regBtn, &QPushButton::clicked, this, &MainWindow::onReg );
    }
    
    // private slots:
    void MainWindow::onLogin()
    {
      ui->stackedWidget->setCurrentWidget( m_loginForm );
    }
    
    void MainWindow::onReg()
    {
      ui->stackedWidget->setCurrentWidget( m_regForm );
    }
    

    不要忘记布局。因为如果您的小部件的大小为1x1px,您可能看不到任何内容。

      

    如何从我的UI窗体中检索QWidget并添加到QStackedWidget,而不进行渲染?

    您可以使用QWidget::hide()方法。