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的垂直头项目

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

Qt学习:项视图类之QTableWidget

 

 

代码如下:
//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的用法有一些相同的地方,学的时候注意触类旁通。

 

 

你可能感兴趣的:(QTableWidget)