设置文字和设置按钮或者其他控件都是可以的
QTableView设置表格左上的文字主要方法是继承后通过绘制在左上角
首先写一个类继承QTableView
class GCornerTableView : public QTableView
GCornerTableView.h
#ifndef GCORNERTABLEVIEW_H
#define GCORNERTABLEVIEW_H
#include <QPainter>
#include <QTableView>
#include <QAbstractButton>
class GCornerTableView : public QTableView
{
Q_OBJECT
public:
explicit GCornerTableView(QWidget *parent = 0);
void setCornerButtonText(const QString &text);
void setCornerTextAlignment(Qt::Alignment align);
private:
QString m_cornerButtonText;
Q_DECLARE_PRIVATE(QTableView)
};
class GTableCornerButton : public QAbstractButton
{
Q_OBJECT
public:
GTableCornerButton(QWidget *parent = 0)
: QAbstractButton(parent)
{
}
void paintEvent(QPaintEvent*)
{
QStyleOptionHeader opt;
opt.initFrom(this);
QStyle::State state = QStyle::State_None | QStyle::State_Raised;
if (isEnabled())
{
state |= QStyle::State_Enabled;
}
if (isActiveWindow())
{
state |= QStyle::State_Active;
}
if (isDown())
{
state |= QStyle::State_Sunken;
}
opt.state = state;
opt.text = m_text;
opt.rect = rect();
opt.position = QStyleOptionHeader::OnlyOneSection;
opt.textAlignment = m_align;
QPainter painter(this);
style()->drawControl(QStyle::CE_Header, &opt, &painter, this);
}
void setText(const QString &text) {m_text = text;}
void setAlignment(Qt::Alignment align) {m_align = align;}
private:
QString m_text;
Qt::Alignment m_align;
};
#endif // GCORNERTABLEVIEW_H
GCornerTableView.cpp
#include "gcornertableview.h"
#include <QHeaderView>
#include <QFontMetrics>
#include <private/qtableview_p.h>
GCornerTableView::GCornerTableView(QWidget *parent)
: QTableView(parent)
{
Q_D(QTableView);
disconnect(d->cornerWidget, SIGNAL(clicked()), this, SLOT(selectAll()));
delete d->cornerWidget;
GTableCornerButton *btn = new GTableCornerButton(this);
btn->setAlignment(Qt::AlignCenter);
d->cornerWidget = btn;
d->cornerWidget->setFocusPolicy(Qt::NoFocus);
d->cornerWidget->setFont(d->verticalHeader->font());//cornerbutton used for verticalheader
// QObject::connect(d->cornerWidget, SIGNAL(clicked()), this, SLOT(selectAll()));
}
void GCornerTableView::setCornerButtonText(const QString &text)
{
Q_D(QTableView);
m_cornerButtonText = text;
GTableCornerButton *btn = static_cast<GTableCornerButton *>(d->cornerWidget);
Q_ASSERT(btn);
btn->setText(m_cornerButtonText);
QFontMetrics metrics(btn->font());
int width = metrics.width(m_cornerButtonText);
int height = metrics.height();
d->verticalHeader->setMinimumWidth(width + metrics.maxWidth());
d->verticalHeader->setMinimumHeight(height + metrics.maxWidth());
d->verticalHeader->setDefaultAlignment(Qt::AlignCenter);
}
void GCornerTableView::setCornerTextAlignment(Qt::Alignment align)
{
Q_D(QTableView);
GTableCornerButton *btn = static_cast<GTableCornerButton *>(d->cornerWidget);
Q_ASSERT(btn);
btn->setAlignment(align);
btn->repaint();
}
然后是在mainwindow中使用测试
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "GCornerTableView.h"
#include <QVBoxLayout>
#include <QStandardItemModel>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
GCornerTableView *pCornerTableView = new GCornerTableView(this);
QStandardItemModel *pModel = new QStandardItemModel(10, 10, pCornerTableView);
pCornerTableView->setModel(pModel);
pCornerTableView->setCornerButtonText(QStringLiteral("测试"));
QVBoxLayout* pLayout = new QVBoxLayout();
pLayout->addWidget(pCornerTableView);
ui->centralWidget->setLayout(pLayout);
}
MainWindow::~MainWindow()
{
delete ui;
}
1. mysql实现读写分离的方式mysql 实现读写分离的方式有以下几种:程序修改mysql操作,直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配,需要开发人员协助。amoeba,直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案,自己分配账户,和后端数据库权限管理独立,权限处理不够灵活。mysql-proxy,直接实现读写分离和负载均衡,不用修改代码,master和slave用一样的帐号,效率低mycat中间件proxysql中间件(推荐使用)
前言 负责数据能够从发送端传输到接收端。一.五元组 1.1 概念 端口号:标识另一台主机上的一个进程。 端口号如何找到进程?内核实现通过哈希算法,端口号对应进程PID。 在TCP/IP协议中,用"源IP","目的IP","源端口号","目的端口号","协议号",这五元组来标识一个通信。 源IP:发送数据的主机IP 目的IP:最终接收数据主机IP 源端口号:发...
利用Visual C++在windows环境下设计异步串行通信程序可以使用不同的方法。一种方法可以使用windows系统提供的串行口API函数;另一种方法可以直接使用Microsoft公司提供的ActiveX控件MSCOMM.OCX。利用MSCOMM.OCX控件进行串行口程序设计相对比较简单,只要对该控件的属性、事件和方法进行设置和操作,就能完成简单的串行通信功能。而直接使用windows系
Tomcat 或者 Nginx 配置 Https现在的网站慢慢都流行使用https访问,比较安全,使用https只要一个证书即可,ip地址、域名地址都不需要改变,添加https证书支持,访问地址会默认添加上面https;如何为nginx配置https(免费证书) tomcat https配置方法(免费证书)
用Java操作文件时,对一个文件,难免会构造多个流,那么怎样合理的关闭多个流呢?其实只需要关闭最后打开的一个流就行了。参考:http://www.javapractices.com/topic/TopicAction.do?Id=8但如果对应不同的文件,那么则需要都关闭。...
蓝牙是一种被广泛应用的无线通信标准,工作在2.4GHz-2.4835GHz频段范围,所用的调制方式有三种:GFSK,pi/4-DQPSK和8DPSK。今天就来介绍下pi/4-DQPSK调制。BPSK 首先从最简单的BPSK讲起,BPSK就是二进制相移键控只有两种相位状态,并且两种相位状态差180°。其星座图如下: BPSK信号只有I路,若将Q路也发送额外信息则频谱效率可以加倍,于是就有了QP
1. 空指针、NULL指针、零指针1.1什么是空指针常量0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一
Podfile文件target中添加一下代码并pod update 、、或者手动下载拖出代码模块。例如,先通过用户名密码取得 Token 然后通过 Token 取得用户信息,你不需要去管理观察者的生命周期,这样你就有更多精力去关注业务逻辑。回调也变得十分简单,错误和返回结果分离,逻辑更加清晰。例如,需要将两个网络请求合并成一个,通过Rx使得代码逻辑清晰可见。这样处理代码更加简洁。
文章目录1,常见版本管理工具介绍 及 版本工具作用2,git、GitHub和SVN比较3,本地git基本使用命令4,使用git操作GitHub5,配置win10当前用户对GitHub所有项目有权限(git push不必输入密码)6,配置Linux当前用户对GitHub指定项目有权限(git push不必输入密码)7,git分支管理(创建&合并分支)8,git stash (bug分支) 9,多人协作开发10,vim .gitignore (指定那些文件不需要git管理)11,
//设置日期默认值为当天 var nowDate=new Date(); var nowMonth=nowDate.getMonth()+1; //月份和日期若为小于10的数要做处理 var nowDay=nowDate.getDate(); if((nowDat...
计算机维修第一次实验报告目录实验内容实验流程1.使用VMware创建一个没有系统的虚拟机2.为虚拟机设置u盘启动路径3.制作U盘启动盘①失败案例①成功案例4.给虚拟机安装centos7.8实验内容使用VMware软件开一个无系统的虚拟机后用u盘安装centos7.8系统一台电脑 一个u盘 在电脑上下载并安装 VMware 在centos官网下载centos7.8的镜像文件 安装一款启动盘制作软件1.从VMware官网下载最新版本VMware并安装选择Workstation Pro即可跳转至版本选
微信自动跳转外部浏览器下载app/打开指定页面源码源码说明:适用安卓和苹果系统,支持任何网页链接。并且无论链接是否已经被微信拦截,均可实现微信内自动跳转浏览器打开。生成的跳转链接具有极佳的防拦截效果。使用方法:以下以app的下载链接为例,如果是网页直接复制链接即可。1. 打开你的app点击分享按钮,在分享弹框中点击复制链接或通过分享到微信QQ等获取分享链接。如果是朋友分...