工作笔记(02/2012)

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);
}

 

Tagged , , . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="">