1.图表的使用
(1)使用准备
在.pro文件中,添加:QT += charts
在.h文件中,添加:
#include <QtCharts>
using namespace QtCharts;
或者
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE
(2)图表添加坐标轴
原版为:
QValueAxis *axisX=new QValueAxis;
QValueAxis *axisY=new QValueAxis;
......
chart->setAxisX(axisX,series);
chart->setAxisY(axisY,series);
但在5.12版本中会报警告信息:"setAxisX" is deprecated。经多方查探,最终参考Qt QChart QValueAxis坐标轴设置 - 一杯清酒邀明月 - 博客园 (cnblogs.com),应改为:
chart->addAxis(axisX,Qt::AlignBottom);
chart->addAxis(axisY,Qt::AlignLeft);
series->attachAxis(axisX);
series->attachAxis(axisY);
2.显示中文字符
在UI界面编辑的中文字符一般能正确显示,但在编程代码中提示或输出的中文字符,可能显示为乱码。在.cpp文件中,添加以下代码即可正确显示中文。
#pragma execution_character_set("utf-8")
3.窗口状态设置
Qt自带函数:
void QWidget::setWindowState ( Qt::WindowStates windowState )
Qt::WindowStates 一共有下面几种状态:
Constant |
Value | Description |
---|---|---|
Qt::WindowNoState | 0x00000000 | The window has no state set (in normal state). |
Qt::WindowMinimized | 0x00000001 | The window is minimized (i.e. iconified). |
Qt::WindowMaximized | 0x00000002 | The window is maximized with a frame around it. |
Qt::WindowFullScreen | 0x00000004 | The window fills the entire screen without any frame around it. |
Qt::WindowActive | 0x00000008 | The window is the active window, i.e. it has keyboard focus. |
如MianWindow类窗口,设置全屏时,代码为:
this->setWindowState(Qt::WindowFullScreen);
这样的设置方法只适合主窗口,在主窗口之外建立的子窗口,其特征是 Qt::SubWindow,不是独立的窗口,因此对其调用setWindowState()无效。
通过对子窗口调用:setWindowFlags(Qt::Dialog);或setWindowFlags(Qt::Window);将其设为窗口模式后,即可调用 setWindowState();进行窗口属性设置了。
4.控件跟随窗口变化大小
在窗口点击最大化时,我们希望窗口内的各个控件能够跟上窗口调整大小。
第一步:将所有控件都拉入一个布局之中(栅格、水平、垂直布局,水平、垂直分裂器等),形成一个整个的组合控件,将整个组合控件设置为中心窗口。
比如小控件组成小组合,小组合通过分裂器组成大组合,在代码中将分裂器设为中心窗口:
this->setCentralWidget(ui->splitter);
第二步:将所有控件,用右键菜单设置一种布局(栅格、水平、垂直布局)。
第三步,设置各控件SizePolicy属性,来控制布局管理中的控件的尺寸自适应方式。
Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。
Minimum:控件的sizeHint为控件的最小尺寸。控件不能小于这个sizeHint,但是可以放大。
Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小的允许尺寸。
Preferred:控件的sizeHint是它的sizeHint,但是可以放大或者缩小。
Expanding:控件可以自行增大或者缩小。
注:sizeHint(布局管理中的控件默认尺寸,如果控件不在布局管理中就为无效的值)。一般情况,各控件保持默认属性值即可。如:pushbutton的水平策略是minimum,垂直策略是fixed;而lineEdit的水平策略则是expandint,垂直策略时fixed。
5.QSqlTableModel数据库类使用
QSqlTableModel类有insertRows\insertRow\removeRows\removeRow函数,用于插入和删除多行、一行。但在使用过程中,总是不能正确实现目的。
如将数据表所有行删除,以为可以用
model->removeRows(0,model->rowCount());
可通过输出行数model->rowCount(),发现并没有变化。
用循环删除单行的方式,也存在同样的问题:
for(int i=0;i<model->rowCount;i++)
model->removeRow(0);
经查,参考https://blog.csdn.net/sinat_36921713/article/details/89214742,原因是:数据行从数据库删除后,会遗留一行空白行。这时只需手动调用select()即可。
for(int i=0;i<model->rowCount;i++)
{
model->removeRow(0);
model->select();
}
但以下方式仍然不行,不知道是什么原因。
model->removeRows(0,model->rowCount());
model->select();