技术标签: qt
效果图:
代码:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
struct Param{
Param(int tIndex, int tX, int tY,int tAngle, int tMatch,int tScale)
: index(tIndex), x(tX),y(tY),angle(tAngle),match(tMatch),scale(tScale)
{}
int index = 10 ;
int x = 10;
int y =10;
int angle = 10;
int match =10;
int scale = 15;
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void InitData();
void InitTableWidget();
private slots:
void on_pushButton_nextPage_clicked();
void on_pushButton_prePage_clicked();
private:
QVector<Param> m_vector;
int m_label = 0 ;
int main_pages = 1; //主页页数
int rows_per_page = 8; //每页显示的行数
int column_counts = 5; //每页显示的列数
int total_pages = 1; //表格总页数
int cur_pages_index = 1 ; //当前所在页
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QScrollBar>
#include <QDebug>
#include <QLabel>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowFlag(Qt::FramelessWindowHint);
InitData();
InitTableWidget();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::InitData()
{
for(int i = 0 ; i < 35 ; i++)
{
Param single_item{i,i,i,i,i,i} ;
m_vector.append(single_item);
}
}
void MainWindow::InitTableWidget()
{
if(m_vector.isEmpty())
return;
int vector_size = m_vector.size();
int label_pages_count = 0 ; //标签页页数
if(m_vector.size()%3 == 0) //设置表格显示的标签数据总共有多少页
label_pages_count = m_vector.size()/3 ;
else
label_pages_count = m_vector.size()/3 + 1;
total_pages = main_pages + label_pages_count;
ui->tableWidget->horizontalHeader()->setVisible(false);
ui->tableWidget->verticalHeader()->setVisible(false);
ui->tableWidget->setRowCount(rows_per_page* total_pages); //设置显示的行数
ui->tableWidget->setColumnCount(column_counts); //设置每页的列数
ui->tableWidget->setShowGrid(false);
ui->tableWidget->setAlternatingRowColors(true); //设置间隔行颜色交替
ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
//显示主页数据 begin ==================================================
ui->tableWidget->setItem(0,2, new QTableWidgetItem("值"));
ui->tableWidget->setItem(0,3, new QTableWidgetItem("最大值"));
ui->tableWidget->setItem(0,4, new QTableWidgetItem("最小值"));
ui->tableWidget->setItem(2,0, new QTableWidgetItem("个数"));
ui->tableWidget->setItem(3,0, new QTableWidgetItem("X"));
ui->tableWidget->setItem(4,0, new QTableWidgetItem("Y"));
ui->tableWidget->setItem(5,0, new QTableWidgetItem("相似度"));
ui->tableWidget->setItem(6,0, new QTableWidgetItem("比率"));
ui->tableWidget->setItem(7,0, new QTableWidgetItem("角度"));
for(int i = 2; i < 5 ;i++)
{
ui->tableWidget->setItem(2,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).index)));
ui->tableWidget->setItem(3,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).x)));
ui->tableWidget->setItem(4,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).y)));
ui->tableWidget->setItem(5,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).match)));
ui->tableWidget->setItem(6,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).scale)));
ui->tableWidget->setItem(7,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).angle)));
}
//显示标签页数据 begin=========================================================
int index_row_begin_label_pages = main_pages*rows_per_page; //开始显示标签页时的row index;
for(int i = 0 ; i< m_vector.size() ;i++)
{
//每页标签页子页内容
int j = i%3; //i = 0,3,6,9,12,15... // j =0,1,2,3,...
int row_index = index_row_begin_label_pages + i/3*rows_per_page ;
if(j == 0) //新的一页标签页
{
ui->tableWidget->setItem(row_index+1,0, new QTableWidgetItem("个数"));
ui->tableWidget->setItem(row_index+2,0, new QTableWidgetItem("X"));
ui->tableWidget->setItem(row_index+3,0, new QTableWidgetItem("Y"));
ui->tableWidget->setItem(row_index+4,0, new QTableWidgetItem("相似度"));
ui->tableWidget->setItem(row_index+5,0, new QTableWidgetItem("比率"));
ui->tableWidget->setItem(row_index+6,0, new QTableWidgetItem("角度"));
}
//第j+1页标签页,即第main_pages + j+1页
ui->tableWidget->setItem(row_index+0,j+2, new QTableWidgetItem(QString::asprintf("标签%d",i)));
ui->tableWidget->setItem(row_index+1,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).index)));
ui->tableWidget->setItem(row_index+2,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).x)));
ui->tableWidget->setItem(row_index+3,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).y)));
ui->tableWidget->setItem(row_index+4,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).match)));
ui->tableWidget->setItem(row_index+5,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).scale)));
ui->tableWidget->setItem(row_index+6,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).angle)));
}
ui->tableWidget->scrollToTop();
ui->label_index_pages->setText(QString("%1/%2").arg(cur_pages_index).arg(total_pages));
qDebug()<<__FUNCTION__<<"ui->tableWidget->rowCount(): "<<ui->tableWidget->rowCount() << "ui->tableWidget total pages" << total_pages
<< "cur_pages_index: " << cur_pages_index;
}
void MainWindow::on_pushButton_nextPage_clicked()
{
// QTableView::verticalScrollBar()->setSliderPosition(); //设置当前滑动条的位置
// QTableView::verticalScrollBar()->maximum(); //滑动条能移动的最大位置
// QTableView::verticalScrollBar()->value(); //获得当前滑动条的位置
cur_pages_index++;
if(cur_pages_index > total_pages)
{
cur_pages_index = 1;
}
ui->tableWidget->verticalScrollBar()->setSliderPosition(cur_pages_index*rows_per_page -rows_per_page);
ui->label_index_pages->setText(QString("%1/%2").arg(cur_pages_index).arg(total_pages));
}
void MainWindow::on_pushButton_prePage_clicked()
{
// QTableView::verticalScrollBar()->setSliderPosition(); //设置当前滑动条的位置
// QTableView::verticalScrollBar()->maximum(); //滑动条能移动的最大位置
// QTableView::verticalScrollBar()->value(); //获得当前滑动条的位置
cur_pages_index--;
if(cur_pages_index <= 0)
{
cur_pages_index = total_pages;
}
ui->tableWidget->verticalScrollBar()->setSliderPosition(cur_pages_index*rows_per_page -rows_per_page);
ui->label_index_pages->setText(QString("%1/%2").arg(cur_pages_index).arg(total_pages));
}
mainwinodw.ui
导航的使命就在于自身的“名称”上面,它叫什么名字就是在告诉用户“沿着这条路能通往哪里”,所以导航的展示形式虽然多种多样,却大多逃不出文字的辅佐,这是因为它的本质就是产品对用户传达的一种指向性信息。因为所有用户都是从产品的首页开始进入产品的,所以任务路径全部都是从产品的首页开始延伸的,产品的首页就是全部导航的聚合处,也是产品内所有任务路径的开启之地。根据导航的特征不同,我们可以将导航分成三类——主导航、页面导航、特殊导航。app ui界面的导航设计免费模板到,专注UI素材的搜UI sooui据关.
青龙面板Bot注意本文适用于青龙所有版本。搭建青龙面板时,完全按照本博客的其他文章一步步搭建,是不会出现错误的。所以出现错误的话一定是没有完全按照本博客教程进行的搭建,请自己找出错误原因!欢迎入群交流:106511927作者公众号bot 介绍可以通俗理解为Bot是一个可以远程给面板发送命令,并收到反馈的机器人。开始首先还是老样子,SSH上服务器,输入命令docker exec -it QL ql bot 然后修改配置文件,如图配置参数配置bot.json 参数{
前隆金融jdk7jdk8线程池fixed1.2.....10blockqueue控制器单例多线程同步怎么复用常用linux命令Listset查多写少,查少写多hashset与hashtable数据结构设计模式spring设计模式工厂模式种类亚联业务交行信用卡数据库处理分区,分表设计模式http请求流程...
题目描述问题描述:任意给定两个字符串str1与str2, str1与str2中可以包含任意字符。你的任务是统计字符串str2在str1中出现的次数。如字符串str1为“asasasbbbasbas”,str2为“as”,则统计结果为5。注意如果字符串str1为“aaaaa”,字符串str2为“aaa”,则统计结果为3。输入与输出要求:输入两个长度不超过100的字符串,以换行符结束。输出统...
二叉查找树(BST) 特点:对任意节点而言,左子树(若存在)的值总是小于本身,而右子(若存在)的值总是大于本身。 查找:从根开始,小的往左找,大的往右找,不大不小的就是这个节点了; 插入:从根开始,小的往左,大的往右,直到叶子,就插入, 时间复杂度期望为Ο(logn); 删除:如果是叶子节点,直接删除;如果不是,则去找这个节点左子树的最大值,与之交换;如果交换后还不是叶子节点就继续找做字数
一个偶然的机会,认识了node-red。这种拖拽控件编写代码的方式给了我很深刻的印象。能够通过简单的拖拽实现mqtt,http,websocket,tcp的服务,作为基于网络的业务流程demon非常方便。最近用它实践了一把,给自己做了一个企业微信消息推送的流程,还是很方便的。Node-RED背景介绍• Node-Red是IBM公司开发的一个可视化的编程工具。它允许程序员通过组合各部件来编写应用程序。这些部件可以是硬件设备(如:Arduino板子)、Web API(如:WebSocket in和WebSo
利用Python解析excel并将其内容上传至数据库
与Ajax邂逅. 作者:ShellEx(全金属外壳) 上下文(此部分加密): ^*&$*UE*W&E*@()$*()@[email protected])($DWDWW. 环境: Windows 2k3 sp1 *FireFox 2.0
DECLARE @companyid TABLE ( [Id] [int] ); with cte as( select Id from [base].[Company] where Id=123 union all select a.Id from [base].[Company] a,cte b where a.ParentId=b.Id...
关于使用android模拟器访问本地服务器失败第一种:使用Googl自带的模拟器 用http://127.0.1.1访问失败描述:明明在浏览器中使用http://127.0.1.1可以访问Apache本地服务器,但是将http://127.0.1.1放在url中,编译构建就显示连接访问失败。原因:Googl自带的Android模拟器在本地开辟了内存,所以使用http://127.0.1.1是默认访问
本人博客原文英文原文: http://tools.android.com/tips/lint/suppressing-lint-warnings http://tools.android.com/recent/ignoringlintwarnings一、前言you can also ignore warnings using annotations (in Java f
在还没有编写过十分多代码的时候就应该注意代码编写的规范,以方便以后写大项目时的维护工作。本文来自 码农-嵌入式Linux 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/weiqifa0/article/details/51274935?utm_source=copy前言一个好的程序编写规范是编写高质量程序的保证。清晰、规范的源程序不仅仅是方便阅读,更重要的是...