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

另外,我已经使用QtCreator(.ui表单格式)设置了屏幕。
到目前为止,我能想到的唯一解决方案是基于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”确实一次渲染了“主页”和“注册”页面,使所有内容困惑。

因此,真正的问题是:



其次:



我正在使用带有QtCreator 3.2.1的Ubuntu 12.04。
提前致谢。

最佳答案

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

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

因此,在您的情况下,您需要以下3种ui形式:

  • MainWindow(QStackWidget + 2个按钮)
  • LoginWidget
  • 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,您可能看不到任何东西。



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

    关于c++ - Qt-关于如何在UI窗体之间实现导航的任何指南?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26162336/

    10-11 22:41
    查看更多