Qt拆分窗口可以使用QSplitter,也可以使用比较容易使用布局控件来完成,本文章给出使用QSplitter分割窗口的例子。 QSplitter继承自QFrame,而QFrame又继承自QWidget,这点很重要。 对于使用QSplitter拆分窗口: 1)新建一个QSplitter,就意味着新建了一个QWidget 2)不同的QSplitter对象通过指定父子关系来完成嵌套(划分窗口) 3)QSplitter可以放置到你指定的任何窗口内 例子1:将一个窗口拆分为左右两列,如下图所示: 代码如下:intmain(intargc,charargv〔〕){例子1,qDebug(Mainframestart。。。);QApplicationapp(argc,argv);QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()name()));QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()name()));QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()name()));QSplitterpSpliternewQSplitter(Qt::Horizontal);QTextEditpLeftEdtnewQTextEdit(pSpliter);此注释指定父窗口,打开后,后面的pSpliteraddWidget(pLeftEdt);可以注释掉QTextEditpLeftEdtnewQTextEdit;pLeftEdtsetText(QObject::tr(左窗口));QTextEditpRightEdtnewQTextEdit(pSpliter);此注释指定父窗口,打开后,后面的pSpliteraddWidget(pRightEdt);可以注释掉QTextEditpRightEdtnewQTextEdit;pRightEdtsetText(QObject::tr(右窗口));pSpliteraddWidget(pLeftEdt);pSpliteraddWidget(pRightEdt);pSplitersetStretchFactor(0,1);下面两句设置左右两列的宽度比为1:4pSplitersetStretchFactor(1,4);pSplitersetWindowTitle(QObject::tr(SplitWndDemo1));pSplitershow();returnapp。exec();} 例子2:将一个窗口拆分为左右两列,右面再拆分为上下两列,如下图所示: 代码如下:qDebug(Mainframestart。。。);QApplicationapp(argc,argv);QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()name()));QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()name()));QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()name()));QSplitterpSpliternewQSplitter(Qt::Horizontal);QTextEditpLeftEdtnewQTextEdit(pSpliter);pLeftEdtsetText(QObject::tr(左窗口));QSplitterpRightSpliternewQSplitter(Qt::Vertical,pSpliter);QTextEditpRightTopEdtnewQTextEdit(pRightSpliter);pRightTopEdtsetText(QObject::tr(右上窗口));QTextEditpRightBtmEdtnewQTextEdit(pRightSpliter);pRightBtmEdtsetText(QObject::tr(右下窗口));pSplitersetStretchFactor(0,1);pSplitersetStretchFactor(1,4);pRightSplitersetStretchFactor(0,1);右面窗口上下窗口高度比为1:4pRightSplitersetStretchFactor(1,4);pSplitersetWindowTitle(QObject::tr(SplitWndDemo2));pSplitershow();returnapp。exec(); 例子3:将一个窗口拆分为左右两列,左面再拆分为上下两列,与例子2恰好相反,如下图所示: 代码如下:qDebug(Mainframestart。。。);QApplicationapp(argc,argv);QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()name()));QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()name()));QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()name()));QSplitterpLeftSpliternewQSplitter(Qt::Vertical);QTextEditpLeftTopEdtnewQTextEdit(pLeftSpliter);pLeftTopEdtsetText(QObject::tr(左上窗口));QTextEditpLeftBtmEdtnewQTextEdit(pLeftSpliter);pLeftBtmEdtsetText(QObject::tr(左下窗口));QSplitterpSpliternewQSplitter(Qt::Horizontal);QTextEditpRightEdtnewQTextEdit;pRightEdtsetText(QObject::tr(右窗口));pSpliteraddWidget(pLeftSpliter);pSpliteraddWidget(pRightEdt);pSplitersetStretchFactor(0,4);pSplitersetStretchFactor(1,1);左右宽度比为4:1pLeftSplitersetStretchFactor(0,4);左面窗口上下窗口高度比为4:1pLeftSplitersetStretchFactor(1,1);pSplitersetWindowTitle(QObject::tr(SplitWndDemo3));pSplitershow();returnapp。exec(); 总结:QSplitter一次只能将一个窗口1分为2,横向竖向拆分由参数指定。要理清部件间的父子关系。有了这个思路,可以任意拆分窗口数量