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) { //拿到点击的目录结点的指针,可以在这里显示对应的页面 }
效果图:
注意
connect
在连接信号与槽时,对应的函数不能加形参,否则会出错。官方文档:
目录建立完成,再来创建多文档窗口:
初始化一个QMdiArea QMdiArea *m_pmdiareaArea = new QMdiArea(); m_pmdiareaArea->setViewMode(QMdiArea::TabbedView); m_pmdiareaArea->setTabsClosable(true);
可以通过QMdiArea
中的addSubWindow
函数添加多个窗口,或者QTextEdit
。比如:
QTextEdit *qtexteditWel = new QTextEdit(); qtexteditWel->setHtml("<b>Hello</b> <i>Qt!</i>"); 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();
这两行的顺序不能反,否则会得到意想不到的结果。
至此就实现了一个多文档窗口,是不是很简单。
效果图:
项目源码:
https://gitee.com/gao-yuelong/qtdemo
Linux命令:
sl命令:跑火车
这个命令需要下载,当你输入 ls 不小心输成了sl 时,你可能就需要休息一下了。