(209) 理论讲解 ,本例题里主窗体会先后调用三个对话框 :
++ 老师的例题里,从来没有直接为 QMainWindow 的主窗体设置布局,而是在代码里直接把 QTableView 设置为主窗体,这样的好处是减少了一层,图像渲染的时候,少渲染一层,效率上当然会快一些。
(210)代码实现 ,先是准备创建自定义对话框 ,如何通过 QT 的可视化编程界面引入自定义对话框呢 :
++然后 :
++然后 :
++最后 :
++ 看看这些新的自定义对话框的文件组成,再往里添加需要的控件,由易到难 :
(211)**本条目开始学习设置表格大小的对话框 class TDialogSize ** :
++ 在 QT 里如何一次性为多个成员函数添加实现 :
++ 接着给出本类的 .cpp 文件的实现 :
++还有本表格大小对话框上两个按钮的功能实现 :
++ 补充对话框的成员函数的基础知识 :
(212)回到主程序,由主窗体完善对表格大小对话框的调用。给出主窗体头文件 mainwindow . h 的源代码版本 :
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QStandardItemModel>
#include <QItemSelectionModel>
#include <QModelIndex>
#include "tdialogheaders.h"
#include "tdialoglocate.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
//用于状态栏的信息显示
QLabel * labCellPos ; //当前单元格行列号
QLabel * labCellText; //当前单元格内容
QStandardItemModel * m_model ; //数据模型
QItemSelectionModel * m_selection; //Item选择模型
TDialogHeaders * dlgSetHeaders = nullptr;
//设置表头文字对话框, 一次创建,exec()重复调用
protected:
void closeEvent(QCloseEvent * event); //关闭窗口时,询问是否退出
public:
MainWindow(QWidget * parent = 0);
~MainWindow();
void selectCell(int row,int column); //选择一个单元格,由dlgLocate调用
private slots:
void do_model_currentChanged(
const QModelIndex & current, const QModelIndex & previous);
void on_actTab_SetSize_triggered();
void on_actTab_SetHeader_triggered();
void on_actTab_Locate_triggered();
void on_tableView_clicked(const QModelIndex &index);
public slots://自定义的公共槽函数
void do_setCellText(int row, int column, QString &text); //设置一个单元格的内容
// void do_setActLocateEnable(bool enable); //设置actTab_Locate的enabled属性
signals://自定义信号,在tableView上点击时发射此信号
void cellIndexChanged(int rowNo, int colNo); //当前单元格发生变化
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
++本节课里随后会逐步完善头文件里出现的成员函数,先给出本主程序窗体类的构造函数 ,这里面会生成模型与视图结构:
++补充 ,使用新版本的构造函数 :
++把主窗体上的工具栏里的按钮,关联到表格大小对话框上 :
++ 给出测试结果 :
++本自定义对话框实现完成。
(213)
谢谢