QT知识点总结

分类: C/C++

转自:http://blog.chinaunix.net/uid-20622737-id-3181143.html
1> 定时器的使用

QTimer  *timer  =   new   QTimer( this); 
connect(timer,   SIGNAL(timeout()),   this,   SLOT(update())); // 设置定时器回调函数 
timer->start( 1000); // 启动定时器

2> 得到系统当前时间

QTime  time  =   QTime::currentTime(); 
time.hour(); 
time.minute();
time.second(); 
time.msec();

3> 窗口 widget 相关

setWindowTitle(tr( "My Title "));  // 设置窗口标题 
 resize( 200,   200);   // 设置窗口大小
width(); // 窗口宽度
height(); // 窗口高度


4> 窗口(widget) 事件回调相关 (具体参考 widget.h 文件)

#ifndef   QT_NO_WHEELEVENT  
virtual   void   wheelEvent( QWheelEvent  *);
#endif 
virtual   void   keyPressEvent( QKeyEvent  *);  
virtual   void   keyReleaseEvent( QKeyEvent  *);  
virtual   void   focusInEvent( QFocusEvent  *);  
virtual   void   focusOutEvent( QFocusEvent  *);  
virtual   void   paintEvent( QPaintEvent  *); // 每次刷新屏幕都会回调此函数  
virtual   void   actionEvent( QActionEvent  *); 




5> QT 画布(QPainter)的使用


  1. QColor hourColor(127, 0, 127); // 画笔颜色

  2. QPainter painter(objWidget); // 创建一个画布, objWidget 为当前 画笔的要画到哪里, 一般为 Widget 对象
  3. // 设置画布的样式
  4. painter.setPen(Qt::NoPen);
  5. painter.setBrush(hourColor);
  6. painter.translate(width() / 2, height() / 2); // 画布坐标系统的移动(当前窗口的中心点位置)
  7. painter.scale(side / 200.0, side / 200.0);    // 设置缩放
  8. painter.rotate(30.0);    // 坐标系统,旋转 30 度
  9. painter.save();

  10. painter.drawLine(92, 0, 96, 0);

  1. // 常用函数(参考QPainter.h)
  2. void drawText()
  3. void fillRect()
  4. void drawPoint()
  5. void drawPoints(const QPoint *points, int pointCount);
  6. void drawLine(int x1, int y1, int x2, int y2);
  7. void drawLines(const QLineF *lines, int lineCount);
  8. void drawRect(int x1, int y1, int w, int h);
  9. void drawRects(const QRectF *rects, int rectCount);
  10. void drawEllipse(int x, int y, int w, int h);
  11. void drawPolyline(const QPointF *points, int pointCount);

  12. void drawText(const QPointF &p, const QString &s);
  13. void drawImage() // 可以绘制图片

  14. void eraseRect()

  15. void scale(qreal sx, qreal sy); // 设置缩放 
  16. void rotate(qreal a);// 设置旋转
  17. void setBackground(const QBrush &bg); // 设置背景颜色
  18. void setPen(const QColor &color); // 设置画笔

  1.   // 画一个路径( QPainterPath 可以存储 painter 的路径信息)
  2.    QPainterPath clock;   // 初始化一个钟表的形状
  3.     clock.addEllipse(-50.0, -50.0, 100.0, 100.0);
  4.     clock.addEllipse(-48.0, -48.0, 96.0, 96.0);
  5.     clock.moveTo(0.0, 0.0);
  6.     clock.lineTo(-2.0, -2.0);
  7.     clock.lineTo(0.0, -42.0);
  8.     clock.lineTo(2.0, -2.0);
  9.     clock.lineTo(0.0, 0.0);
  10.     clock.moveTo(0.0, 0.0);
  11.     clock.lineTo(2.732, -0.732);
  12.     clock.lineTo(24.495, 14.142);
  13.     clock.lineTo(0.732, 2.732);
  14.     clock.lineTo(0.0, 0.0);

  15.     QPainter painter(objWidget); // 创建一个画布, objWidget 为当前 画笔的要画到哪里, 一般为 Widget 对象

  16.      painter.fillPath(clock, Qt::blue);

  1. // 绘制一个文本

  2. QPainterPath text;
  3.         QFont font;
  4.         font.setPixelSize(50);
  5.         QRect fontBoundingRect = QFontMetrics(font).boundingRect(tr("Qt"));
  6.         text.addText(-QPointF(fontBoundingRect.center()), font, tr("Qt"));

  7.      QPainter painter(objWidget); // 创建一个画布, objWidget 为当前 画笔的要画到哪里, 一般为 Widget 对象
  8.      painter.fillPath(text, Qt::blue);        // 绘制一个文本


  painter. drawText (100,100, tr("Hello!!!"));     // 一句话也可以搞定




6>  Layout 的使用举例


  1. QGridLayout *mainLayout = new QGridLayout;

  2.     // 2行 3列的一个网格布局
  3.     for (int i = 0; i < 2; ++i) { // 行
  4.         for (int j = 0; j < 3; ++j) { // 列
  5.             
  6.             glWidgets[i][j] = new GLWidget(0, 0);
  7.             mainLayout->addWidget(glWidgets[i][j], i, j); // 直接将其他窗口对象,添加到 mainLayout 中就可以
  8.         }
  9.     }
  10.     setLayout(mainLayout); // 调用窗口对象的 setLayout 方法来设置布局

7> QT 控件的使用 总结

  1.     QComboBox 下拉选择控件
  2.     shapeComboBox = new QComboBox;
  3.     shapeComboBox->addItem(tr("Clock"));
  4.     shapeComboBox->addItem(tr("House"));
  5.     shapeComboBox->addItem(tr("Text"));
  6.     shapeComboBox->addItem(tr("Truck"));
  7.     
  8.     // 置回调函数 operationChanged
  9.     connect(shapeComboBox, SIGNAL(activated(int)), this, SLOT(shapeSelected(int)));

  10.     // 回到函数中, index 为当前选择的索引
  11.     void Window::shapeSelected(int index)
  12.     {
  13.     }
  14.  
  15.     int index = shapeComboBox->currentIndex(); // 可以得到当前选择的索引


  1. // Table View 的使用

  2.     QStandardItemModel model(4, 2);     // 设置表格的数据模型 ( 4 行 2 列)
  3.     QTableView tableView;             // 表格对象
  4.     tableView.setModel(&model); // 设置数据模型

  5.     
  6.     // 设置表格对象的数据显示
  7.     for (int row = 0; row < 10; ++row) 
  8.     {
  9.         for (int column = 0; column < 5; ++column) 
  10.         {
  11.                QModelIndex index = model.index(row, column, QModelIndex()); // 得到某一个具体的数据索引
  12.                model.setData(index, QVariant("aaaa"));                    // 设置数据
  13.         }
  14.     }

表格数据的操作:
  1. model.setColumnCount(5);     // 设置表格的列数
  2.         model.setRowCount(2);         // 设置表格的行数
  3.         model.insertColumn(1);         // 在第 1列后面,插入一列
  4.         model.insertRow(1);         // 在第 1 行后面,插入一列
  5.      model.rowCount();         // 表格行数
  6.       model.columnCount();         // 表格列数

截图:



菜单相关  
  1.       // MainWindow 为主窗口的对象指针

  2.  // Action初始化 -- 一个 Action 相当于 一个具体的菜单项
  3.         actionShow_Test_Dialog = new QAction(MainWindow);
  4.         actionShow_Test_Dialog->setObjectName(QString::fromUtf8("actionShow_Test_Dialog"));
  5.         actionOpen = new QAction(MainWindow);
  6.         actionOpen->setObjectName(QString::fromUtf8("actionOpen"));
  7.         actionSave = new QAction(MainWindow);
  8.         actionSave->setObjectName(QString::fromUtf8("actionSave"));
  9.         actionShow_Table = new QAction(MainWindow);
  10.         actionShow_Table->setObjectName(QString::fromUtf8("actionShow_Table"));
  11.  

  12.         // QMenuBar 菜单栏, 上面可以放很多的 QMenu 
  13.         menuBar = new QMenuBar(MainWindow);
  14.         menuBar->setObjectName(QString::fromUtf8("menuBar"));
  15.         menuBar->setGeometry(QRect(0, 0, 400, 22));
  16.        
  17.          // QMenu 菜单, 一个菜单上,可以放很多的 Action
  18.         menuFile = new QMenu(menuBar);
  19.         menuFile->setObjectName(QString::fromUtf8("menuFile"));
  20.         menuTest = new QMenu(menuBar);
  21.         menuTest->setObjectName(QString::fromUtf8("menuTest"));
  22.         MainWindow->setMenuBar(menuBar);

  23.         menuBar->addAction(menuFile->menuAction());
  24.         menuBar->addAction(menuTest->menuAction());

  25.         menuFile->addAction(actionOpen);
  26.         menuFile->addAction(actionSave);
  27.         menuTest->addAction(actionShow_Test_Dialog);
  28.         menuTest->addAction(actionShow_Table);
  29. //  设置菜单项的具体回调函数
QObject::connect( actionShow_Test_Dialog,   SIGNAL(triggered()),  MainWindow,   SLOT(ShowTestDialog())); 
QObject::connect( actionShow_Table,   SIGNAL(triggered()),  MainWindow,   SLOT(ShowTable()));
菜单层次关系截图如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值