1.设置widget背景图片
使用QPalette属性,相关的方法:
setAutoFillBackground(true); palette.setBrush(...); setPalette(palette); setMask(pixmap.mask());
2.去掉widget的标题栏方法
setWindowFlags(Qt::FramelessWindowHint);
3.Qt接口实现本地文件的列表显示与删除拷贝实现
QFileInfoList filelist = dir.entryInfoList(string, QDir::Files, QDir::Name); //获取文件列表 QFileInfoList QDir::entryInfoList ( const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort ) const bool QDir::remove(const QString &filename); //删除文件 bool QFile::copy ( const QString & fileName, const QString & newName ) [static] //拷贝文件
4.列表视图中实现单元格的合并与表格线的隐藏
QTableView::setSpan(int row, int column, int rowspan, int columnspan); QTableView::setShowGrid(bool);
5.QTableWidget方法
void setSelectionBehavior ( QAbstractItemView::SelectRows);//整行选中 void setSelectionMode ( QAbstractItemView::SingleSelection);//单选 void setEditTriggers ( QAbstractItemView::NoEditTriggers );//禁止编辑 tablewidget->verticalHeader()->setHiddern(true); //自动行名隐藏 void QTableWidgetItem::setFlags(Qt::ItemIsSelectable); //单元格变灰
6.Qt应用的开发
void setupUI(); //绘制显示界面 int initUI(); //加载界面显示的数据 void connects(); //所有的信号与槽的连接
7.QThread线程的使用
- QThread::run()函数对线程的作用相当于main函数对于应用程序的作用,它是线程的入口,run()的开始和结束意味着线程的开始与结束。
- QThread::start()函数负责启动线程
- QWidget及其子派生类不能在次线程中创建或使用
- QThread对象本身所在的线程和它管理的线程不是同一个线程
- 在QThread派生类中定义的槽是在主线程而不是次线程中执行的,除非使用moveToThread()函数指定;只有run函数内的代码才是在次线程中执行的代码
- QThread应该被看做是OS线程的接口或控制点,而不应该包含需要在新线程中运行的代码
推荐的使用方法:把线程的代码放到一个QObject的子类中,然后将该子类的对象moveToThread到新线程中。
8.Qt/Embedded Linux
- 不使用X窗口系统,实现自己的窗口系统:QWS
- 要运行Qt/Embedd Linux程序,必须首先创建一个进程作为GUI服务器,负责为客户端分配屏幕区域,生成鼠标和键盘事件;任何程序都可以成为服务器,通过在命令行指定-qws参数,或者将QApplication::GuiServer作为QApplicaiton构造函数的第三个参数
- 各种各样的环境变量会影响到Qt/Embedd Linux程序,最重要的是QWS_MOUSE_PROTO 指定鼠标设备 QWS_KEYBOARD 指定键盘类型
9.单例模式
[定义]一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
[要点]
- 只能有一个实例
- 必须自行创建这个实例
- 必须自行向整个系统提供这个实例
[模板]
class CSingleton:
{
public:
static CSingleton *GetInstance()
{
if(m_pInstance == NULL)
{
m_pInstance = new CSingleton();
return m_pInstance;
}
}
private:
CSingleton(){};
static CSingleton *m_pInstance;
}
10.m_pSubWiget->move(mapToGlobal(QPoint(0,0))); //使界面位置一直保持不变
//把当前的逻辑坐标(0,0)映射到屏幕物理坐标上
11.随机数的生成 <cstdlib>
int srand(seed); //指定种子,默认seed=1 srand(time(0)); //每次运行指定不一样的seed,从而生成不一样的随机数 int rand(); //生成[seed, RANDOM_MAX]之间的随机数 rand()%(b-a) + a ;//生成[a,b)之间的随机数 rand() /double(RANDOM_MAX);//生成0-1之间的伪随机浮点数
11.电路学习
- 《模拟电路基础》清华大学,林红
- 《模拟电路基础实验教程》 清华大学,刘志军
12.使用focusNextChild()/focusPreviousChild()函数控制widget中焦点的转移
13.图形widget的绘制,示例:
void CWaveCurveWidget::paintEvent(QPaintEvent *)
{
QPainter paint(this);
paint.setBrush(Qt::black);//设置绘制背景的笔的颜色
paint.setViewport(0,0,this->width(),this->height());//设置视口,物理坐标
paint.setWindow(QRect(0,-this->height()/2,this->width(),this->height()));//设置窗口,逻辑坐标
paint.drawRect(0,-this->height()/2,this->width(),this->height());//绘制背景
drawGrid(paint);
drawCurves(paint);
}