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();
这两行的顺序不能反,否则会得到意想不到的结果。
至此就实现了一个多文档窗口,是不是很简单。
效果图:
项目源码:
gitee.com/gao-yuelong…
Linux命令: sl命令:跑火车 这个命令需要下载,当你输入 ls 不小心输成了sl 时,你可能就需要休息一下了。