打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
QT学习小结(二)
    QT学习小结(二)

学习使用QT有段时间了,初步先做下小结,留作备忘。

目录

PART II  (布局相关)
7. QTabWidget的应用
8. 布局(Layout)

PART II
==========================================================================
7. QTabWidget的应用
QTabWidget是一个很好用的控件,依据某种条件(或许是个人的喜好)后,它可以将很多内容聚集在一个很小的空间里。这样既可以节省屏幕空间,又可以很清晰地规划出各项内容,不会在信息量过多时导致屏幕显示混乱。
对于QMainWindow,QTabWidget作用于centralWidget中,即QWidget。

示例
a. 创建如下的TabWidget


b. 代码

  1. //变量定义
  2.     QWidget *centralwidget;
  3.     //tab widget below:
  4.     QTabWidget *twSerial; //tab widget below, for serial
  5.     QWidget *tabRcv; // serial data receive widget
  6.     QTextBrowser *tbRcv; // text browser for received data
  7.     QWidget *tabSend; // serial data send widget
  8.     QTextBrowser *tbSend; // text browser for send data
  9.     QWidget *tabSignal; //widget signal power
  10.     SignalPillar *m_pillar; //请注意:SignalPillar是自己编写的继承于QGroupBox的类,非QT类

  11. // centralwidget定义
  12.         centralwidget = new QWidget(WndTest); // WndTest是QMainWindow的实例
  13.         centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
  14.         WndTest->setCentralWidget(centralwidget);

  15. //QTabWidget实现
  16.         ////////////////////////////////////////////////////////////////////////////////////////
  17.         //tab widget below:
  18.         ////////////////////////////////////////////////////////////////////////////////////////
  19.         twSerial = new QTabWidget(centralwidget); //此处的centralwidget必不可少,根据实际情况可替换成QWidget实例
  20.         twSerial->setObjectName(QString::fromUtf8("twSerial")); // set object name
  21.         twSerial->setGeometry(QRect(1, 310, 298, 261)); // set object geometry

  22.         tabSignal = new QWidget();
  23.         tabSignal->setObjectName(QString::fromUtf8("tabSignal"));
  24.         twSerial->addTab(tabSignal, QString(tr("Sattelite Power"))); // add widget "tabSignal" to tab widget

  25.         tabRcv = new QWidget(); //widget
  26.         tabRcv->setObjectName(QString::fromUtf8("tabRcv"));
  27.         tbRcv = new QTextBrowser(tabRcv);
  28.         tbRcv->setObjectName(QString::fromUtf8("tbRcv"));
  29.        
  30.         tbRcv->setLineWrapMode(QTextEdit::NoWrap);
  31.         twSerial->addTab(tabRcv, QString(tr("Nmea"))); // add widget "tabRcv" to tab widget
  32.        
  33.         tabSend = new QWidget();
  34.         tabSend->setObjectName(QString::fromUtf8("tabSend"));
  35.         tbSend = new QTextBrowser(tabSend);
  36.         tbSend->setObjectName(QString::fromUtf8("tbSend"));
  37.        
  38.         tbSend->setLineWrapMode(QTextEdit::NoWrap);
  39.         twSerial->addTab(tabSend, QString(tr("Command"))); // add widget "tabRcv" to tab widget

  40.         m_pillar = new SignalPillar(tabSignal,12); //SignalPillar 继承自 QGroupBox

  41.         // init layout
  42.         //注意: 上方的tbSend、tbRcv及m_pillar均未设置大小,其大小是通过下方的布局实现的自动调整
  43.         {
  44.                     QHBoxLayout *hlayout1 = new QHBoxLayout;
  45.                     QHBoxLayout *hlayout2 = new QHBoxLayout;
  46.                     QHBoxLayout *hlayout3 = new QHBoxLayout;
  47.                     hlayout1->addWidget(tbSend);
  48.                     hlayout1->setSpacing(1);
  49.                     tabSend->setLayout(hlayout1); // init layout of tabSend
  50.                     hlayout2->addWidget(tbRcv);
  51.                     hlayout2->setSpacing(1);
  52.                     tabRcv->setLayout(hlayout2); // init layout of tabRcv

  53.                     hlayout3->addWidget(m_pillar);
  54.                     tabSignal->setLayout(hlayout3); // init layout of tabSignal
  55.         }
<<返回目录
---------------------------------------------------------------------------------------------

8. 布局(Layout)
布局一开始把我困惑住了,很长时间里一直不太明白,现在弄懂了一些基本的,感觉好多了。
布局其实就像是在画EXCEL表格一样,在草稿上,画出各个部分的区隔线,然后再用横向布局(QHBoxLayout)或纵向布局(QVBoxLayout)去套,这样就简单了。至于还有一个Grid的布局,我没有用到。
a. 示例
比如上方例子中出现的SignalPillar,是一排柱状条显示

如红色所点出的,该布局可以分为
1. 上方柱状的横向布局
2. 下方方框的横向布局
3. 兼容上下横向布局的纵向布局

b. 代码
  1. void SignalPillar::createLayout()
  2. {
  3.     int i;
  4.    
  5.     QHBoxLayout *layoutMain = new QHBoxLayout; //主布局窗口
  6.     QVBoxLayout *vlayoutPillar = new QVBoxLayout; //纵向布局
  7.     QHBoxLayout *hlayoutsnr = new QHBoxLayout; //上方柱状横向布局
  8.     QHBoxLayout *hlayoutprn = new QHBoxLayout; //下方方框横向布局

  9.     vlayoutPillar->setSizeConstraint(QLayout::SetMaximumSize);
  10.     hlayoutsnr->setSizeConstraint(QLayout::SetMaximumSize);
  11.     hlayoutprn->setSizeConstraint(QLayout::SetFixedSize); //下方方框布局使用固定大小,为纵向布局的分布做准备

  12.     i = 0;
  13.     do{ //增加控件
  14.         hlayoutsnr->addWidget(snrlabel[i]);
  15.         hlayoutprn->addWidget(prnlabel[i]);
  16.                 i ;
  17.     }while(i<m_maxdisp);
  18.    
  19.     hlayoutsnr->setSpacing(2);
  20.     hlayoutprn->setSpacing(2);

  21.     vlayoutPillar->addLayout(hlayoutsnr);
  22.     vlayoutPillar->addLayout(hlayoutprn);
  23.         vlayoutPillar->setSpacing(1);
  24.    
  25.         layoutMain->addLayout(vlayoutPillar); //添加到主布局窗口
  26.     layoutMain->setSpacing(1);
  27.     setLayout( layoutMain ); //设置布局,该语句不可省略
  28. }

<<返回目录
---------------------------------------------------------------------------------------------

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
qt QTabWidget设置tab头的宽度
【Qt设计中常见控件、布局选项和属性详解】
Qt中,当QDockWidget的父窗口是一个不可以拖动的QTabWidget的时候实现拖动的方法
Qt 样式表之QSS
Qt QTabWidget详解
如何在Word2010中插入横向页面?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服