zoukankan      html  css  js  c++  java
  • Qt QSplitter任意拆分窗口

    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...\n");
    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...\n");
    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...\n");
    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,横向竖向拆分由参数指定。要理清部件间的父子关系。有了这个思路,可以任意拆分窗口数量

  • 相关阅读:
    C语言、指针的指针和野指针的问题
    常见证书格式和转换
    cation,validation,qualification有何区别
    Cygwin + OpenSSH FOR Windows的安装配置
    python static variable
    45个与众不同的非常棒网页设计案例
    65个精心设计的富有灵感的电子商务网站案例
    60个抢眼的企业网站设计案例
    26个有用的创建视觉图片网站的jQuery插件
    Android 图像用户界面免费的PSD设计文件
  • 原文地址:https://www.cnblogs.com/peterliang/p/3618820.html
Copyright © 2011-2022 走看看