zoukankan      html  css  js  c++  java
  • Qt学习:项视图类之QTableWidget

    控件设置选项
            在TableWidget控件的properties选项中,一般常对以下选项进行设置。
                    name:该控件对应源代码中的名称; 
                    font:设置表格内部的字体;
                    columnCount:保存列的数目;
                    rowCount:保存行的数目。
    常用成员函数
    1) QTableWidget::QTableWidget ( QWidget *parent = 0 ) //构造一个父对象为parent的TableWidget。
    2) QTableWidget::QTableWidget ( int rows, int columns, QWidget *parent = 0 )//构造一个rows行、colums列、父对象为parent的TableWidget控件
    3) QWidget *QTableWidget::cellWidget ( int row, int column ) const //返回行row、列column的单元格处的控件。
    4) void QTableWidget::clear () [slot]  //删除该TreeWidget中的所有项目。
    5) void QTableWidget::clearContents () [slot] //删除该TreeWidget中的除了header外的所有项目。
    6) int QTableWidget::column ( const QTableWidgetItem *item ) const  //返回项目item所在的列。
    7) int QTableWidget::currentColumn () const   //返回当前活动的列。
    8) QTableWidgetItem *QTableWidget::currentItem () const   //返回当前活动的项目。
    9) int QTableWidget::currentRow () const   //返回当前活动的行。
    10) void QTableWidget::editItem ( QTableWidgetItem *item )  //如果item是可编辑的,开始编辑item。
    11) QList<QTableWidgetItem *>QTableWidget::findItems( const QString & text,QT::MatchFlags flags ) const
                                                   //查找匹配字符串text的项目,并返回查找结果。
    12) void QTableWidget::insertColumn ( int column ) [slot]   //在列column处插入新列。
    13) void QTableWidget::insertRow ( int row ) [slot]    //在行row处插入新行。
    14) QTableWidgetItem *QTableWidget::item ( int row, int column ) const   //返回行row、列column处的项目。
    15) QTableWidgetItem *QTableWidget::itemAt ( const QPoint & point ) const  //返回点point处的项目。
    16) QTableWidgetItem *QTableWidget::itemAt ( int ax, int ay ) const //返回坐标(ax,ay)处的项目。
    17) void QTableWidget::removeCellWidget ( int row, int column )  //移除行row、列column单元格处的显示控件。
    18) void QTableWidget::removeColumn ( int column ) [slot]   //移除列column。
    19) void QTableWidget::removeRow ( int row ) [slot]     //移除行row。
    20) int QTableWidget::row ( const QTableWidgetItem *item ) const  //返回item的行。
    21) QList<QTableWidgetItem *> QTableWidget::selectedItems ()    //返回所有选中状态的项目。
    22) void QTableWidget::setCellWidget ( int row, int column, QWidget *widget )  //设置行row、列column处的显示控件为widget。
    23) void QTableWidget::setCurrentCell ( int row, int column )  //设置行row、列column处的单元格为当前活动单元格。
    24) void QTableWidget::setCurrentItem ( QTableWidgetItem *item )  //设置项目item为当前活动项目。
    25) void QTableWidget::setHorizontalHeaderItem ( int column, QTableWidgetItem *item )
                                                   //设置项目item为列column的水平头项目。功能同setVerticalHeaderItem()。
    26) void QTableWidget::setHorizontalHeaderLabels ( const QStringList & labels )
                                                   //设置水平标题为labels。功能同seVerticalHeaderLabels()。
    27) void QTableWidget::setItem ( int row, int column, QTableWidgetItem *item ) //设置行row、列column的单元格的项目为item。
    28) void QTableWidget::sortItems ( int column, QT::SortOrder order = QT::AscendingOrder )
                                             //对列column按照order进行排序。
    29) QTableWidgetItem *QTableWidget::takeHorizontalHeaderItem ( int column ) 
                                                //移除列column的水平头项目。功能同takeVerticalHeaderItem()。
    30) QTableWidgetItem *QTableWidget::takeItem ( int row, int column ) //移除行row、列column单元格处的项目。
    31) QTableWidgetItem *QTableWidget::verticalHeaderItem ( int row ) const  //返回行row的垂直头项目

             同样我们给出一个例子,这里先给出效果图:

     
    代码如下:
    //coordinatesetter.h
    #ifndef COORDINATESETTER_H
    #define COORDINATESETTER_H
    
    #include <QDialog>
    #include <QList>
    
    class QDialogButtonBox;
    class QTableWidget;
    
    class CoordinateSetter : public QDialog
    {
        Q_OBJECT
        
    public:
        CoordinateSetter(QList<QPointF> *coords,
                         QWidget *parent = 0);
        void done(int result);
        ~CoordinateSetter();
    
    private slots:
        void addRow();
    
    private:
        QList<QPointF> *coordinates;
        QTableWidget *tableWidget;
        QDialogButtonBox *buttonBox;
    };
    
    #endif // COORDINATESETTER_H
    
    
    //coordinatesetter.cpp
    
    #include <QTableWidget>
    #include <QTableWidgetItem>
    #include <QDialogButtonBox>
    #include <QVBoxLayout>
    #include <QPushButton>
    
    #include "coordinatesetter.h"
    
    CoordinateSetter::CoordinateSetter(QList<QPointF> *coords,QWidget *parent)
        : QDialog(parent)
    {
        coordinates = coords;
        tableWidget = new QTableWidget(0, 2,this);
        tableWidget->setHorizontalHeaderLabels(
                    QStringList() << tr("X") << tr("Y"));
    
        for (int row = 0; row != coordinates->count(); ++row) {
            QPointF point = coordinates->at(row);
            addRow();
            tableWidget->item(row, 0)->setText(QString::number(point.x()));
            tableWidget->item(row, 1)->setText(QString::number(point.y()));
        }
    
        buttonBox = new QDialogButtonBox(Qt::Horizontal);
        QPushButton *addRowButton = buttonBox->addButton(
                    tr("&Add Row"), QDialogButtonBox::ActionRole);
        buttonBox->addButton(QDialogButtonBox::Ok);
        buttonBox->addButton(QDialogButtonBox::Cancel);
    
        connect(addRowButton, SIGNAL(clicked()), this, SLOT(addRow()));
        connect(buttonBox,SIGNAL(accepted()), this, SLOT(accept()));
        connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
    
        QVBoxLayout *layout = new QVBoxLayout;
        layout->addWidget(tableWidget);
        layout->addWidget(buttonBox);
        setLayout(layout);
    
        setWindowTitle(tr("CoordinateSetter"));
    }
    
    void CoordinateSetter::done(int result)
    {
        if (result == QDialog::Accepted) {
            coordinates->clear();
            for (int row = 0; row != tableWidget->rowCount(); ++row) {
                double x = tableWidget->item(row, 0)->text().toDouble();
                double y = tableWidget->item(row, 1)->text().toDouble();
                coordinates->append(QPointF(x, y));
            }
        }
        QDialog::done(result);
    }
    
    void CoordinateSetter::addRow()
    {
        int row = tableWidget->rowCount();
    
        tableWidget->insertRow(row);
    
        QTableWidgetItem *item0 = new QTableWidgetItem;
        item0->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
        item0->setIcon(QIcon(":/images/13.bmp"));
        tableWidget->setItem(row, 0, item0);
    
        QTableWidgetItem *item1 = new QTableWidgetItem;
        item1->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
        item1->setIcon(QIcon(":/images/7.bmp"));
        tableWidget->setItem(row, 1, item1);
    
        tableWidget->setCurrentItem(item0);
    }
    
    CoordinateSetter::~CoordinateSetter()
    {   
    }
    
    //main.cpp
    #include <QApplication>
    
    #include "coordinatesetter.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QList<QPointF> list;
        list << QPointF(0.0, 0.9)
            << QPointF(0.2, 11.0)
            << QPointF(0.4, 15.4)
            << QPointF(0.6, 12.9)
            << QPointF(0.8, 8.5)
            << QPointF(1.0, 7.1)
            << QPointF(1.2, 4.0)
            << QPointF(1.4, 13.6)
            << QPointF(1.6, 22.2)
            << QPointF(1.8, 22.2);
        CoordinateSetter window(&list);
        window.resize(300,300);
        window.show();
        
        return a.exec();
    }

            构造函数接收一个存储着一对坐标值的点的列表,然后遍历这个列表的点的个数,用以确定我们所做得表格的行数,并用这个坐标点初始化每一行的值。每遍历一个点, 用addRow()函数添加一个QTableWidgetItem对象,并设置该对象的一些属性。这里设置了右靠齐,并给每列添加一个QIcon。
            总之,QTableWidget的用法和QListWidget的用法有一些相同的地方,学的时候注意触类旁通。
  • 相关阅读:
    canvas 文本坐标(0,0)显示问题
    canvas 图片跨域处理
    canvas 文字换行
    什么是柯理化函数?
    记录一下学习webpack原理的过程
    pika和kombu实现rpc代码
    pika和rabbitMQ实现rpc代码
    docker部署rabbitMQ
    rabbitMQ和pika模块
    ubuntu搭建关于amd64或arm64,armhf架构的本地apt源
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3089388.html
Copyright © 2011-2022 走看看