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 相关
3> 窗口 widget 相关
setWindowTitle(tr( "My Title ")); // 设置窗口标题
resize(
200,
200);
// 设置窗口大小
width(); // 窗口宽度
width(); // 窗口宽度
height();
// 窗口高度
4> 窗口(widget) 事件回调相关 (具体参考 widget.h 文件)
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)的使用
- QColor hourColor(127, 0, 127); // 画笔颜色
- QPainter painter(objWidget); // 创建一个画布, objWidget 为当前 画笔的要画到哪里, 一般为 Widget 对象
- // 设置画布的样式
- painter.setPen(Qt::NoPen);
- painter.setBrush(hourColor);
- painter.translate(width() / 2, height() / 2); // 画布坐标系统的移动(当前窗口的中心点位置)
- painter.scale(side / 200.0, side / 200.0); // 设置缩放
- painter.rotate(30.0); // 坐标系统,旋转 30 度
- painter.save();
- painter.drawLine(92, 0, 96, 0);
- // 常用函数(参考QPainter.h)
- void drawText()
- void fillRect()
- void drawPoint()
- void drawPoints(const QPoint *points, int pointCount);
- void drawLine(int x1, int y1, int x2, int y2);
- void drawLines(const QLineF *lines, int lineCount);
- void drawRect(int x1, int y1, int w, int h);
- void drawRects(const QRectF *rects, int rectCount);
- void drawEllipse(int x, int y, int w, int h);
- void drawPolyline(const QPointF *points, int pointCount);
- void drawText(const QPointF &p, const QString &s);
- void drawImage() // 可以绘制图片
- void eraseRect()
- void scale(qreal sx, qreal sy); // 设置缩放
- void rotate(qreal a);// 设置旋转
- void setBackground(const QBrush &bg); // 设置背景颜色
- void setPen(const QColor &color); // 设置画笔
- // 画一个路径( QPainterPath 可以存储 painter 的路径信息)
- QPainterPath clock; // 初始化一个钟表的形状
- clock.addEllipse(-50.0, -50.0, 100.0, 100.0);
- clock.addEllipse(-48.0, -48.0, 96.0, 96.0);
- clock.moveTo(0.0, 0.0);
- clock.lineTo(-2.0, -2.0);
- clock.lineTo(0.0, -42.0);
- clock.lineTo(2.0, -2.0);
- clock.lineTo(0.0, 0.0);
- clock.moveTo(0.0, 0.0);
- clock.lineTo(2.732, -0.732);
- clock.lineTo(24.495, 14.142);
- clock.lineTo(0.732, 2.732);
- clock.lineTo(0.0, 0.0);
- QPainter painter(objWidget); // 创建一个画布, objWidget 为当前 画笔的要画到哪里, 一般为 Widget 对象
- painter.fillPath(clock, Qt::blue);
- // 绘制一个文本
- QPainterPath text;
- QFont font;
- font.setPixelSize(50);
- QRect fontBoundingRect = QFontMetrics(font).boundingRect(tr("Qt"));
- text.addText(-QPointF(fontBoundingRect.center()), font, tr("Qt"));
- QPainter painter(objWidget); // 创建一个画布, objWidget 为当前 画笔的要画到哪里, 一般为 Widget 对象
- painter.fillPath(text, Qt::blue); // 绘制一个文本
painter.
drawText
(100,100, tr("Hello!!!")); // 一句话也可以搞定
6> Layout 的使用举例
- QGridLayout *mainLayout = new QGridLayout;
- // 2行 3列的一个网格布局
- for (int i = 0; i < 2; ++i) { // 行
- for (int j = 0; j < 3; ++j) { // 列
-
- glWidgets[i][j] = new GLWidget(0, 0);
- mainLayout->addWidget(glWidgets[i][j], i, j); // 直接将其他窗口对象,添加到 mainLayout 中就可以
- }
- }
- setLayout(mainLayout); // 调用窗口对象的 setLayout 方法来设置布局
7> QT 控件的使用 总结
-
- QComboBox 下拉选择控件
- shapeComboBox = new QComboBox;
- shapeComboBox->addItem(tr("Clock"));
- shapeComboBox->addItem(tr("House"));
- shapeComboBox->addItem(tr("Text"));
- shapeComboBox->addItem(tr("Truck"));
-
- // 置回调函数 operationChanged
- connect(shapeComboBox, SIGNAL(activated(int)), this, SLOT(shapeSelected(int)));
- // 回到函数中, index 为当前选择的索引
- void Window::shapeSelected(int index)
- {
- }
-
- int index = shapeComboBox->currentIndex(); // 可以得到当前选择的索引
- // Table View 的使用
- QStandardItemModel model(4, 2); // 设置表格的数据模型 ( 4 行 2 列)
- QTableView tableView; // 表格对象
- tableView.setModel(&model); // 设置数据模型
-
- // 设置表格对象的数据显示
- for (int row = 0; row < 10; ++row)
- {
- for (int column = 0; column < 5; ++column)
- {
- QModelIndex index = model.index(row, column, QModelIndex()); // 得到某一个具体的数据索引
- model.setData(index, QVariant("aaaa")); // 设置数据
- }
- }
表格数据的操作:- model.setColumnCount(5); // 设置表格的列数
- model.setRowCount(2); // 设置表格的行数
- model.insertColumn(1); // 在第 1列后面,插入一列
- model.insertRow(1); // 在第 1 行后面,插入一列
- model.rowCount(); // 表格行数
- model.columnCount(); // 表格列数
- // MainWindow 为主窗口的对象指针
- // Action初始化 -- 一个 Action 相当于 一个具体的菜单项
- actionShow_Test_Dialog = new QAction(MainWindow);
- actionShow_Test_Dialog->setObjectName(QString::fromUtf8("actionShow_Test_Dialog"));
- actionOpen = new QAction(MainWindow);
- actionOpen->setObjectName(QString::fromUtf8("actionOpen"));
- actionSave = new QAction(MainWindow);
- actionSave->setObjectName(QString::fromUtf8("actionSave"));
- actionShow_Table = new QAction(MainWindow);
- actionShow_Table->setObjectName(QString::fromUtf8("actionShow_Table"));
-
- // QMenuBar 菜单栏, 上面可以放很多的 QMenu
- menuBar = new QMenuBar(MainWindow);
- menuBar->setObjectName(QString::fromUtf8("menuBar"));
- menuBar->setGeometry(QRect(0, 0, 400, 22));
-
- // QMenu 菜单, 一个菜单上,可以放很多的 Action
- menuFile = new QMenu(menuBar);
- menuFile->setObjectName(QString::fromUtf8("menuFile"));
- menuTest = new QMenu(menuBar);
- menuTest->setObjectName(QString::fromUtf8("menuTest"));
- MainWindow->setMenuBar(menuBar);
- menuBar->addAction(menuFile->menuAction());
- menuBar->addAction(menuTest->menuAction());
- menuFile->addAction(actionOpen);
- menuFile->addAction(actionSave);
- menuTest->addAction(actionShow_Test_Dialog);
- menuTest->addAction(actionShow_Table);
- // 设置菜单项的具体回调函数
QObject::connect(actionShow_Test_Dialog, SIGNAL(triggered()), MainWindow, SLOT(ShowTestDialog()));
QObject::connect(actionShow_Table, SIGNAL(triggered()), MainWindow, SLOT(ShowTable()));