QtQSplitter任意拆分窗口
Qt拆分窗口可以使用QSplitter,也可以使用比较容易使用布局控件来完成,本文章给出使用QSplitter分割窗口的例子。
QSplitter 继承自QFrame,而QFrame又继承自QWidget,这点很重要。
对于使用QSplitter拆分窗口:
1)新建一个QSplitter,就意味着新建了一个QWidget
2)不同的QSplitter对象通过指定父子关系来完成嵌套(划分窗口)
3)QSplitter可以放置到你指定的任何窗口内
例子1:将一个窗口拆分为左右两列,如下图所示:
代码如下: int main(int argc, char *argv[]) { //例子1, qDebug("Mainframe start... "); QApplication app(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QSplitter *pSpliter = new QSplitter(Qt::Horizontal); //QTextEdit* pLeftEdt = new QTextEdit(pSpliter); //此注释指定父窗口,打开后,后面的pSpliter->addWidget(pLeftEdt); 可以注释掉 QTextEdit* pLeftEdt = new QTextEdit; pLeftEdt->setText(QObject::tr("左窗口")); //QTextEdit* pRightEdt = new QTextEdit(pSpliter); //此注释指定父窗口,打开后,后面的pSpliter->addWidget(pRightEdt); 可以注释掉 QTextEdit* pRightEdt = new QTextEdit; pRightEdt->setText(QObject::tr("右窗口")); pSpliter->addWidget(pLeftEdt); pSpliter->addWidget(pRightEdt); pSpliter->setStretchFactor(0, 1);//下面两句设置左右两列的宽度比为1:4 pSpliter->setStretchFactor(1, 4); pSpliter->setWindowTitle(QObject::tr("Split-Wnd Demo1")); pSpliter->show(); return app.exec(); }
例子2:将一个窗口拆分为左右两列,右面再拆分为上下两列,如下图所示:
代码如下: qDebug("Mainframe start... "); QApplication app(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QSplitter *pSpliter = new QSplitter(Qt::Horizontal); QTextEdit* pLeftEdt = new QTextEdit(pSpliter); pLeftEdt->setText(QObject::tr("左窗口")); QSplitter *pRightSpliter = new QSplitter(Qt::Vertical, pSpliter); QTextEdit* pRightTopEdt = new QTextEdit(pRightSpliter); pRightTopEdt->setText(QObject::tr("右上窗口")); QTextEdit* pRightBtmEdt = new QTextEdit(pRightSpliter); pRightBtmEdt->setText(QObject::tr("右下窗口")); pSpliter->setStretchFactor(0, 1); pSpliter->setStretchFactor(1, 4); pRightSpliter->setStretchFactor(0, 1);//右面窗口上下窗口高度比为1:4 pRightSpliter->setStretchFactor(1, 4); pSpliter->setWindowTitle(QObject::tr("Split-Wnd Demo2")); pSpliter->show(); return app.exec();
例子3:将一个窗口拆分为左右两列,左面再拆分为上下两列,与例子2恰好相反,如下图所示:
代码如下: qDebug("Mainframe start... "); QApplication app(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name())); QSplitter *pLeftSpliter = new QSplitter(Qt::Vertical); QTextEdit* pLeftTopEdt = new QTextEdit(pLeftSpliter); pLeftTopEdt->setText(QObject::tr("左上窗口")); QTextEdit* pLeftBtmEdt = new QTextEdit(pLeftSpliter); pLeftBtmEdt->setText(QObject::tr("左下窗口")); QSplitter *pSpliter = new QSplitter(Qt::Horizontal); QTextEdit* pRightEdt = new QTextEdit; pRightEdt->setText(QObject::tr("右窗口")); pSpliter->addWidget(pLeftSpliter); pSpliter->addWidget(pRightEdt); pSpliter->setStretchFactor(0, 4); pSpliter->setStretchFactor(1, 1);//左右宽度比为4:1 pLeftSpliter->setStretchFactor(0, 4);//左面窗口上下窗口高度比为4:1 pLeftSpliter->setStretchFactor(1, 1); pSpliter->setWindowTitle(QObject::tr("Split-Wnd Demo3")); pSpliter->show(); return app.exec();
总结:QSplitter一次只能将一个窗口1分为2,横向竖向拆分由参数指定。要理清部件间的父子关系。有了这个思路,可以任意拆分窗口数量
为咖啡而生的保温杯升级回归,荣获2项国际大奖丨种草机在有着咖啡市之称的上海。打开地图搜索,办公楼附近1公里有10家咖啡店,还不包含便利店自动售卖机。当喝咖啡成为了像洗脸刷牙一样平常的事,拥有一个专用咖啡杯就变得很重要。因为,自带杯减
我90后独臂女孩,考上211被20多人表白,单手掌控的人生同样精彩这是我们讲述的第1598位真人故事我叫小霖,90后女孩。9岁那年,一场意外的事故,夺去了我的整个右臂,彼时的我,学习钢琴5年,还在梦想长大有机会做警察。那场事故之后,我妈妈几近昏厥
鲨鱼哥人生迷茫,低谷期最该明白的扎心真话大家好,我是鲨鱼哥!这个世界只有一种情况,可以让你从低谷中爬出来,那就是你要看透你这一段黑暗的经历。人生低谷的真相和本质,人生的成长和破局,一定是痛苦加反思,痛苦就是你所经历的这一
商鞅奔秦2月财经新势力商鞅,范睢,张仪先后奔秦,东方诸候忌之,会于齐。燕王曰人养于东而入于西,何也?蔺相如起而对曰养而不教,教而不用,用而不尽,尽而不奖,奖而不慨,是故人才出于东方而入于西
遵义新蒲虾子胡氏有名宅历史开讲胡氏民宅入户院门经虾子经开区往新舟机场方向走,穿过红乐村牌坊,可看见一个人工打造的湖泊百灵湖(也叫落石湖)。湖的北岸,静卧着一座别致而优雅的庄园。庄园依山傍水,风景钟灵毓秀
童心飞扬快乐起航春节已过去一段时间,孩子们逐渐回归了学校,开始了新一轮的学习,为丰富残疾儿童康复机构的课外生活,加强残疾儿童的想象力与动手能力,湾里管理局社会事务办组织助残志愿者前往湾里可爱宝贝语
法国举重队来五指山训练基地冬训备战巴黎奥运会海南日报记者从海南体育职业技术学院获悉,近日,法国举重队来到海南五指山训练基地冬训,备战巴黎奥运会。这也是最近几年首支来琼冬训的外国举重队。法国举重队队员在训练中海南五指山训练基地
哈登轻松砍下1912,下一场超越名宿艾佛森2月16日NBA常规赛,76人主场118112战胜骑士的比赛中,詹姆斯哈登11投5中,三分7中3,罚球6中6得到19分,另有4篮板12助攻1抢断1盖帽的数据。本场之后,哈登得分达到
118112,76人力克东部黑马!哈登轻松两双,替补奇兵12中6砍16分2月16日上午,76人主场对阵骑士,东部强强对决上演。76人拥有哈登恩比德等球星,骑士则是坐拥米切尔,这也是本赛季彻底蜕变的直接原因。此役首节,76人快速进入状态,哈登频频送出助攻
避免重复造轮子!7个Python库让开发更轻松转载说明原创不易,未经授权,谢绝任何形式的转载7个Python库提升开发效率,让你的项目更优秀当有库可以完成你需要的功能,为什么还要自己写代码呢?库是开发者最好的朋友和救星。在我看
在家就能上的真人外教,体验真实美国幼儿园课堂,轻松省上万块!太惊喜啦,年妈挖到了宝藏!真人外教CircleTime教学视频,让孩子体验真实的美国幼儿园课堂,轻松省上万块外教费!在欧美的幼儿园里,每天都会有circletime圆圈时间,老师和