Qt-关于如何在UI窗体之间实现导航的任何指南
Qt - Any guideline on how to implement navigation between UI Forms?
我现在正在学习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表单:
- 主窗口(QStackWidget+2个按钮)
- 登录桥
- 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()
方法。
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 用于AVX的ln(x)的实现,m256
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- UWP:在两个页面之间实现基本导航会导致错误
- Qt-关于如何在UI窗体之间实现导航的任何指南