#include "mainwindow.h" #include #include "mytablemodel.hpp" #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); // MainWindow w; // w.show(); // view和model联动 QTableView *tbl = new QTableView; MyBookTableModel model; tbl->setModel(&model); // 隐藏滚动条 tbl->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); tbl->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 准备主界面 QWidget w; // 2个按钮,用来改变行数,采用垂直布局 QVBoxLayout *v = new QVBoxLayout; QPushButton *btn1 = new QPushButton("添加一行"); QPushButton *btn2 = new QPushButton("删除最末行"); qApp->connect(btn1, &QPushButton::clicked, [&](){ model.appendRow(); }); qApp->connect(btn2, &QPushButton::clicked, [&](){ model.popBack(); }); v->addWidget(btn1); v->addWidget(btn2); // 主界面的布局采用水平布局,左边是表格,右边是刚才的2个按键 QHBoxLayout *h = new QHBoxLayout; h->addWidget(tbl); h->addLayout(v); // 设置主界面的布局 w.setLayout(h); w.show(); // 当内容改变时自适应列宽 qApp->connect(&model, &MyBookTableModel::dataChanged,[&](){ tbl->resizeColumnsToContents(); int width = 0; for(int i = 0; i < model.columnCount(); ++i) { width += tbl->columnWidth(i); } width += tbl->verticalHeader()->width(); // 设置表格最小宽度 tbl->setMinimumWidth(width); // 设置主窗口大小以刷新界面布局 w.resize(w.minimumWidth(), 300); }); // 最开始添加2行 model.appendRow(); model.appendRow(); return a.exec(); }