当前位置:   article > 正文

QT tableWidget横向纵向设置_qtabwidget竖向

qtabwidget竖向
  1. //创建表格
  2. QTableWidget *tableWidget = new QTableWidget(10,5,ui->centralWidget);
  3. // 使表格平铺在界面
  4. tableWidget-> horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  5. tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  6. tableWidget->show();
  7. // 使表格平铺在界面
  8. tableWidget-> horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  9. tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  10. // 设置控制大小
  11. tableWidget->resize(500,500);
  12. // 删除列
  13. tableWidget->removeColumn(0);
  14. // 删除行
  15. tableWidget->removeRow(0);
  16. 1,设置表头
  17. QStringList header;
  18. header<<"姓名"<<"年龄";
  19. header.push_back(QString("备注"));
  20. tableWidget->setHorizontalHeaderLabels(header);
  21. tableWidget->setVerticalHeaderLabels(header);
  22. // 隐藏表头
  23. tableWidget->verticalHeader()->setVisible(false);
  24. // 最后一列自动宽度
  25. tableWidget->horizontalHeader()->setStretchLastSection(true);
  26. 2,一般显示
  27. tableWidget->setItem(0,0,new QTableWidgetItem("张三"));
  28. tableWidget->setItem(0,1,new QTableWidgetItem("33"));
  29. // 内容居中显示
  30. tableWidget->item(0,0)->setTextAlignment(Qt::AlignCenter);
  31. // 文本颜色
  32. tableWidget->item(0,0)->setTextColor(QColor(200,100,100));
  33. // 字体
  34. tableWidget->item(0,0)->setFont(QFont("Microsoft Yahei"));
  35. // 背景颜色
  36. tableWidget->item(0,0)->setBackgroundColor(QColor(100,100,100));
  37. 3,放一个控件
  38. // 单元格里放一个控件
  39. QComboBox *comBox = new QComboBox();
  40. comBox->addItem("Male");
  41. comBox->addItem("Female");
  42. tableWidget->setCellWidget(1,1,comBox);
  43. 4,加一个图标
  44. QTableWidget *tableWidget = new QTableWidget(10,5,ui->centralWidget);
  45. tableWidget->show();
  46. QStringList header;
  47. header<<"姓名"<<"年龄";
  48. tableWidget->setHorizontalHeaderLabels(header);
  49. tableWidget->setItem(0,0,new QTableWidgetItem(QIcon("D:/1.png"),"张三"));
  50. tableWidget->setItem(0,1,new QTableWidgetItem("33"));
  51. 5,获取内容/清除内容/关闭
  52. QString string = tableWidget->item(0,0)->text();
  53. qDebug() << string << endl;
  54. // 清除所有内容含表头// 清除内容不含表头
  55. tableWidget->clear();
  56. tableWidget->close();
  57. 6, 设置行高和列宽
  58. tableWidget->setColumnWidth(3,300);
  59. tableWidget->setRowHeight(3,30);
  60. 7,单元格选中行为
  61. // 选中整行
  62. tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  63. // 选中单元格
  64. tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
  65. // 选中一列
  66. tableWidget->setSelectionBehavior(QAbstractItemView::SelectColumns);
  67. // 只允许选中一行
  68. tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  69. // 允许选中多行(默认情况)
  70. tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
  71. 8,合并单元格
  72. QTableWidget *tableWidget = new QTableWidget(10,5,ui->centralWidget);
  73. tableWidget->show();
  74. QStringList header;
  75. header<<"姓名"<<"年龄";
  76. tableWidget->setHorizontalHeaderLabels(header);
  77. tableWidget->setItem(0,0,new QTableWidgetItem("张三"));
  78. tableWidget->setItem(0,1,new QTableWidgetItem("33"));
  79. tableWidget->setSpan(1,0,1,2);
  80. 9,信号
  81. 1)头函数
  82. public slots:
  83. void on_itemChanged(QTableWidgetItem *item);
  84. QTableWidget *tableWidget = new QTableWidget(10,5,ui->centralWidget);
  85. 2)建立表格建立槽函数
  86. tableWidget->show();
  87. QStringList header;
  88. header<<"姓名"<<"年龄";
  89. tableWidget->setHorizontalHeaderLabels(header);
  90. connect(tableWidget, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(on_itemChanged(QTableWidgetItem *)));

 

横向控件

要设置QTabWidget选项卡的字体方向,可以使用QTabWidget的setTabPosition()方法。通过传递Qt枚举值QTabWidget.east或QTabWidget.west作为参数,可以设置选项卡的字体方向为从左到右或从右到左。

  1. myTabWidget = QTabWidget()
  2. myTabWidget.setTabPosition(QTabWidget.west)

只要把tabPosition的属性改一下就可以了,改到你想要的位置,这时候如果有文字,文字的显示并不是竖排的,可以设置一下tab里的text的文字属性,具体语句可以查看一下帮助文档,也可以贴图,这里我直接通过设置Stylesheet样式表,直接重绘了一下tab标签页的样式,应用在tabBar上统一实现的。

正常设置QTabWidget->setTabPosition(QTabWidget::West);设置完竖向之后会发现QTabBar仍然是竖向的所以我们需要重绘一下Qtabbar 下面是重绘代码

  1. QTabWidget* tab = new QTabWidget();
  2. QPushButton* closeButton = new QPushButton;
  3. closeButton->setObjectName("closeButton");
  4. QPushButton* button = new QPushButton("button");
  5. tab->addTab(closeButton, "关闭");
  6. tab->addTab(button, "按钮");
  7. tab->setTabPosition(QTabWidget::West);//QTabWidget竖向
  8. tab->tabBar()->setStyle(new CustomTabStyle);//注意,设置上述代码风格 就可以实现QTabBar横向
  9. setCentralWidget(tab);

1,设置表头

  1. //设置列数
  2. ui->tableWidget->setColumnCount(3);
  3. QTableWidgetItem *item0 = new QTableWidgetItem;
  4. QTableWidgetItem *item1 = new QTableWidgetItem;
  5. QTableWidgetItem *item2 = new QTableWidgetItem;
  6. //设置显示内容
  7. item0->setText("编号");
  8. item1->setText("说明");
  9. item2->setText("数值");
  10. //设置水平表头
  11. ui->tableWidget->setHorizontalHeaderItem(0, item0);
  12. ui->tableWidget->setHorizontalHeaderItem(1, item1);
  13. ui->tableWidget->setHorizontalHeaderItem(2, item2);

QString str1= "学生姓名,男,2003-6-15,汉族,四川"; 
QString str2= str1.section(",",0,0); //str2 ="学生姓名",第一段的编号为 0 
QString str2= str1.section(",",1,1); //str2 ="男" 
QString str2= str1.section(",",0,1); //str2 ="学生姓名,男" 
QString str2= str1.section(",",4,4); //str2 ="四川" 

 QString my=line.section('#', 2, 2);
  qDebug() <<my;
  //  QString my="zhangfei";
 QTableWidgetItem* name = new QTableWidgetItem(my);

 ui->tableWidget->setItem(iRowCount, 0, name );    // 0 第一列

如何获取第一行第一列单元格的文本内容:
QTableWidgetItem *item = ui->tableWidget->item(, );

Qstring text = item->text();

qDebug() << text;

2,初始化数据

  1. //初始化数据
  2. //添加数据时,一定要设置行数,否则数据不会展示出来
  3. ui->tableWidget->setRowCount(2);
  4. QTableWidgetItem* name0 = new QTableWidgetItem;
  5. QTableWidgetItem* name1 = new QTableWidgetItem;
  6. QTableWidgetItem* age0 = new QTableWidgetItem;
  7. QTableWidgetItem* age1 = new QTableWidgetItem;
  8. QTableWidgetItem* code0 = new QTableWidgetItem;
  9. QTableWidgetItem* code1 = new QTableWidgetItem;
  10. name0->setText("张三");
  11. name1->setText("李四");
  12. age0->setText("28");
  13. age1->setText("26");
  14. code0->setText("1000");
  15. code1->setText("1001");
  16. //为指定的某行或某列设置item
  17. ui->tableWidget->setItem(0, 0, name0);
  18. ui->tableWidget->setItem(1, 0, name1);
  19. ui->tableWidget->setItem(0, 1, age0);
  20. ui->tableWidget->setItem(1, 1, age1);
  21. ui->tableWidget->setItem(0, 2, code0);
  22. ui->tableWidget->setItem(1, 2, code1);

 3,插入数据

  1. //在末尾插入数据
  2. int curRow = ui->tableWidget->rowCount();
  3. ui->tableWidget->insertRow(curRow);
  4. QTableWidgetItem* name2 = new QTableWidgetItem;
  5. QTableWidgetItem* age2 = new QTableWidgetItem;
  6. QTableWidgetItem* code2 = new QTableWidgetItem;
  7. name2->setText("王五");
  8. age2->setText("19");
  9. code2->setText("1002");
  10. ui->tableWidget->setItem(curRow, 0, name2);
  11. ui->tableWidget->setItem(curRow, 1, age2);
  12. ui->tableWidget->setItem(curRow, 2, code2);

 

4,遍历数据

  1. //遍历数据
  2. QTableWidgetItem* item;
  3. QString str;
  4. for(int i = 0; i < ui->tableWidget->rowCount(); i++)
  5. {
  6. for(int j = 0; j < ui->tableWidget->columnCount(); j++)
  7. {
  8. item = ui->tableWidget->item(i, j);
  9. str = str + item->text() + " ";
  10. }
  11. }
  12. qDebug()<<"str = "<<str;

5,选中

(1)判断选中QTableWidgetItem行

  1. QList<QTableWidgetItem *> selectedItems = ui->tableWidget->selectedItems();
  2. //tableWidget->selectedItems();
  3. if (!selectedItems.isEmpty())
  4. {
  5. // 至少有一个项被选中
  6. //可以进行相应的处理
  7. qDebug()<<"aaaaaaaa";
  8. }
  9. else
  10. {
  11. // 没有任何项被选中
  12. qDebug()<<"bbbbbbbbbbbbbb";
  13. }

 (2)主动选中QTableWidgetItem

  1. #include <QTableWidget>
  2. #include <QTableWidgetItem>
  3. // 假设你已经有一个QTableWidget对象叫做tableWidget
  4. // 添加一些行和列
  5. tableWidget->setRowCount(5);
  6. tableWidget->setColumnCount(3);
  7. // 创建一些项
  8. QTableWidgetItem *item1 = new QTableWidgetItem("Item 1");
  9. QTableWidgetItem *item2 = new QTableWidgetItem("Item 2");
  10. QTableWidgetItem *item3 = new QTableWidgetItem("Item 3");
  11. QTableWidgetItem *item4 = new QTableWidgetItem("Item 4");
  12. QTableWidgetItem *item5 = new QTableWidgetItem("Item 5");
  13. // 设置这些项到表格中
  14. tableWidget->setItem(0, 0, item1);
  15. tableWidget->setItem(1, 1, item2);
  16. tableWidget->setItem(2, 2, item3);
  17. tableWidget->setItem(3, 0, item4);
  18. tableWidget->setItem(4, 1, item5);
  19. // 选中第二行第一列的项
  20. tableWidget->setCurrentItem(tableWidget->item(1, 0))
  21.      // 设置选中行
  22.      int rowToSelect = 1; // 要选中的行的索引
  23.      QTableWidgetItem* selectedItem = ui->tableWidget->item(rowToSelect, 0);
  24.      ui->tableWidget->setCurrentItem(selectedItem);
  25.      // 显示 QTableWidget
  26.      ui->tableWidget->show();
  27. 或者
  28.                                
  29.     // 设置选中行
  30.     int rowToSelect = 1; // 要选中的行的索引
  31.     QTableWidgetItem* selectedItem = tableWidget.item(rowToSelect, 0);
  32.     tableWidget.setCurrentItem(selectedItem);
  33.     // 显示 QTableWidget
  34.     tableWidget.show();

(3)检测选中QTableWidgetItem行

每当QTableWidgetItem的状态发生变化时,itemChanged信号就会被发射,然后连接的lambda函数会被调用,检查该项是否被选中,并输出相关信息。确保你的QTableWidget的选择行为不是NoSelection或SingleSelection,否则即使项被选中也不会触发itemChanged信号。

  1. #include <QTableWidget>
  2. #include <QTableWidgetItem>
  3. #include <QHeaderView>
  4. #include <QDebug>
  5. // 假设你有一个QTableWidget的实例叫做tableWidget
  6. // 连接信号和槽
  7. QObject::connect(tableWidget, &QTableWidget::itemChanged,
  8. [](QTableWidgetItem *item){if(item->isSelected()){qDebug() << "Item selected: " << item->text();}});
  9. // 初始化tableWidget的其他部分...
  10. // 确保你已经设置了tableWidget的列数,否则它不会生成列头
  11. tableWidget->setColumnCount(/* some number */);
  12. // 如果你想要在选中项变化时做出响应,确保你没有设置
  13. // QTableWidget::ItemSelectionMode 为 NoSelection 或者 SingleSelection
  14. tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

6,删除选中行

    int curRow = ui->tableWidget->currentRow();
    ui->tableWidget->removeRow(curRow);

7,单元格发生切换时,发射两个信号

  1. //currentRow, currentColumn 当前点击的单元格
  2. //previousRow, previousColumn 先前具有焦点的单元格
  3. void QTableWidget::currentCellChanged(int currentRow, int currentColumn, int previousRow,int previousColumn)
  4. //current 当前点击的单元格
  5. //previous 先前具有焦点的单元格
  6. void QTableWidget::currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)

8,设置每一行最后一个单元格不留空格

    ui->tableWidget->horizontalHeader()->setStretchLastSection(true);

9,设置自适应大小

ui->tableWidget->horizontalHeader()>setSectionResizeMode(QHeaderView::ResizeToContents);

10,设置等宽

ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

11,设置

  1. 1)获取行数和列数
  2. int QTableWidget::rowCount() const int QTableWidget::columnCount() const
  3. 2)获取当前单元格的行号和列号
  4. int QTableWidget::currentRow() const int QTableWidget::currentColumn() const
  5. 3)设置单元格内容是否可编辑
  6. void setEditTriggers(EditTriggers triggers)  
  7. 4)设置选择方式是单元格选择还是行选择
  8. void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)
  9. QAbstractItemView::SelectItems      //单元格选择模式
  10. QAbstractItemView::SelectRows      //行选择模式
  11. QAbstractItemView::SelectColumns //列选择模式    

all example

  1. //判断是否选择了文件
  2. if(!textfile.isNull())
  3. {
  4. QFile file(textfile);
  5. //当文件无法进行读操作的时候,将弹出信息框
  6. if(!file.open(QFile::ReadOnly|QFile::Text))
  7. {
  8. QMessageBox::warning(this,tr("Error"),tr("read file error:&1").arg(file.errorString()));
  9. return;
  10. }
  11. else
  12. {
  13. QString line;
  14. QTextStream in(&file); //用文件构造流
  15. line = in.readLine();//读取一行放到字符串里
  16. while(!line.isNull())//字符串有内容
  17. {
  18. // qDebug() << line.section('#', 1, 1);
  19. // qDebug() << line.section('#', 2, 2);
  20. // qDebug() << line.section('#', 3, 3);
  21. int RowCount = ui->tableWidget->rowCount();
  22. ui->tableWidget->insertRow(RowCount); //增加一行
  23. ui->tableWidget->setItem(iRowCount, 0, new QTableWidgetItem( line.section('#', 1, 1) )); // 1 第二列
  24. ui->tableWidget->setItem(iRowCount, 1, new QTableWidgetItem( line.section('#', 2, 2) )); // 1 第二列
  25. ui->tableWidget->setItem(iRowCount, 2, new QTableWidgetItem( line.section('#', 3, 3) ));
  26. if(line.section('#', 1, 1)!="")
  27. {
  28. ui->tableWidget->setItem(iRowCount, 3, new QTableWidgetItem( "500ms" ));
  29. }
  30. list_text.append( line.section('#', 4, 4) );
  31. iRowCount++;
  32. line=in.readLine();//循环读取下行
  33. }
  34. // QTableWidgetItem* item;
  35. //item = ui->tableWidget->item(1, 1);
  36. // 设置选中行
  37. int rowToSelect = 0; // 要选中的行的索引
  38. QTableWidgetItem* selectedItem = ui->tableWidget->item(rowToSelect, 0);
  39. //把选中的变为蓝色
  40. ui->tableWidget->setCurrentItem(selectedItem);
  41. // 显示 QTableWidget
  42. // ui->tableWidget->show();
  43. //jian cha jian ce
  44. QList<QTableWidgetItem *> selectedItems = ui->tableWidget->selectedItems();
  45. if (!selectedItems.isEmpty())
  46. {
  47. // 至少有一个项被选中
  48. //可以进行相应的处理
  49. qDebug()<<"aaaaaaaa";
  50. QTableWidgetItem* selectedItem = ui->tableWidget->item(2, 0);
  51. ui->tableWidget->setCurrentItem(selectedItem);
  52. ui->lineEdit->setText(list_text.at(2));
  53. //弹出界面设置参数
  54. // 设置数字对话框的标题和提示信息
  55. QString windowTitle = "数字参数设置";
  56. QString label = "请输入一个数字参数:";
  57. // 弹出数字输入对话框
  58. bool ok;
  59. int value = QInputDialog::getInt(nullptr, windowTitle, label, 0, 0, 100, 1, &ok);
  60. // 如果用户点击了OK,则处理输入的数字
  61. if (ok)
  62. {
  63. qDebug() << "用户输入的数字是:" << value;
  64. // 在这里处理value,例如保存到设置或者使用数字参数执行某些操作
  65. }
  66. }
  67. else
  68. {
  69. // 没有任何项被选中
  70. qDebug()<<"bbbbbbbbbbbbbb";
  71. }
  72. }
  73. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/861880
推荐阅读
相关标签
  

闽ICP备14008679号