Qt create 使用qlistwidget 和qstackedwidget 动态增删改显示隐藏页 功能实现,由另一个文件引用
时间: 2023-11-30 20:02:35 浏览: 93
可以先创建一个类来封装 QListWidget 和 QStackedWidget 的功能,具体实现如下:
```
#include <QListWidget>
#include <QStackedWidget>
class PageManager : public QObject
{
Q_OBJECT
public:
explicit PageManager(QObject *parent = nullptr);
void addPage(const QString &name, QWidget *widget);
void removePage(const QString &name);
void setPageVisible(const QString &name, bool visible);
void setCurrentPage(const QString &name);
private:
QListWidget *m_listWidget;
QStackedWidget *m_stackedWidget;
};
```
在实现文件中,需要初始化 QListWidget 和 QStackedWidget,并实现对应的函数:
```
#include "pagemanager.h"
PageManager::PageManager(QObject *parent) : QObject(parent)
{
m_listWidget = new QListWidget();
m_stackedWidget = new QStackedWidget();
}
void PageManager::addPage(const QString &name, QWidget *widget)
{
int index = m_stackedWidget->addWidget(widget);
QListWidgetItem *item = new QListWidgetItem(name, m_listWidget);
item->setData(Qt::UserRole, index);
}
void PageManager::removePage(const QString &name)
{
int index = -1;
for (int i = 0; i < m_listWidget->count(); ++i) {
if (m_listWidget->item(i)->text() == name) {
index = m_listWidget->item(i)->data(Qt::UserRole).toInt();
m_listWidget->takeItem(i);
break;
}
}
if (index != -1) {
m_stackedWidget->removeWidget(m_stackedWidget->widget(index));
}
}
void PageManager::setPageVisible(const QString &name, bool visible)
{
int index = -1;
for (int i = 0; i < m_listWidget->count(); ++i) {
if (m_listWidget->item(i)->text() == name) {
index = m_listWidget->item(i)->data(Qt::UserRole).toInt();
break;
}
}
if (index != -1) {
m_stackedWidget->widget(index)->setVisible(visible);
}
}
void PageManager::setCurrentPage(const QString &name)
{
int index = -1;
for (int i = 0; i < m_listWidget->count(); ++i) {
if (m_listWidget->item(i)->text() == name) {
index = m_listWidget->item(i)->data(Qt::UserRole).toInt();
break;
}
}
if (index != -1) {
m_stackedWidget->setCurrentIndex(index);
}
}
```
这样,就可以在另一个文件中引用 PageManager 类来实现动态增删改显示隐藏页的功能了。
阅读全文