Qt模板库、工具即控件项目示例

来源:互联网 发布:x的平方c语言 编辑:程序博客网 时间:2024/06/05 05:28
项目1 :项目控件组(Item Widgets)
具体步骤如下。
(1)新建QtGui应用(详见本书第1章1.3.1节),项目名称为“TreeWidget”,基类选择“QWidget”,类名保持“Widget”不变,保持“创建界面”复选框的选中状态。
(2)双击“widget.ui”文件,打开Qt的设计器,拖曳出一个QTreeWidget。
(3)在头文件“widget.h”中添加代码:
#include <QTreeWidgetItem>
在类Widget声明中添加代码:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTreeWidgetItem>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    void init();
    void updateParentItem(QTreeWidgetItem* item);
private:
    Ui::Widget *ui;
public slots:
    void treeItemChanged(QTreeWidgetItem* item, int column);
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    init(); /*初始化tree item*/
    connect (ui->treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
             this, SLOT(treeItemChanged(QTreeWidgetItem*,int)));
}
Widget::~Widget()
{
    delete ui;
}
void Widget::init ()
{
    ui->treeWidget->clear ();
    //第一分组(显示在ui->treeWidget框内)
    QTreeWidgetItem* group1 = new QTreeWidgetItem(ui->treeWidget);
    group1->setText (0, "group11");
    group1->setFlags (Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
    group1->setCheckState (0, Qt::Unchecked);   //初始值是没有选中
    //添加第一个成员
    QTreeWidgetItem* subItem11 = new QTreeWidgetItem(group1);
    subItem11->setText (0, "subItem11");
    subItem11->setFlags (Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
    subItem11->setCheckState (0, Qt::Unchecked);
    //添加第二个成员
    QTreeWidgetItem* subItem12 = new QTreeWidgetItem(group1);
    subItem12->setText (0, "subItem12");
    subItem12->setFlags (Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
    subItem12->setCheckState (0, Qt::Unchecked);
    //添加第三个成员
    QTreeWidgetItem* subItem13 = new QTreeWidgetItem(group1);
    subItem13->setText (0, "subItem13");
    subItem13->setFlags (Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
    subItem13->setCheckState (0, Qt::Unchecked);
    //添加第四个成员
    QTreeWidgetItem* subItem14 = new QTreeWidgetItem(group1);
    subItem14->setText (0, "subItem14");
    subItem14->setFlags (Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
    subItem14->setCheckState (0, Qt::Unchecked);
    //第二分组(显示在ui->treeWidget框内)
    QTreeWidgetItem* group2 = new QTreeWidgetItem(ui->treeWidget);
    group2->setText (0, "group2");
    group2->setFlags (Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
    group2->setCheckState (0, Qt::Unchecked);   //初始值是没有选中
    //添加第一个成员
    QTreeWidgetItem* subItem21 = new QTreeWidgetItem(group2);
    subItem21->setText (0, "subItem21");
    subItem21->setFlags (Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
    subItem21->setCheckState (0, Qt::Unchecked);
    //添加第二个成员
    QTreeWidgetItem* subItem22 = new QTreeWidgetItem(group2);
    subItem22->setText (0, "subItem22");
    subItem22->setFlags (Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
    subItem22->setCheckState (0, Qt::Unchecked);
    //添加第三个成员
    QTreeWidgetItem* subItem23 = new QTreeWidgetItem(group2);
    subItem23->setText (0, "subItem23");
    subItem23->setFlags (Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
    subItem23->setCheckState (0, Qt::Unchecked);
    //添加第四个成员
    QTreeWidgetItem* subItem24 = new QTreeWidgetItem(group2);
    subItem24->setText (0, "subItem24");
    subItem24->setFlags (Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
    subItem24->setCheckState (0, Qt::Unchecked);
}
void Widget::treeItemChanged (QTreeWidgetItem *item, int column)
{
    //返回第一列中指定的文本
    QString itemText = item->text (0);
    //选中时
    if(Qt::Checked == item->checkState (0))
    {
        QTreeWidgetItem* parent = item->parent (); //父节点
        int count = item->childCount ();
        if(count > 0)
        {
            for(int i = 0; i < count; i++)
            {
                //子节点也选中
                item->child (i)->setCheckState (0, Qt::Checked);
            }
        }
        else
        {
            //是子接点
            updateParentItem (item);
        }
    }
    else if(Qt::Unchecked == item->checkState (0))
    {
        int count = item->childCount ();
        if(count > 0)
        {
            for(int i = 0; i < count; i++)
            {
                //子节点未选择
                item->child (i)->setCheckState (0, Qt::Unchecked);
            }
        }
        else
        {
            updateParentItem (item);
        }
    }
}
void Widget::updateParentItem (QTreeWidgetItem *item)
{
    QTreeWidgetItem* parent = item->parent ();
    if(parent == NULL)
    {
        return;
    }
    //选中节点的个数
    int selectedCount = 0;
    int childCount = parent->childCount ();
    for(int i = 0; i < childCount; i++)
    {
        QTreeWidgetItem *childItem = parent->child (i);
        if(childItem->checkState (0) == Qt::Checked)
        {
            selectedCount++;
        }
    }
    if(selectedCount <= 0)
    {
        //未中状态
        parent->setCheckState (0, Qt::Unchecked);
    }
    else if(selectedCount > 0 && selectedCount < childCount)
    {
        //部分选中状态                       部分 检查
        parent->setCheckState (0, Qt::PartiallyChecked);
    }
    else if(selectedCount == childCount)
    {
        //全选中状态
        parent->setCheckState (0, Qt::Checked);
    }
}










0 0
原创粉丝点击