亚洲色图 中文字幕 Qt中 QTableWidget用法追思
发布日期:2024-11-03 13:00 点击次数:119转自--》亚洲色图 中文字幕
_2801495241_0_2.html
在Qt的斥地流程中,频频会用到表单(QTableWidget)这个控件,网上的贵寓不少,然而都是最基本的,有一些比拟频频遭受的问题也说得不太清亮。是以,今天就在这里追思一下!
以下为个东谈主模拟Windows资源料理器的一个表单
一、配置表单样式
table_widget->setColumnCount(4); //配置列数
table_widget->horizontalHeader()->setDefaultSectionSize(150); table_widget->horizontalHeader()->setClickable(false); //配置表头不可点击(默许点击后进行排序)
//配置表头本色 QStringList header; header<<tr("name")<<tr("last modify time")<<tr("type")<<tr("size"); table_widget->setHorizontalHeaderLabels(header);
//配置表头字体加粗
QFont font = this->horizontalHeader()->font(); font.setBold(true); table_widget->horizontalHeader()->setFont(font);
table_widget->horizontalHeader()->setStretchLastSection(true); //配置充满表宽度 table_widget->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); table_widget->verticalHeader()->setDefaultSectionSize(10); //配置行距 table_widget->setFrameShape(QFrame::NoFrame); //配置无垠框 table_widget->setShowGrid(false); //配置不败露格子线 table_widget->verticalHeader()->setVisible(false); //配置垂直头不可见 table_widget->setSelectionMode(QAbstractItemView::ExtendedSelection); //可多选(Ctrl、Shift、 Ctrl+A都不错) table_widget->setSelectionBehavior(QAbstractItemView::SelectRows); //配置袭取行径时每次袭取一瞥 table_widget->setEditTriggers(QAbstractItemView::NoEditTriggers); //配置不可剪辑 table_widget->horizontalHeader()->resizeSection(0,150); //配置表头第一列的宽度为150 table_widget->horizontalHeader()->setFixedHeight(25); //配置表头的高度
table_widget->setStyleSheet("selection-background-color:lightblue;"); //配置选中背得志
table_widget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:skyblue;}"); //配置表头背得志
//配置水平、垂直升沉条样式
table_widget->horizontalScrollBar()->setStyleSheet("QScrollBar{background:transparent; height:10px;}" "QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}" "QScrollBar::handle:hover{background:gray;}" "QScrollBar::sub-line{background:transparent;}" "QScrollBar::add-line{background:transparent;}");
table_widget->verticalScrollBar()->setStyleSheet("QScrollBar{background:transparent; width: 10px;}" "QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}" "QScrollBar::handle:hover{background:gray;}" "QScrollBar::sub-line{background:transparent;}" "QScrollBar::add-line{background:transparent;}");
好了,样式配置完成,为止如下所示:
问题一:鼠标点击的选项会出现虚框,在Qt官网找到一篇博客成心先容的,凯旋上代码!
(1)已毕如下一个类
#include "no_focus_delegate.h"
void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const { QStyleOptionViewItem itemOption(option); if (itemOption.state & QStyle::State_HasFocus) { itemOption.state = itemOption.state ^ QStyle::State_HasFocus; }
QStyledItemDelegate::paint(painter, itemOption, index); }
(2)表格构造中添加如下代码
table_widget->setItemDelegate(new NoFocusDelegate());
OK,虚线边框去除
问题二:当表格只消一瞥的期间,则表头会出现塌陷问题
摸索了很永劫辰,才得以处置:
//点击表时不合表头行光亮(获取焦点) table_widget->horizontalHeader()->setHighlightSections(false);
二、操作表单(添加、删除行等)
(1)动态插入行
int row_count = table_widget->rowCount(); //获取表单行数 table_widget->insertRow(row_count); //插入新行
QTableWidgetItem *item = new QTableWidgetItem(); QTableWidgetItem *item1 = new QTableWidgetItem(); QTableWidgetItem *item2 = new QTableWidgetItem(); QTableWidgetItem *item3 = new QTableWidgetItem();
//配置对应的图标、文献称呼、临了更新时辰、对应的类型、文献大小 item->setIcon(icon); //icon为调用系统的图标,以后缀来差别 item->setText(name); item1->setText(last_modify_time); item2->setText(type); //type为调用系统的类型,以后缀来差别
item3->setText(size);
table_widget->setItem(row_count, 0, item); table_widget->setItem(row_count, 1, item1); table_widget->setItem(row_count, 2, item2); table_widget->setItem(row_count, 3, item3);
//配置样式为灰色 QColor color("gray"); item1->setTextColor(color); item2->setTextColor(color); item3->setTextColor(color);
(2)在指定位置插入行
其实跟(1)一样,(1)的前提是获取到表格行数
table_widget->insertRow(row); //插入新行 row为插入的位置
三、单击表头触发的事件
(1)连络表头的信号和槽
connect(horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(onHeaderClicked(int)));
(2)已毕槽函数
void TableWidget::onHeaderClicked(int column) { //column为所点击的表头的某列 }
四、大开某行进行剪辑
既然模拟Window那么就师法的像少量,Windows不错修更称呼,那么Qt也势必不错已毕
//获取面前节点并获取剪辑称呼 QTableWidgetItem *item = table_widget->item(edit_row, 0); //edit_row为念念要剪辑的行号 table_widget->setCurrentCell(edit_row, 0); table_widget->openPersistentEditor(item); //大开剪辑项 table_widget->editItem(item);
//关闭剪辑项
table_widget->closePersistentEditor(item);
OK,重定名完成,!
五、右键菜单
(1)创建菜单、菜单项
void TableWidget::createActions() { //创建菜单项 pop_menu = new QMenu(); action_name = new QAction(this); action_size = new QAction(this); action_type = new QAction(this); action_date = new QAction(this);
action_open = new QAction(this); action_download = new QAction(this); action_flush = new QAction(this);
action_delete = new QAction(this); action_rename = new QAction(this); action_create_folder = new QAction(this);
action_open->setText(QString("大开"));
action_download->setText(QString("下载"));
action_flush->setText(QString("刷新"));
action_delete->setText(QString("删除"));
action_rename->setText(QString("重定名"));
action_create_folder->setText(QString("新建文献夹"));
action_name->setText(QString("称呼")); action_size->setText(QString("大小")); action_type->setText(QString("技俩类型")); action_date->setText(QString("修明天历"));
//配置快捷键
action_flush->setShortcut(QKeySequence::Refresh);
//配置文献夹图标 action_create_folder->setIcon(icon);
QObject::connect(action_create_folder, SIGNAL(triggered()), this, SLOT(createFolder())); }
(2)重新已毕contextMenuEvent
void TableWidget::contextMenuEvent(QContextMenuEvent *event) { pop_menu->clear(); //断根原有菜单 QPoint point = event->pos(); //得到窗口坐标
QTableWidgetItem *item = this->itemAt(point);
if(item != NULL)
{
pop_menu->addAction(action_download); pop_menu->addAction(action_flush); pop_menu->addSeparator(); pop_menu->addAction(action_delete); pop_menu->addAction(action_rename); pop_menu->addSeparator(); pop_menu->addAction(action_create_folder);
sort_style = pop_menu->addMenu("排序"); sort_style->addAction(action_name); sort_style->addAction(action_size); sort_style->addAction(action_type); sort_style->addAction(action_date);
//菜单出现的位置为面前鼠标的位置 pop_menu->exec(QCursor::pos()); event->accept();
}
}
av偶像
OK,大事罢了!
六、信号
void cellActivated(int row, int column) void cellChanged(int row, int column) void cellClicked(int row, int column) void cellDoubleClicked(int row, int column) void cellEntered(int row, int column) void cellPressed(int row, int column) void itemActivated(QTableWidgetItem *item) void itemChanged(QTableWidgetItem *item) void itemClicked(QTableWidgetItem *item) void itemDoubleClicked(QTableWidgetItem *item) void itemEntered(QTableWidgetItem *item) void itemPressed(QTableWidgetItem *item) void itemSelectionChanged()
void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
到这里,还有少量留传问题,对于界面的文献(文献夹)图标和类型若何败露的?又若何区别什么期间败露什么样的图标呢?要是图标和类型写死的话必不可行,因为不同后缀的文献至少也有100种以上吧!这里请示一下,不错调用系统API获取面前系统的指定文献(通事后缀差别)对应的类型以及图标。。。
这些都是在构兵Qt以往来顾的一些小教化,但愿对公共有效!
QTableWidget是QT步调中常用的败露数据表格的空间,很雷同于VC、C#中的DataGrid。说到QTableWidget,就必须讲一下它跟QTabelView的区别了。QTableWidget是QTableView的子类,主要的区别是QTableView不错使用自界说的数据模子来败露本色(也便是先要通过setModel来绑定数据源),而QTableWidget则只可使用模范的数据模子,而况其单位格数据是QTableWidgetItem的对象来已毕的(也便是不需要数据源,将一一单位格内的信息填好即可)。这主要体当今QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数形成了特有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来示意表格中的一个单位格,正个表格都需要用一一单位格构建起来。 view plain #include <QtGui/QApplication> #include <QTableWidget> #include <QTableWidgetItem> int main(int argc, char *argv[]) { QApplication a(argc, argv); QTableWidget *tableWidget = new QTableWidget(10,5); // 构造了一个QTableWidget的对象,而况配置为10行,5列 // 也可用底下的步调构造QTableWidget对象 // QTableWidget *tableWidget = new QTableWidget; // tableWidget->setRowCount(10); //配置行数为10 // tableWidget->setColumnCount(5); //配置列数为5 tableWidget->setWindowTitle("QTableWidget & Item"); tableWidget->resize(350, 200); //配置表格 QStringList header; header<<"Month"<<"Description"; tableWidget->setHorizontalHeaderLabels(header); tableWidget->setItem(0,0,new QTableWidgetItem("Jan")); tableWidget->setItem(1,0,new QTableWidgetItem("Feb")); tableWidget->setItem(2,0,new QTableWidgetItem("Mar")); tableWidget->setItem(0,1,new QTableWidgetItem(QIcon("images/IED.png"), "Jan's month")); tableWidget->setItem(1,1,new QTableWidgetItem(QIcon("images/IED.png"), "Feb's month")); tableWidget->setItem(2,1,new QTableWidgetItem(QIcon("images/IED.png"), "Mar's month")); tableWidget->show(); return a.exec(); } 一. 对QTableWidget自己的为止已毕 1. 将表格变为辞谢剪辑 在默许情况下,表格里的字符是不错蜕变的,比如双击一个单位格,就不错修改正本的本色,要是念念辞谢用户的这种操作,让这个表格对用户只读,不错这样: tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger排列中的一个,都是触发修改单位格本色的条目: QAbstractItemView.NoEditTriggers 0 No editing possible. 不成对表格本色进行修改 QAbstractItemView.CurrentChanged 1 Editing start whenever current item changes.任何期间都能对单位格修改 QAbstractItemView.DoubleClicked 2 Editing starts when an item is double clicked.双击单位格 QAbstractItemView.SelectedClicked 4 Editing starts when clicking on an already selected item.单击已选中的本色 QAbstractItemView.EditKeyPressed 8 Editing starts when the platform edit key has been pressed over an item. QAbstractItemView.AnyKeyPressed 16 Editing starts when any key is pressed over an item.按下轻易键就能修改 QAbstractItemView.AllEditTriggers 31 Editing starts for all above actions.以上条目全包括 2. 配置表格为整行袭取 tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行选中的阵势 QAbstractItemView.SelectionBehavior排列还有如下类型 Constant Value Description QAbstractItemView.SelectItems 0 Selecting single items.选中单个单位格 QAbstractItemView.SelectRows 1 Selecting only rows.选中一瞥 QAbstractItemView.SelectColumns 2 Selecting only columns.选中一列 3.单个选中庸多个选中的配置: tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //配置为不错选中多个目的 该函数的参数还不错是: QAbstractItemView.NoSelection 不成袭取 QAbstractItemView.SingleSelection 选中单个目的 QAbstractItemView.MultiSelection 选中多个目的 QAbstractItemView.ExtendedSelection QAbstractItemView.ContiguousSelection 的区别不彰着,主邀功能是闲居情况下是单选,但按下Ctrl或Shift键后,不错多选 4. 表格表头的败露与遮拦 对于水平或垂直步调的表头,不错用以下阵势进行 遮拦/败露 的配置: view plain tableWidget->verticalHeader()->setVisible(false); //遮拦列表头 tableWidget->horizontalHeader()->setVisible(false); //遮拦行表头 小心:需要 #include <QHeaderView> 5. 对表头笔墨的字体、颜料进行配置 view plain QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获取水平标的表头的Item对象 columnHeaderItem0->setFont(QFont("Helvetica")); //配置字体 columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //配置单位格配景颜料 columnHeaderItem0->setTextColor(QColor(200,111,30)); //配置笔墨颜料 小心:需要 #include <QHeaderView> 6. 在单位格里加入控件: QTableWidget不仅允许把笔墨加到单位格,还允许把控件也放到单位格中。比如,把一个下拉框加入单位格,不错这样作念: view plain QComboBox *comBox = new QComboBox(); comBox->addItem("Y"); comBox->addItem("N"); tableWidget->setCellWidget(0,2,comBox); 二. 对单位格的进行配置 1. 单位格配置字体颜料和配景颜料 及字体字符 view plain QTableWidgetItem *item = new QTableWidgetItem("Apple"); item->setBackgroundColor(QColor(0,60,10)); item->setTextColor(QColor(200,111,100)); item->setFont(QFont("Helvetica")); tableWidget->setItem(0,3,item); 另:要是需要对通盘的单位格都使用这种字体,则不错使用 tableWidget->setFont(QFont("Helvetica")); 2. 配置单位格内笔墨的对皆阵势 这个比拟绵薄,使用newItem.setTextAlignment()函数即可,该函数的参数为单位格内的对皆阵势,和字符输入划定是自左相右照旧自右向左。 水平对皆阵势有: Constant Value Description Qt.AlignLeft 0x0001 Aligns with the left edge. Qt.AlignRight 0x0002 Aligns with the right edge. Qt.AlignHCenter 0x0004 Centers horizontally in the available space. Qt.AlignJustify 0x0008 Justifies the text in the available space. 垂直对皆阵势: Constant Value Description Qt.AlignTop 0x0020 Aligns with the top. Qt.AlignBottom 0x0040 Aligns with the bottom. Qt.AlignVCenter 0x0080 Centers vertically in the available space. 要是两种都要配置,只消用 Qt.AlignHCenter | Qt.AlignVCenter 的阵势即可 3. 覆没单位格为止的已毕: tableWidget->setSpan(0, 0, 3, 1) # 其参数为: 要改变单位格的 1行数 2列数 要覆没的 3行数 4列数 4. 配置单位格的大小 领先亚洲色图 中文字幕,不错指定某个行八成列的大小 view plain tableWidget->setColumnWidth(3,200); tableWidget->setRowHeight(3,60); 还不错将行和列的大小设为与本色相匹配 view plain tableWidget->resizeColumnsToContents(); tableWidget->resizeRowsToContents(); 5. 获取单击单位格的本色 通过已毕 itemClicked (QTableWidgetItem *) 信号的槽函数,就不错获取鼠标单击到的单位格指针,进而获取其中的笔墨信息 connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this, SLOT( getItem(QTreeWidgetItem*,int)) ); //将itemClicked信号与函数getItem绑定