2019-10-04 23:37:27 +08:00
|
|
|
|
#include "ExCustomMainWin.h"
|
|
|
|
|
#include "ui_ExCustomMainWin.h"
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ExCustomMainWin::ExCustomMainWin(QWidget *parent) :
|
|
|
|
|
QMainWindow(parent),
|
|
|
|
|
ui(new Ui::ExCustomMainWin)
|
|
|
|
|
{
|
|
|
|
|
ui->setupUi(this);
|
2019-10-08 00:18:34 +08:00
|
|
|
|
setWindowTitle(QObject::tr("自定义和标准对话框的用法"));
|
2019-10-04 23:37:27 +08:00
|
|
|
|
|
|
|
|
|
m_model = nullptr;
|
|
|
|
|
m_dlglocate = nullptr;
|
|
|
|
|
m_dlgSetHeaders = nullptr;
|
|
|
|
|
|
2019-10-08 00:18:34 +08:00
|
|
|
|
m_model = new QStandardItemModel(10, 5, this); //创建数据模型
|
|
|
|
|
m_seleModel = new QItemSelectionModel(m_model); //Item选择模型
|
|
|
|
|
connect(m_seleModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), this,SLOT(on_currentChanged(QModelIndex,QModelIndex)));
|
|
|
|
|
|
|
|
|
|
ui->tableView->setModel(m_model);
|
|
|
|
|
ui->tableView->setSelectionModel(m_seleModel);
|
|
|
|
|
|
|
|
|
|
//创建状态栏组件
|
|
|
|
|
m_labCellPos = new QLabel("当前单元格:",this);
|
|
|
|
|
m_labCellPos->setMinimumWidth(180);
|
|
|
|
|
m_labCellPos->setAlignment(Qt::AlignHCenter);
|
|
|
|
|
|
|
|
|
|
m_labCellText = new QLabel("单元格内容:",this);
|
|
|
|
|
m_labCellText->setMinimumWidth(200);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ui->statusBar->addWidget(m_labCellPos);
|
|
|
|
|
ui->statusBar->addWidget(m_labCellText);
|
2019-10-04 23:37:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ExCustomMainWin::~ExCustomMainWin()
|
|
|
|
|
{
|
|
|
|
|
delete ui;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-08 00:18:34 +08:00
|
|
|
|
//定位到单元格,并设置字符串
|
2019-10-04 23:37:27 +08:00
|
|
|
|
void ExCustomMainWin::setACellText(int row, int col, QString text)
|
|
|
|
|
{
|
|
|
|
|
QModelIndex index = m_model->index(row, col);
|
|
|
|
|
m_seleModel->clearSelection();
|
|
|
|
|
m_seleModel->setCurrentIndex(index, QItemSelectionModel::Select);
|
2019-10-08 00:18:34 +08:00
|
|
|
|
m_model->setData(index, text, Qt::DisplayRole); //设置单元格字符串
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//设置actLocatee的enabled属性
|
|
|
|
|
void ExCustomMainWin::setActLocateEnable(bool enable)
|
|
|
|
|
{
|
|
|
|
|
ui->actLocate->setEnabled(enable);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//将ExDlgLocate指针设置为NULL
|
|
|
|
|
void ExCustomMainWin::setDlgLocateNull()
|
|
|
|
|
{
|
|
|
|
|
m_dlglocate = nullptr;
|
2019-10-04 23:37:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ExCustomMainWin::on_actSetHeader_triggered()
|
|
|
|
|
{
|
|
|
|
|
if (m_dlgSetHeaders == nullptr)
|
|
|
|
|
m_dlgSetHeaders = new ExDlgSetHeaders(this); //只有主窗口销毁时候,该dialog窗口才会销毁
|
|
|
|
|
|
|
|
|
|
if(m_dlgSetHeaders->headerList().count() != m_model->columnCount()) { //如果表头列数发生变化,就重新初始化
|
|
|
|
|
QStringList list;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < m_model->columnCount(); i++) {
|
|
|
|
|
list.append(m_model->headerData(i, Qt::Horizontal, Qt::DisplayRole).toString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_dlgSetHeaders->setHeaderList(list); //对话框,初始化显示
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ret = m_dlgSetHeaders->exec(); //以模态对话框的方式显示
|
|
|
|
|
if (ret == QDialog::Accepted) { //Ok按键被按下
|
|
|
|
|
QStringList list = m_dlgSetHeaders->headerList();
|
|
|
|
|
m_model->setHorizontalHeaderLabels(list); //设置模型的表头标题
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ExCustomMainWin::on_actSetSize_triggered()
|
|
|
|
|
{
|
|
|
|
|
//创建模态对话框, 动态创建, 使用过后删除
|
|
|
|
|
ExDlgSize *dlgSize = new ExDlgSize(this);
|
|
|
|
|
Qt::WindowFlags flags = dlgSize->windowFlags();
|
|
|
|
|
dlgSize->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint); //在窗口上给窗口一个窄的对话框边框。用于固定大小的对话框。
|
|
|
|
|
dlgSize->setRowCol(m_model->rowCount(), m_model->columnCount());
|
|
|
|
|
|
|
|
|
|
int ret = dlgSize->exec(); //以模态对话框显示
|
|
|
|
|
if (ret == QDialog::Accepted) { //Ok按钮被按下,获取对话框中输入,设置行数和列数
|
|
|
|
|
int row = dlgSize->getRowCount();
|
|
|
|
|
int col = dlgSize->getColCount();
|
|
|
|
|
m_model->setRowCount(row);
|
|
|
|
|
m_model->setColumnCount(col);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
delete dlgSize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ExCustomMainWin::on_actLocate_triggered()
|
|
|
|
|
{
|
|
|
|
|
ui->actLocate->setEnabled(false);
|
|
|
|
|
m_dlglocate = new ExDlgLocate(this);
|
|
|
|
|
m_dlglocate->setAttribute(Qt::WA_DeleteOnClose); //关闭对话框时候,自动删除
|
|
|
|
|
|
|
|
|
|
Qt::WindowFlags flags = m_dlglocate->windowFlags();
|
|
|
|
|
m_dlglocate->setWindowFlags(flags | Qt::WindowStaysOnTopHint); //窗口置顶
|
|
|
|
|
|
|
|
|
|
m_dlglocate->setSpinRange(m_model->rowCount(), m_model->columnCount());
|
|
|
|
|
QModelIndex curIndex = m_seleModel->currentIndex();
|
|
|
|
|
|
|
|
|
|
if (curIndex.isValid())
|
|
|
|
|
m_dlglocate->setSpinValue(curIndex.row(), curIndex.column());
|
|
|
|
|
|
|
|
|
|
m_dlglocate->show();
|
|
|
|
|
}
|
2019-10-08 00:18:34 +08:00
|
|
|
|
|
|
|
|
|
void ExCustomMainWin::on_currentChanged(const QModelIndex ¤t, const QModelIndex &previous)
|
|
|
|
|
{
|
|
|
|
|
if (current.isValid()) {
|
|
|
|
|
//状态栏的显示
|
|
|
|
|
QStandardItem* item;
|
|
|
|
|
item = m_model->itemFromIndex(current);
|
|
|
|
|
|
|
|
|
|
m_labCellPos->setText(QString::asprintf("当前单元格:%d行,%d列", current.row(),current.column())); //显示模型索引的行和列号
|
|
|
|
|
m_labCellText->setText("单元格内容:"+ item->text()); //显示item的文字内容
|
|
|
|
|
}
|
|
|
|
|
}
|