#include "test03.h"
test03::test03(QWidget *parent, Qt::WFlags flags)
: QDialog(parent, flags)
{
ui.setupUi(this);
//tablewidget常用操作
//设置表格行数
ui.tableWidget->setRowCount(18);
//设置表格列数
ui.tableWidget->setColumnCount(2);
//设置水平表头
QStringList strList;
strList<<tr("参数名")<< tr("参数值");
ui.tableWidget->setHorizontalHeaderLabels(strList);
ui.tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background-color:rgb(40,143,218);font:13pt '宋体';color: white;};");
ui.tableWidget->verticalHeader()->setStyleSheet("QHeaderView::section{background-color:rgb(123,125,255);font:13pt '宋体';color: white;};");
//设置单元格编辑状态
QTableWidgetItem *pItem = new QTableWidgetItem("MaxNum");
pItem->setFlags(Qt::ItemIsEnabled); //设置当前单元格编辑状态为浅色不可编辑,具体详见Qt帮助文档中的枚举体,陈列了各种编辑状态
ui.tableWidget->setItem(1,0,pItem); //设置第1行第0列(行和列都是从0开始的)的内容为pItem
ui.tableWidget->setItem(1,1,new QTableWidgetItem(tr("20")));
ui.tableWidget->setItem(0,0,new QTableWidgetItem(tr("MinNum"))); //设置第0行第0列单元格内容
//ui.tableWidget->setItem(0,1,new QTableWidgetItem(tr("50"))); //设置第0行第1列单元格内容
// ui.tableWidget->setItem(2,0,new QTableWidgetItem("80"));
//添加部件ComboBox到单元格中
QComboBox *pComboBox = new QComboBox();
pComboBox->addItem("10");
pComboBox->addItem("20");
ui.tableWidget->setCellWidget(0,1,pComboBox); //添加到底0行第1列单元格中
//treeWidget目录
//使用右击菜单需要添加此项
ui.treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui.treeWidget, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(SlotCustomContextMenuRequested(const QPoint&)));
QTreeWidgetItem * item1 = new QTreeWidgetItem(QStringList()<<"节点1");
ui.treeWidget->addTopLevelItem(item1);
//追加子节点
QStringList child1 = QStringList()<<"2级节点";
QTreeWidgetItem * childNode1 = new QTreeWidgetItem(child1);
QStringList child2 = QStringList()<<"3级节点";
QTreeWidgetItem * childNode2= new QTreeWidgetItem(child1);
childNode1->addChild(childNode2);
item1->addChild(childNode1);
}
void test03::SlotCustomContextMenuRequested(const QPoint& pos)
{
del = new QAction("删除", this);
ad = new QAction("增加",this);
QMenu *popMenu = new QMenu(this);//定义右键弹出菜单
QMenu* M1 = popMenu->addMenu("增加");
QMenu* M2 = popMenu->addMenu("删除");
M2->addAction(del);//往菜单内添加QAction
M1->addAction(ad);
connect(del, SIGNAL(triggered()), this, SLOT(DeleteItemFunction()));
connect(ad, SIGNAL(triggered()), this, SLOT(AddItemFunction()));
popMenu->exec(QCursor::pos());//弹出右键菜单,菜单位置为光标位置
}
void test03::DeleteItemFunction()
{
QTreeWidgetItem * currentItem = ui.treeWidget->currentItem();//获取当前节点
if (currentItem == NULL)
{
return;
}
else
delete currentItem;
}
void test03::AddItemFunction()
{
QTreeWidgetItem * currentItem = ui.treeWidget->currentItem();//获取当前节点
AddTreeNode(currentItem,"新子节点","新子节点");
}
QTreeWidgetItem * test03::AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc)
{
QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc);
parent->addChild(item);
return item;
}
void test03::on_pushButton_clicked()
{
ui.stackedWidget->setCurrentIndex(0);
}
void test03::on_pushButton_2_clicked()
{
ui.stackedWidget->setCurrentIndex(1);
}
void test03::on_pushButton_3_clicked()
{
ui.stackedWidget->setCurrentIndex(2);
}
void test03::on_pushButton_4_clicked()
{
getContent(0);
}
void test03::on_pushButton_5_clicked()
{
getContent(1);
}
void test03::on_pushButton_6_clicked()
{
QString path="C://Users//lt265//Desktop//新建 DOCX 文档.docx";
if(path.isEmpty()==false)
{
QFile file(path);
QAxObject *words= new QAxObject(this);/**定义一个指针**/
words->setControl("kwps.Application");//指向com文件类型setControl
words->setProperty("Visible",false);//设置是否提示或者显示对话框setProperty
QAxObject *workbooks = words->querySubObject("Documents");//获取工作簿(excel文件)集合querySubObject
workbooks->dynamicCall("Add(QString)", path);//链接到具体的文件dynamicCall
//path至关重要,获取excel文件的路径
//打开一个word文件,获取文档
QAxObject *workbook = words->querySubObject("ActiveDocument");//获取word中已经有数值的区域querySubObject
/********修改一个位置的内容*********/
QString sLabel="XXXXX";//此处必须为文档中被标记为书签的内容,下面语句的意思就是确定书签的位置:
QAxObject *pBookmark = workbook->querySubObject("Bookmarks(QString)",sLabel);//找到活跃区域内的书签querySubObject
//就是把书签内容直接给你替换了
QString sText=ui.textEdit_2->toPlainText();//此处为替换内容
pBookmark->dynamicCall("Select(void)");//选中要选中的区域
pBookmark->querySubObject("Range")->setProperty("Text",sText);//进行替换操作
/*****截图*******/
QPixmap pix = QPixmap::grabWidget(ui.tableWidget);
QString strFile2="C://Users//lt265//Desktop";
pix.save(QString("%1/34.png").arg(strFile2));
QString strFile=strFile2+"//34.png";
QString screenshot="截图";//此处必须为文档中被标记为书签的内容,下面语句的意思就是确定书签的位置:
QAxObject *pBookmark2 = workbook->querySubObject("Bookmarks(QVariant)",screenshot);//找到活跃区域内的书签querySubObject
if(!pBookmark2->isNull())
{
pBookmark2->dynamicCall("Select(void)");
QAxObject *range;
range = pBookmark2->querySubObject("Range");
QVariant tmp = range->asVariant();
QList<QVariant>qList;
//strFile 图片路径
qList<<QVariant(QString::fromLocal8Bit(QString(strFile).toLocal8Bit()));
qList<<QVariant(false);
qList<<QVariant(true);
qList<<tmp;
QAxObject *Inlineshapes = workbook->querySubObject("InlineShapes");
// pBookmark->querySubObject("Range")->setProperty("Text",qList);//进行替换操作
Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
delete Inlineshapes;
delete range;
}
delete pBookmark2;
/*****插入表格*******/
int mrow=ui.tableWidget->rowCount(); //行数
int mcolumn=ui.tableWidget->columnCount(); //列数
QString m_table="表格";
QAxObject *range = workbook->querySubObject("Bookmarks(QString)",m_table)->querySubObject("Range");//找到活跃区域内的书签querySubObject,并在该区域插入表格
QAxObject *tables = workbook->querySubObject("Tables");
QAxObject *table = tables->querySubObject("Add(QVariant,int,int)",range->asVariant(),mrow+1,mcolumn);// 行和列
table->setProperty("Style","网格型");
/*****设置表头*******/
QStringList strList2;
strList2<<tr("参数名")<< tr("参数值");
for(int i=0;i<mcolumn;i++)
{
table->querySubObject("Cell(Long,Long)",1,i+1)->querySubObject("Range")
->dynamicCall("SetText(QString)", strList2.at(i));//设置表格内容
}
/*****填充表格*******/
for(int i=0;i<ui.tableWidget->rowCount();i++)
{
for(int j=0;j<ui.tableWidget->columnCount();j++)
{
if(i==0&&j==1)
{
QWidget *widgetSex=ui.tableWidget->cellWidget(i,j);
QComboBox *sex=(QComboBox*)widgetSex;
//sex->currentText();
table->querySubObject("Cell(Long,Long)",i+2,j+1)->querySubObject("Range")
->dynamicCall("SetText(QString)", sex->currentText());
}
else
{
QTableWidgetItem* item = ui.tableWidget->item(i,j);
if(item != NULL)
{
table->querySubObject("Cell(Long,Long)",i+2,j+1)->querySubObject("Range")
->dynamicCall("SetText(QString)", ui.tableWidget->item(i,j)->text());
}
}
}
}
/*****保存*******/
QString pathsave = QFileDialog::getSaveFileName(this,"Save","C://Users//lt265//Desktop","kwps(*doc)");
//QString pathsave = QFileDialog::getSaveFileName(this,"Save","../","kwps(*doc)");
if(pathsave.isEmpty()==true)
{
return;
}
workbook->dynamicCall("SaveAs(const QString&))",QDir::toNativeSeparators(pathsave));
workbook->dynamicCall("Close(bool)", true);
words->dynamicCall("Quit()");
delete workbook;
delete words;
file.close();
QMessageBox::warning(this,"完成","文件已经保存",QMessageBox::Yes);
}
}
void test03::getContent(int type)
{
QString style;
QString str = ui.textEdit->toPlainText();
QString tmp;
for (int i=0;i<str.length();i++)
{
if ( type?(str.at(i) >='0' && str.at(i)<='9'):(str.at(i) <'0' || str.at(i)>'9') )
{
tmp.append(str.at(i));
}
}
ui.textBrowser->setText(tmp);
}
test03::~test03()
{
}
插入表格,插入图片,界面交互
于 2023-06-06 18:46:31 首次发布