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

 

 

posted @ 2013-05-20 20:25  javawebsoa  Views(661)  Comments(0Edit  收藏  举报