📄 managerdialog.cpp
字号:
#include <QtSql>
#include "managerdialog.h"
extern QString g_connectName;
ManagerDialog::ManagerDialog(QWidget *parent ,QString table_name):QDialog(parent)
{
setAttribute(Qt::WA_DeleteOnClose);
setWindowFlags(Qt::Sheet|Qt::WindowMinMaxButtonsHint);
QString sql;
db=QSqlDatabase::database(g_connectName);
QSqlQuery query(db);
table=new TableView(this);
QVBoxLayout *layout=new QVBoxLayout(this);
layout->addWidget(table);
layout->setContentsMargins(0,0,0,0);
setLayout(layout);
setMinimumWidth(780);
setMinimumHeight(480);
model=new MySqlTableModel(table,db);
sql=tr("select table_name from dm_table where connection_id=0 and upper(table_name)=upper('%1')").arg(table_name);
if(query.exec(sql) && query.next())
model->setTable(query.record().field(0).value().toString());
else
model->setTable(table_name.toUpper());
QApplication::setOverrideCursor(Qt::WaitCursor);
model->selectResult();
for(int i=0;i<model->columnCount();i++)
{
sql=tr("SELECT field_name,memo,asso_table_name,asso_field_name,asso_field_display,lower(is_primarykey) as iskey FROM dm_field where connection_id=0 and upper(table_name)=upper('%2') and upper(field_name)=upper('%3')" ).arg(table_name).arg(model->headerData(i,Qt::Horizontal).toString());
//qWarning(sql.toLatin1().data());
query.exec(sql);
if(query.isSelect() && query.next())
{
QString field_name=query.record().field("field_name").value().toString().trimmed();
QString memo=query.record().field("memo").value().toString().trimmed();
QString iskey=query.record().field("iskey").value().toString().trimmed();
if(iskey=="yes")
{
model->setHeaderData(i,Qt::Horizontal,QVariant(QIcon(":/image/key.png")),Qt::DecorationRole);
//model->setHeaderData(i,Qt::Horizontal,QVariant(QColor(0,0,200)),Qt::TextColorRole);
continue;
}
if(memo.length()==0)
memo=field_name;
QString asso_table_name=query.record().field("asso_table_name").value().toString().trimmed();
QString asso_field_name=query.record().field("asso_field_name").value().toString().trimmed();
QString asso_field_display=query.record().field("asso_field_display").value().toString().trimmed();
model->setHeaderData(i,Qt::Horizontal,QVariant(memo));
if(asso_table_name.length()>0)
{
model->setRelation(i, QSqlRelation(asso_table_name, asso_field_name, asso_field_display));
}
}
query.clear();
}
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
table->setTableModel(model);
table->enableAction(true);
QString strTitle=table_name;
if(table_name.toLower()=="dm_application")
strTitle="管理应用";
if(table_name.toLower()=="dm_connection")
strTitle="管理连接";
if(table_name.toLower()=="dm_table")
strTitle="管理表";
if(table_name.toLower()=="dm_field")
strTitle="管理字段";
setWindowTitle(strTitle);
connect(model,SIGNAL(beforeUpdate(int, QSqlRecord &)),this,SLOT(onBeforeUpdate(int, QSqlRecord &)));
QApplication::restoreOverrideCursor();
}
ManagerDialog::~ManagerDialog()
{
}
void ManagerDialog::closeEvent(QCloseEvent *event)
{
event->accept();
}
void ManagerDialog::onBeforeUpdate(int row, QSqlRecord &record)
{
if(model->tableName().toLower()!="dm_field")
return;
QString isPrimaryKey=model->record(row).field("is_primarykey").value().toString().trimmed().toLower();
QString assoTableName=model->record(row).field("asso_table_name").value().toString().trimmed().toLower();
if(isPrimaryKey=="yes" && assoTableName.length()>0)
{
//QMessageBox::warning(this,"",tr("请注意第 %1 行:\n主键列不能设置关联表和关联字段,否则修改值无法保存!\n主键列的关联表被自动忽略!").arg(row+1));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -