QTableView

QStandardItemModel,基于项的模型类,每一项都是一个QStandardItem对象

QItemSelectionModel选择模型,跟踪视图组件的单元格选择状态。

1. 设置中心部件(Central Widget)

setCentralWidget(ui->splitter);

Qt中的主窗口通常由几个部分组成,其中一个重要的部分是中心部件,它占据主窗口的中心区域。这个中心部件可以是任何继承自QWidget的对象,比如QSplitterQTextEditQTableView等。

2.样式设置

设置表格的线属性

this->setShowGrid(false); // 隐藏网格线
this->setGridStyle(Qt::DotLine); // 线的样式
this->setFocusPolicy(Qt::NoFocus); // 取消Item选中后的虚线边框
ui->tableView->setAlternatingRowColors(true);//设置换行颜色变化
	ui.wait_check_field_table_->setColumnCount(2);
	ui.wait_check_field_table_->setHorizontalHeaderLabels({ "点击查询字段","列号" });
	ui.wait_check_field_table_->horizontalHeader()->setMinimumSectionSize(100);
	ui.wait_check_field_table_->setColumnWidth(0, 200);
	ui.wait_check_field_table_->setColumnWidth(1, 80);
	ui.wait_check_field_table_->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter);//表头文字左对齐
	ui.wait_check_field_table_->horizontalHeader()->setStretchLastSection(true);//最后一列拉伸
	ui.wait_check_field_table_->setAlternatingRowColors(true);//隔行换色
	ui.wait_check_field_table_->verticalHeader()->setVisible(false); //隐藏列表头
	ui.wait_check_field_table_->setShowGrid(false);//不显示格子线
	ui.wait_check_field_table_->setEditTriggers(QTableView::EditKeyPressed | QTableView::DoubleClicked);//可疑编辑
	ui.wait_check_field_table_->horizontalHeader()->setSectionsClickable(true);//设置表头可点击
	ui.wait_check_field_table_->setContextMenuPolicy(Qt::CustomContextMenu);//添加右键菜单
	ui.wait_check_field_table_->setSelectionMode(QAbstractItemView::SingleSelection);//设置选中模式
	//ui.wait_check_field_table_->setSelectionBehavior(QAbstractItemView::SelectRows);//设置选中状态

 

    //支持拖放操作   
    ui->tableView->setDragEnabled(true);
    ui->tableView->setAcceptDrops(true);
    ui->tableView->setDropIndicatorShown(true);
    //设置拖放模式为移动项目,如果不设置,则为复制项目
    ui->tableView->setDragDropMode(QAbstractItemView::InternalMove);

添加右键菜单的两种方式

ui->tableView->installEventFilter(this);

bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
    if(object==ui->tableView&&event->type()==QEvent::ContextMenu){
        if(ui->tableView->currentIndex().isValid()){
            QMenu * menu = new QMenu();
            menu->addAction("添加");
            menu->addAction("删除");
            QAction * action = menu->exec(cursor().pos());    // 弹出菜单
            if(action == nullptr){
                return QWidget::eventFilter(object, event);
            }
            if(action->text()=="添加"){
                QList<QStandardItem*> list;
                list<<new QStandardItem("QQ")<<new QStandardItem("QQ")<<new QStandardItem("QQ")<<new QStandardItem("QQ");
                m_model->insertRow(m_model->rowCount(),list);
            }
            if (action->text() == "删除") {
                m_model->removeRow(ui->tableView->currentIndex().row());
            }
        }
    }
    return QWidget::eventFilter(object, event);
}
     ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu);

    connect(ui->tableView,&QTableView::customContextMenuRequested,[=](const QPoint &pos){
        QMenu * menu = new QMenu();
        menu->addAction("添加");
        menu->addAction("删除");
        QAction * action = menu->exec(QCursor::pos());    // 弹出菜单
    });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QTableView是Qt框架中的一个类,用于展示表格数据。要使用QTableView,需要先包含头文件#include <QTableView>和#include <QStandardItemModel>。然后创建一个QTableView对象和QStandardItemModel,并使用QTableView的setModel()函数将视图和模型对象进行绑定。 以下是一个继承QTableView的示例代码: ```cpp // .h #include <QTableView> #include <QStandardItemModel> class DBTableView : public QTableView { public: explicit DBTableView(QWidget* _parent_widget = nullptr); ~DBTableView() override; private: QStandardItemModel* db_table_model_; }; // .cpp DBTableView::DBTableView(QWidget* _parent_widget) : QTableView(_parent_widget) { db_table_model_ = new QStandardItemModel(); setModel(db_table_model_); } DBTableView::~DBTableView() {} ``` 要填充表格数据,可以使用QStandardItemModel作为表格的数据模型。每一行每一列的数据可以通过操作模型来设置。 以下是一个使用QStandardItemModel的示例代码: ```cpp // .h #include <QStandardItemModel> #include <QWidget> #include <QTableView> #include <QStandardItem> #include <QPushButton> #include <QHBoxLayout> #include <QVBoxLayout> #include <QEvent> #include <QMenu> #include <QDebug> class TableViewWidget : public QWidget { Q_OBJECT public: TableViewWidget(QWidget* parent = nullptr); ~TableViewWidget(); private: void initTableView(); private: QTableView* m_pMyTableView; QStandardItemModel* m_model; QPushButton* m_pBtnRemove; QPushButton* m_pBtnAdd; }; // .cpp TableViewWidget::TableViewWidget(QWidget* parent) : QWidget(parent) { initTableView(); } TableViewWidget::~TableViewWidget() { delete m_model; } void TableViewWidget::initTableView() { m_model = new QStandardItemModel(this); m_pMyTableView = new QTableView(this); m_pMyTableView->setModel(m_model); // 设置其他属性和布局 // 添加到布局中 QVBoxLayout* layout = new QVBoxLayout(this); layout->addWidget(m_pMyTableView); layout->addWidget(m_pBtnRemove); layout->addWidget(m_pBtnAdd); setLayout(layout); } bool TableViewWidget::eventFilter(QObject* object, QEvent* event) { // 事件过滤器的处理逻辑 // ... return false; } ``` 在创建完QTableView对象后,可以设置使用自定义菜单策略,并进行信号槽关联。下面是一个示例: ```cpp void TestTable::tableViewMenu(const QPoint& _pos) { // 响应数据处理 } void TestTable::initUI() { // ... connect(table_view, &QTableView::customContextMenuRequested, this, &TestTabel::tableViewMenu); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值