Qt 基础组件速学 视图与控件篇

学习目标: Qt 基础组件复习/速学 视图与控件篇

前置环境:

运行环境:qt creator 4.12

学习内容:

视图与控件的区别:

视图主要负责数据的展示和交互,而控件则更侧重于构建用户界面。代码编写的思想也不同。

     //清单视图控件                   思想:先搞模型  再往模型注入数据
    Widget::setQListView();
    //树视图
    Widget::setQTreeView();
    //表视图
    Widget::setQTableView();        

    //清单 树 表控件                思想:需要则直接注入
    Widget::setQTableWidget();
    Widget::setQListWidget();
    Widget::setQTreeWidget();

 详细代码和运行测试

视图

清单视图

void Widget::setQListView(){

    QStringList qls;
    qls.append("国学类:黄帝内经,道德经,孔子圣经");
    qls.append("计算机类:操作系统,计网,数据结构算法");
    qls.append("数学类:高等数学,线性代数,微分方程");

    QStringListModel* qslmode = new QStringListModel(qls);

    QListView* qlv = new QListView(this);
    qlv->setModel(qslmode);
    qlv->setWindowTitle("清单视图控件");
    qgrid->addWidget(qlv,0,0);
    connect(qlv,SIGNAL(clicked(const QModelIndex)),this,SLOT(QListViewslot(const QModelIndex)));
}

void Widget::QListViewslot(const QModelIndex& data){
    QMessageBox::information(NULL,"你选择的课程",data.data().toString());
}

树视图

void Widget::setQTreeView(){


    QTreeView* treeview = new QTreeView(this);
    QStandardItemModel * standMode = new QStandardItemModel(treeview);
    standMode->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("国家")<<QStringLiteral("省份"));

    QList<QStandardItem*> itemSet;
    itemSet.append(new QStandardItem("俄罗斯"));
    itemSet.append(new QStandardItem("莫斯科"));
    QList<QStandardItem*> itemSet2;
    itemSet2.append(new QStandardItem("中国"));
    itemSet2.append(new QStandardItem("北京"));
    //1级
    QList<QStandardItem*> itemSet3;
    QStandardItem* cn = new QStandardItem("中国");
    QStandardItem* cn_gd = new QStandardItem("广东");
    itemSet3.append(cn);
    itemSet3.append(cn_gd);

     // 二级节点,添加到第一个一级节点
    QList<QStandardItem*> itemSet32;
    QStandardItem* gd = new QStandardItem("广东");
    QStandardItem* gd_gz = new QStandardItem("广州");
    itemSet32.append(gd);
    itemSet32.append(gd_gz);
    cn->appendRow(itemSet32);

    QList<QStandardItem*> itemSet33;
    QStandardItem* gd2 = new QStandardItem("广东");
    QStandardItem* gd_sz = new QStandardItem("深圳");
    itemSet33.append(gd2);
    itemSet33.append(gd_sz);
    cn->appendRow(itemSet33);


     // 3级节点,添加到第一个2级节点
    QList<QStandardItem*> itemSet323;
    QStandardItem* gz = new QStandardItem("广州");
    QStandardItem* gz_th = new QStandardItem("天河");
    itemSet323.append(gz);
    itemSet323.append(gz_th);
    gd->appendRow(itemSet323);


    QList<QStandardItem*> itemSet333;
    QStandardItem* gd_sz2 = new QStandardItem("深圳");
    QStandardItem* sz_gm = new QStandardItem("光明");
    itemSet333.append(gd_sz2);
    itemSet333.append(sz_gm);
    gd2->appendRow(itemSet333);



    standMode->appendRow(itemSet);
    standMode->appendRow(itemSet2);
    standMode->appendRow(itemSet3);

    treeview->setModel(standMode);
    treeview->setRootIsDecorated(true);

    qgrid->addWidget(treeview,1,0);
}

表格视图

void Widget::setQTableView(){
    QTableView* tabView = new QTableView(this);

    QStandardItemModel* standModel = new QStandardItemModel(tabView);
    standModel->setHorizontalHeaderItem(0,new QStandardItem("学号"));
    standModel->setHorizontalHeaderItem(1,new QStandardItem("姓名"));
    standModel->setHorizontalHeaderItem(2,new QStandardItem("性别"));
    standModel->setHorizontalHeaderItem(3,new QStandardItem("分数"));

    standModel->setItem(0,0,new QStandardItem("231320206111"));
    standModel->setItem(0,1,new QStandardItem("张子房"));
    standModel->setItem(0,2,new QStandardItem("男"));
    standModel->setItem(0,3,new QStandardItem("768"));

    standModel->setItem(1,0,new QStandardItem("231320206112"));
    standModel->setItem(1,1,new QStandardItem("倾国"));
    standModel->setItem(1,2,new QStandardItem("男"));
    standModel->setItem(1,3,new QStandardItem("658"));

    standModel->setItem(2,0,new QStandardItem("231320206113"));
    standModel->setItem(2,1,new QStandardItem("项羽"));
    standModel->setItem(2,2,new QStandardItem("男"));
    standModel->setItem(2,3,new QStandardItem("999"));

    tabView->setModel(standModel);
    //设置 不可修改
    tabView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    //排序 Qt::AscendingOrder 降序   DescendingOrder升
    tabView->sortByColumn(3,Qt::DescendingOrder);
    tabView->windowTitleChanged("列表视图");
    qgrid->addWidget(tabView,3,0);
}

控件

清单控件

void Widget::setQListWidget(){
    QListWidget* lswidget = new QListWidget(this);
    QListWidgetItem* qlistitem = new QListWidgetItem("龟虽寿 曹操");
    qlistitem->setTextAlignment(Qt::AlignVCenter | Qt::AlignCenter);
    lswidget->addItem(qlistitem);


    lswidget->addItem("神龟虽寿,犹有竟时。\n \
螣蛇乘雾,终为土灰。 \n\
老骥伏枥,志在千里。 \n\
烈士暮年,壮心不已。 \n\
盈缩之期,不但在天; \n\
养怡之福,可得永年。 \n\
幸甚至哉,歌以咏志。\n");


    qgrid->addWidget(lswidget,0,1);
}

树控件

void Widget::setQTreeWidget(){
    QTreeWidget* treeWidget = new QTreeWidget(this);
    //1
    QTreeWidgetItem* twtitle = new QTreeWidgetItem(treeWidget);
    twtitle->setText(0,"北京大学");
    //twtitle->setCheckState(0,Qt::Checked);
    //1
    QTreeWidgetItem* twtitle2 = new QTreeWidgetItem(treeWidget);
    twtitle2->setText(0,"清华大学");
    //twtitle->setCheckState(0,Qt::Checked);

    //2
    QTreeWidgetItem* item = new QTreeWidgetItem(twtitle);
    item->setText(0,"数学系");
    item->setCheckState(0,Qt::Checked);
    QTreeWidgetItem* item2 = new QTreeWidgetItem(twtitle);
    item2->setText(0,"计算机系");
    item2->setCheckState(0,Qt::Checked);
    QTreeWidgetItem* item3 = new QTreeWidgetItem(twtitle);
    item3->setText(0,"哲学系");
    item3->setCheckState(0,Qt::Checked);


    QTreeWidgetItem* item21 = new QTreeWidgetItem(twtitle2);
    item21->setText(0,"数学系");
    item21->setCheckState(0,Qt::Checked);
    QTreeWidgetItem* item22 = new QTreeWidgetItem(twtitle2);
    item22->setText(0,"计算机系");
    item22->setCheckState(0,Qt::Checked);
    QTreeWidgetItem* item32 = new QTreeWidgetItem(twtitle2);
    item32->setText(0,"哲学系");
    item32->setCheckState(0,Qt::Checked);



    //隐藏表单头部
    treeWidget->setHeaderHidden(true);
    //展开
    treeWidget->expandAll();
    treeWidget->addTopLevelItem(twtitle);
    qgrid->addWidget(treeWidget,1,1);
}

表格控件

void Widget::setQTableWidget(){
    QTableWidget* tableWidget = new QTableWidget();
    tableWidget->setColumnCount(2);
    tableWidget->setRowCount(3);

    QStringList slist;
    slist<<"学号"<<"高考分数";
    tableWidget->setHorizontalHeaderLabels(slist);
    QList<QString> idset;
    idset <<"231320206110"<<"231320206111"<<"231320206112";
    QList<QString> scoreset;
    scoreset <<"110"<<"211"<<"206";

    for(int i=0; i<3;i++){
        int cloum = 0;
        // 0 0 data
        tableWidget->setItem(i,cloum++,new QTableWidgetItem(idset.at(i)));
        tableWidget->setItem(i,cloum++,new QTableWidgetItem(scoreset.at(i)));
    }

    tableWidget->sortItems(1,Qt::DescendingOrder);
    qgrid->addWidget(tableWidget,3,1);
}

总结:

视图 :先搞模型  再往模型注入数据
控件:需要则直接注入

最后附上源代码链接

对您有帮助的话,帮忙点个star

11-QVIEW · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值