Qt5开发及实例——第16章综合实例问题整理(二)

        继续进行第二部分的整理。

7、第16.3.1小节PieView的构造函数参数声明与定义不同同时使用默认参数

       在第16.3.1小节,类PieView的构造函数在.h头文件中的声明如下:

explicit PieView(QWidget *parent = 0);

        该构造函数在.cpp源文件中的定义如下:

PieView::PieView(QWidget *parent = 0):QAbstractItemView(parent)
{
}

        编译时会报错,改为如下可以解决:

PieView::PieView(QWidget *parent):QAbstractItemView(parent)
{
}

8、第16.3.1小节有一些未实现的纯虚函数需要定义声明

       在第16.3.1小节,有部分未实现的纯虚函数,进行了定义声明。如下所示:

QRect PieView::visualRect(const QModelIndex &index) const{}
void PieView::scrollTo(const QModelIndex &index, ScrollHint hint){}
QModelIndex PieView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers){}
int PieView::horizontalOffset()const{}
int PieView::verticalOffset()const{}
bool PieView::isIndexHidden(const QModelIndex &index) const{}
void PieView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command){}
QRegion PieView::visualRegionForSelection(const QItemSelection &selection) const{}

        编译时报错,原因是上述部分接口具有返回值,而函数体为空,没有对应的返回值。重新定义上述接口如下:

QRect PieView::visualRect(const QModelIndex &index) const
{
	QRect rectRet;
	return rectRet;
}

void PieView::scrollTo(const QModelIndex &index, ScrollHint hint)
{}

QModelIndex PieView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers)
{
	QModelIndex modelIndexRet;
	return modelIndexRet;
}

int PieView::horizontalOffset()const
{
	int intRet = 0;
	return intRet;
}

int PieView::verticalOffset()const
{
	int intRet = 0;
	return intRet;
}

bool PieView::isIndexHidden(const QModelIndex &index) const
{
	bool boolRet = true;
	return boolRet;
}

void PieView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command)
{}

QRegion PieView::visualRegionForSelection(const QItemSelection &selection) const
{
	QRegion regionRet;
	return regionRet;
}

        这样,上述编译问题即没有了。这里声明一下,这里使用的开发环境为VS2017+Qt5,如果书中的环境是Qt5,至于Qt5编译是否会报错,需要读者自己验证一下。

 

9、第16.3.2小节class QStandardItemModel无法使用

       在第16.3.1小节,使用class QStandardItemModel;无法识别对应的类。需要头文件中包含对应的类。

#include <QStandardItemModel>
#include <QTableView>

10、第16.3.2小节直方图上的文字“销售数量”显示乱码

       在第16.3.1小节,使直方图上的文字“销售数量”显示乱码。将如下代码进行修改。

painter.drawText(20, 30, tr("销售数量"));

        改为如下代码:

painter.drawText(20, 30, QStringLiteral("销售数量"));

11、注意四个名称,即ui名、ui目标名、窗口名、类名、文件名

        manager.ui基础上,再添加一个登录界面。首先需要设计一个单独的界面,这里是ui名,比如logindialog;设置该对话框的ui目标名,比如LoginDialogClass;再设置一个窗口名(windowTitle),比如“登录系统”。

        还需要创建一个类(书中Qt直接集成一个类),自己填写类名称,比如LoginDialog、继承的基类以及类对应的源文件logindialog.cpp和头文件名logindialog.h,来处理上述设计的界面。

        另外,每创建一个界面,编译后在GeneratedFiles文件夹中会有一个对应的ui_******.h,其中******为界面的ui名,即本项目的ui_logindialog.h。

         由于如下所示.

class LoginDialog : public QDialog
{
	Q_OBJECT

public:
	explicit LoginDialog(QWidget *parent = 0);

private slots:
	void on_loginBtn_clicked();

	void on_quitBtn_clicked();

private:
	Ui::LoginDialogClass ui;
};

        由于LoginDialog的私有成员有Ui::LoginDialogClass ui;,因此需要注意类名LoginDialog,不要与ui目标名LoginDialogClass冲突。

12、第16.3.4小节构造函数LoginDialog定义继承部分修改

        在第16.3.4小节,构造函数集成部分需要修改。原代码如下:

LoginDialog::LoginDialog(QWidget *parent) :
	QDialog(parent), ui(new LoginDialogClass)

        改为如下代码:

LoginDialog::LoginDialog(QWidget *parent) :
	QDialog(parent)

        经过Qt5开发及实例——第16章综合实例问题整理(一)和Qt5开发及实例——第16章综合实例问题整理(二),完成了用VS2017+Qt5完成,该实例的实现。登录界面也已经完成,如下图所示(界面功能已经完成,亲测),显示有一些异常。

        上述是因为调用了接口“setFixedSize(400, 300);”对对话框的属性进行了设置。该语句含义是将对话框的宽度设置400,高度设置300,且该大小不可改变(不支持鼠标对对话框的拖大拖小)。修改为“setFixedSize(600, 300);”后,运行程序结果如下图所示。

        留心的同学注意到了,界面的左上角由乱码变成了我们需要的“系统登录界面”,方法 Qt5开发及实例——第16章综合实例问题整理(一)的第1点已经提到了,即在对话框对应的头文件中加入“utf-8”那三行代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值