Qt实现多文档窗口

Qt实现多文档窗口

这次实现一个多文档窗口,左边目录,右边显示页面。点击目录可以跳转显示对应的页面。
主要是两个类:QTreeWidget和QMdiArea

目录实现:

QTreeWidget *m_ptreewgtWgt = new QTreeWidget();
m_ptreewgtWgt->setHeaderLabel(tr("目录"));
QTreeWidgetItem *qtreewgtTitle1 = new QTreeWidgetItem(m_ptreewgtWgt);
qtreewgtTitle1->setText(0, "Title1");
QTreeWidgetItem *qtreewgtcapt1 = new QTreeWidgetItem(qtreewgtTitle1);
qtreewgtcapt1->setText(0, "capter1");

QTreeWidgetItem *qtreewgtTitle2 = new QTreeWidgetItem(m_ptreewgtWgt);
qtreewgtTitle2->setText(0, "Title2");
QTreeWidgetItem *qtreewgtcapt2 = new QTreeWidgetItem(qtreewgtTitle2);
qtreewgtcapt2->setText(0, "capter2");

需要注意的就是QTreeWidgetItem基于对应的父节点创建
通过connect连接相应的信号与槽:

connect(m_ptreewgtWgt,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this,SLOT(emititemClicked(QTreeWidgetItem* ,int)));

槽函数:

void MainWindow::emititemClicked(QTreeWidgetItem *item, int column)
{
//拿到点击的目录结点的指针,可以在这里显示对应的页面
}

效果图:
Qt实现多文档窗口_第1张图片

注意
connect在连接信号与槽时,对应的函数不能加形参,否则会出错。官方文档:
Qt实现多文档窗口_第2张图片
目录建立完成,再来创建多文档窗口:

初始化一个QMdiArea 
QMdiArea *m_pmdiareaArea = new QMdiArea();
m_pmdiareaArea->setViewMode(QMdiArea::TabbedView);
m_pmdiareaArea->setTabsClosable(true);

可以通过QMdiArea中的addSubWindow函数添加多个窗口,或者QTextEdit。比如:

QTextEdit *qtexteditWel = new QTextEdit();
qtexteditWel->setHtml("Hello Qt!");
qtexteditWel->setWindowTitle("Welcome");
qtexteditWel->setReadOnly(true);
m_pmdiareaArea->addSubWindow(qtexteditWel);
qtexteditWel->showMaximized();

QTextEdit可以用来显示HTML页面,包括表格和图像等。

QTextEdit can display a large HTML subset, including tables and images.

还有一点值得注意的是:

m_pmdiareaArea->addSubWindow(qtexteditWel);
qtexteditWel->showMaximized();

这两行的顺序不能反,否则会得到意想不到的结果。

至此就实现了一个多文档窗口,是不是很简单。
效果图:
Qt实现多文档窗口_第3张图片
项目源码:
https://gitee.com/gao-yuelong/qtdemo

Linux命令:
sl命令:跑火车
这个命令需要下载,当你输入 ls 不小心输成了sl 时,你可能就需要休息一下了。

Qt实现多文档窗口_第4张图片

你可能感兴趣的:(Qt,qt,QTreeWidget,QMdiArea)