QT TableView

<pre name="code" class="cpp">#include <QtGui>

//代理类,把所有单元格中的字符居中显示
class VIPModel : public QStandardItemModel
{
    Q_OBJECT
public:
    VIPModel(QObject *parent=NULL) : QStandardItemModel(parent) { }
    VIPModel(int row, int column, QObject *parent=NULL)
        : QStandardItemModel(row, column, parent) { }
   // QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
    QVariant data(const QModelIndex &index, int role /*= Qt::DisplayRole*/) const
    {
        switch (role)
        {
            case Qt::DisplayRole:
                return QStandardItemModel::data(index, 0);
                break;
            case Qt::TextAlignmentRole:
                return Qt::AlignCenter;
                break;
            case Qt::CheckStateRole:

                break;

        default:
             return QVariant();
             break;
        }
        return QVariant();

    }

   };

#include "main.moc"
/*将 project里面的 bulid dirctory的路径:
C:\Qt\qt\examples\animation\appchooser-build-desktop
修改为:
C:\Qt\qt\examples\animation\appchooser
*/

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    VIPModel *model = new VIPModel(5, 5);
    QTableView *tableView = new QTableView;

    //把表格的背景调成黄蓝相间
    //这种方法是在网上看到的,用起来还真方便啊
    tableView->setAlternatingRowColors(true);
    tableView->setStyleSheet("QTableView{background-color: rgb(250, 250, 115);"
                             "alternate-background-color: rgb(141, 163, 215);}");

    tableView->setWindowTitle("VIP List");
    tableView->resize(700, 400);
    tableView->setModel(model);
    {
        //QStringList headerList;
        //headerList << "No." << "ID" << "Name" << "Age" << "Sex" << "Show";
        //model->setHorizontalHeaderLabels(headerList);
    }
    //或者
    {
        model->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("No.")));
        model->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("ID")));
        model->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("Name")));
        model->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("Age")));
        model->setHorizontalHeaderItem(4, new QStandardItem(QObject::tr("Sex")));
        model->setHorizontalHeaderItem(5, new QStandardItem(QObject::tr("Show")));
    }

   //tableView->verticalHeader()->setVisible(false);//隐藏每行前的序号
   //或者
   tableView->verticalHeader()->hide();//隐藏每行前的序号
   tableView->horizontalHeader()->setStretchLastSection(true);//最后一列是否占据剩下空间

   //设置表格属性
   //设置列宽不可变动,即不能通过鼠标拖动增加列宽
   /*{
       tableView->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
       tableView->horizontalHeader()->setResizeMode(1, QHeaderView::Fixed);
       tableView->horizontalHeader()->setResizeMode(2, QHeaderView::Fixed);
       tableView->horizontalHeader()->setResizeMode(3, QHeaderView::Fixed);
       tableView->horizontalHeader()->setResizeMode(4, QHeaderView::Fixed);
   }*/

   //设置表格的各列的宽度值
   /*{
       tableView->setColumnWidth(0,100);
       tableView->setColumnWidth(1,100);
       tableView->setColumnWidth(2,100);
       tableView->setColumnWidth(3,100);
       tableView->setColumnWidth(4,100);
   }*/
   //设置表格的单元为只读属性,即不能编辑
   //stableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
   //如果你用在QTableView中使用右键菜单,需启用该属性
   //tableView->setContextMenuPolicy(Qt::CustomContextMenu);
   //动态添加行
   //在表格中添加行时,我们只需要在model中插入数据即可,一旦model中的数据发生变化,QTabelView显示就会做相应的变动
   //在第一行添加学生张三的个人信息(setItem函数的第一个参数表示行号,第二个表示列号,第三个为要显示的数据)
   {
    model->setItem(0, 0, new QStandardItem(("sam")));
    model->setItem(0, 1, new QStandardItem("201000438"));
    model->setItem(0, 2, new QStandardItem(("man")));
    model->setItem(0, 3, new QStandardItem(("18")));
    model->setItem(0, 4, new QStandardItem(("tj")));
   }

   //设置数据显示的样式
   //设置单元格文本居中,张三的数据设置为居中显示
   /*{//这里与data()函数功能相似,可以不重写data()而改为一下显示属性
      model->item(0, 0)->setTextAlignment(Qt::AlignLeft);
      model->item(0, 1)->setTextAlignment(Qt::AlignCenter);
      model->item(0, 2)->setTextAlignment(Qt::AlignCenter);
      model->item(0, 3)->setTextAlignment(Qt::AlignCenter);
      model->item(0, 4)->setTextAlignment(Qt::AlignCenter);
   }*/
   //设置单元格文本颜色,张三的数据设置为红色
   /*{//这里与data()函数功能相似,可以不重写data()而改为一下显示属性
       model->item(0,0)->setForeground(QBrush(QColor(255,0,0)));
       model->item(0, 0)->setForeground(QBrush(QColor(255, 0, 0)));
       model->item(0, 1)->setForeground(QBrush(QColor(255, 0, 0)));
       model->item(0, 2)->setForeground(QBrush(QColor(255, 0, 0)));
       model->item(0, 3)->setForeground(QBrush(QColor(255, 0, 0)));
       model->item(0, 4)->setForeground(QBrush(QColor(0, 0, 255)));
       }*/
   //将字体加粗
   /*{//这里与data()函数功能相似,可以不重写data()而改为一下显示属性
       model->item(0, 0)->setFont( QFont( "Times", 10, QFont::Black ) );
       model->item(0, 1)->setFont( QFont( "Times", 10, QFont::Black ) );
       model->item(0, 2)->setFont( QFont( "Times", 10, QFont::Black ) );
       model->item(0, 3)->setFont( QFont( "Times", 10, QFont::Black ) );
       model->item(0, 4)->setFont( QFont( "Times", 10, QFont::Black ) );
   }*/

    //设置排序方式,按年龄降序显示
    //model->sort(3, Qt::DescendingOrder);


    tableView->show();
    return app.exec();
}





                
### 关于 QT TableView 的使用教程及常见问题 #### 1. 加载不同版本的 `TableView` 控件 在 QT 中,可以利用模块别名的方式加载特定版本的 `TableView` 控件。通过这种方式,开发者可以在同一项目中分别调用旧版和新版的控件功能。 以下是具体实现方法: ```qml import QtQuick.Controls 1.4 as QC14 import QtQuick.Controls 2.1 as QC21 QC14.TableView { id: oldTableView } QC21.TableView { id: newTableView } ``` 上述代码展示了如何导入两个不同版本的 `TableView` 并赋予它们不同的名称空间[^1]。这样可以根据需求选择合适的版本进行开发。 --- #### 2. 使用 QTableWidget 实现表格数据展示 如果需要基于 Python 和 PyQt 来操作表格视图,则可以通过 `QTableWidget` 完成复杂的数据处理逻辑。下面是一个简单的例子,演示如何创建一个窗口并显示表格内容: ```python from PyQt5.QtWidgets import QMainWindow, QApplication, QTableWidgetItem import sys from ui.table_ui import Ui_MainWindow class TableWin(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) # 设置表格列数和行数 self.tableWidget.setRowCount(3) self.tableWidget.setColumnCount(3) # 添加单元格数据 for row in range(3): for col in range(3): item = QTableWidgetItem(f"Row{row} Col{col}") self.tableWidget.setItem(row, col, item) if __name__ == '__main__': app = QApplication(sys.argv) table_win = TableWin() table_win.show() sys.exit(app.exec_()) ``` 此代码片段定义了一个继承自 `QMainWindow` 的类,并初始化了带有三行三列表格的小型应用程序[^3]。它还包含了向每个单元格填充字符串的功能。 --- #### 3. QT 性能优化与界面美化技巧 对于更复杂的场景,比如大规模数据集或者高频率更新的操作环境,可能需要考虑性能方面的改进措施以及视觉效果上的增强手段。这些主题通常涉及以下几个方面: - **模型/视图架构**:合理设计数据模型以减少不必要的刷新次数。 - **异步加载机制**:当面对大量记录时采用分页技术来逐步呈现信息而不是一次性全部渲染出来。 - **样式定制化**:运用 CSS 类似语法调整组件外观属性从而达到更好的用户体验目标。 有关这方面的深入学习资源可参考专门针对 QT 的高级培训资料[^2]。 --- #### 4. 安装 QT6 及其相关依赖项 为了支持最新特性(如 Quick Controls 2),建议升级到最新的稳定发行版——即当前主流分支之一的 QT6 。按照官方文档指引完成基础环境搭建之后再继续探索后续步骤即可[^4]。 --- ### 示例总结 综上所述,在实际应用过程中可能会遇到诸如跨平台兼容性测试失败等问题;另外需要注意的是随着软件迭代速度加快也可能存在某些API接口发生变化的情况所以务必保持关注官方公告以便及时作出相应修改动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值