Qt-关于如何在UI窗体之间实现导航的任何指南

Qt - Any guideline on how to implement navigation between UI Forms?

本文关键字:导航 实现 任何指 之间 窗体 于如何 UI Qt-      更新时间:2023-10-16

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

此外,我已经使用QtCreator(.uiForms格式)设置了屏幕。到目前为止,我唯一能想到的解决方案是基于Qt本身的一个示例,该示例使用QStackedWidget,添加QWidgets作为页面。问题是,示例中的这些页面是以编程方式安装的(我想使用现有的Forms)。

如果我尝试这个:

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"确实同时呈现了"主页"answers"注册"页面,把一切都搞砸了。

所以,真正的问题是:

关于如何在UI窗体之间实现导航,有什么指导方针吗?

第二:

如何从UI表单中检索QWidget并添加到QStackedWidget,而不渲染它?

我使用的是Ubuntu 12.04和QtCreator 3.2.1。提前谢谢。

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

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

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

  1. 主窗口(QStackWidget+2个按钮)
  2. 登录桥
  3. RegisterWidget

伪码:

// 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()方法。