Qt5.12 creator使用笔记(随时更新)

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();

猜你喜欢

转载自blog.csdn.net/zhang1806618/article/details/112062650