最近好请你安静些 好吗,有QT场介绍吗

这个页面不在了广州各大热门qt场 有QT场介绍吗
本L刚过来广州几个月,也游荡在888,发觉越来越冷清了,兄弟们,不能沉啊,上个月在白云新市街看到一排JS出来街上走秀,好像有料,好久没爆发了,有金牌老司机QT场PM下吗
本L刚过来广州几个月,也游荡在888,发觉越来越冷清了,兄弟们,不能沉啊,上个月在白云新市街看到一排JS出来街上走秀,好像有料,好久没爆发了,有金牌老司机QT场PM下吗?感激
好安静,难道要没落了吗
好多消息不宜公开吧~~~~~~~~~~~!
岗贝路,自己掘
3# mozhaonu 可以PM下吗?感激
4# colacola2001 老司机,求带路,可以pm下吗?感激
三元里都有啊!
岗贝路,自己掘
热点热点新闻(女少先队的男友)
(щει"&&豆奶)
(隔壁老王)
第三方登录:用户名:ppffs
文章数:215
访问量:86359
注册日期:
阅读量:1297
阅读量:3317
阅读量:440551
阅读量:1127095
[匿名]51cto游客:
[匿名]东灵工作室:
[匿名]csucyb:
51CTO推荐博文
&1、QGridLayout
QGridLayout包含多个grid,它并没有要求其中的每个grid的size相同,通常情况下,每个grid的size是不同的。
对于成员函数addWidget(widget, fromRow, fromColumn, rowSpan, columnSpan, alignment):rowSpan表示新添加进来的widget在垂直方向上跨越或者占据多少个grid。
columnSpan表示新添加进来的widget在水平方向上跨越或者占据多少个grid。
2、line edit的input mask
对一个line edit设置了input mask属性后,也就限定了输入字符。一般情况下,需要填写的字符位置是空白的,但是,你可以让该空白以某个字符占位,你只需在指定input mask的字符末尾添加&*?&即可,把&?&换为你想用来占位的一个字符。
3、利用designer设计ui
总体上来说,先创建各个控件,然后设置layout相对来说好些。另外,grid layout对设置布局前的窗口布局依赖比较大,即如果设置grid layout前的布局不同,则生效后的差别可能较大。
4、QLabel的buddy属性
在qt中,只有QLabel实现了buddy机制。
只有你为QLabel设置了buddy后,文本中的字符&&&才能以下划线显示(这点与其他widget不同),并创建了对应的快捷键(当然,需要+Alt),然后可以利用快捷键迅速的把光标定位到该QLabel的buddy中,例如:
QLabel *what = new QLabel(&Find &What:&);
该实例对应快捷键Alt+w。
5、QMouseEvent中的坐标
QMouseEvent中保存了两个坐标,一个是全局坐标,当然另外一个是局部坐标。
全局坐标(globalPos())即是桌面屏幕坐标(screen coordinates),这个跟windows下的调用getCursorPos函数得到的结果一致。
局部坐标(pos())即是相对当前active widget的坐标,左上角坐标为(0, 0)。
补充一个公式:
this-&mapFromGlobal(this-&cursor().pos()) = event.pos()
6、鼠标跟踪
在qt中,鼠标跟踪对应函数mouseMoveEvent。但是,默认情况下他并不能如期象你想象的那样响应鼠标的移动。此时,你只需在合适的位置调用一下函数setMouseTracking(true)即可。
默认情况下,mouseMoveEvent响应你按下鼠标的某个键(拖动,但不局限于左键拖动)的鼠标移动。
7、鼠标左键拖动和左键点击的判断
鼠标左键点击很容易判断,一般就是在重写mousePressEvent函数,示例如下:
void XXXWidget::mousePressEvent(QMouseEvent *event)
&&& if(event-&button() == Qt:leftButton)
&&&&&&& // todo &
左键拖动的判断一般放在mouseMoveEvent函数中,但是你不能向上例一样来判断,因为该函数的event参数总是返回Qt::NoButton。你可以这样做:
void XXXWidget::mouseMoveEvent(QMouseEvent *event)
&&& if(event-&buttons() & Qt:leftButton)
&&&&&&& // todo &
8、窗口有一个子窗口,子窗口随着父窗口最小化而最小化的实现:
child = new QWidget(parent);
child-&setWindowFlags(Qt::Window);
但是,如果父子窗口都显示的话,此时销毁父窗口,子窗口依然显示;然后关闭子窗口,才算完全关闭了整个窗口。理想的做法是这样的:
child = new QWidget(parent);
child-&setWindowFlags(Qt::Window | Qt::SubWindow);
9、解决中文乱码问题
&&& //解决中文乱码问题
&&& QTextCodec::setCodecForTr(QTextCodec::codecForName(&GB2312&P));
&&& QTextCodec::setCodecForLocale(QTextCodec::codecForName(&GB2312&P));
&&& QTextCodec::setCodecForCStrings(QTextCodec::codecForName(&GB2312&P));
10、实现多窗体切换。
&&& 信号通讯方法(参数1事件响应对象,参数2响应事件,参数3本实例对象指针,参数4响应方法)
&&& connect(this-&ui-&butSumbie, SIGNAL(clicked()), this, SIGNAL(send1()));
&&& 信号通讯方法(参数1事件响应对象,参数2响应事件,参数3本实例对象指针,本实例对象执行方法)
&&& connect(this-&ui-&butSumbie, SIGNAL(clicked()), this, SLOT(close()));
事件中调用说明:
&&& 信号通讯方法(参数1事件响应对象,参数2响应事件,参数3本实例对象指针,参数4响应方法)
&&&&&&& MyW
&&&&&&& 执行权限交给主窗体
&&&&&&& app.setMainWidget(&w);
11、获取当前执行程序路径:QCoreApplication::applicationDirPath()
12、获取当前执行程序文件夹下全部文件内容并且保存到comboBox中。
&&& QDir dir(QCoreApplication::applicationDirPath());
&&& 通过QDir获取目录下全部文件与文件夹
&&& QFileInfoList qFilelist = dir.entryInfoList();
&&& for(int i=0;i&qFilelist.count();i++)
&&& {&& //判断获取到的名称是文件
&&&&&&& if(qFilelist.value(i).isFile())
&&&&&&&&&&& ui-&comboBox-&addItem(qFilelist.value(i).fileName(),i);
13、文件读取实现内容实现代码。
&&& QFile file(ui-&comboBox-&itemText(index));
&&& if(file.open(QIODevice::ReadOnly))//以只读方式打开文件
&&&&&&& FileName = ui-&comboBox-&itemText(index);
&&&&&&& QTextStream ts(&file);
&&&&&&& QTextCodec *codec=QTextCodec::codecForName(&GBK&);
&&&&&&& ts.setCodec(codec);
&&&&&&& ui-&textEdit-&setText(QString::null);
&&&&&&& QS
&&&&&&& do{
&&&&&&&&&&&& line = ts.readLine();
&&&&&&&&&&&& if(!line.isNull())
&&&&&&&&&&&&&&&& line+=&\n&;
&&&&&&&&&&&& ui-&textEdit-&insertPlainText(line);
&&&&&&& } while (!line.isNull());
&&&&&&& file.close();
14、文件写入实现代码段
&&& QFile file(this-&FileName);
&&& if(file.open(QIODevice::ReadWrite))//以读写方式打开文件
&&&&&&& QTextStream qts(&file);
&&&&&&& QTextCodec *codec=QTextCodec::codecForName(&GBK&);
&&&&&&& qts.setCodec(codec);
&&&&&&& QString text = ui-&textEdit-&document()-&toPlainText();
&&&&&&& qts&&//写入到文件中。
&&&&&&& qts.flush();//执行写入
&&&&&&& file.close();
15、数据库QSqlQueryModel类使用意见SqlServer数据库连接。
&&& ui-&setupUi(this);
&&& db = QSqlDatabase::addDatabase(&QODBC&);//定义数据库连接类型。db对象在执行QSqlQueryModel绑定中一直必须是开启状态并且要可见否则无数据内容显示。
&&& db.setDatabaseName(QString(&DRIVER={SQL Server};&
&&&&&&&&&&&&&&&&&&& &SERVER=%1;DATABASE=%2;UID=%3;PWD=%4&P)
&&&&&&&&&&&&&&& .arg(&127.0.0.1&P)
&&&&&&&&&&&&&&& .arg(&Northwind&)
&&&&&&&&&&&&&&& .arg(&sa&)
&&&&&&&&&&&&&&& .arg(&sa&));
&&& db.open();
&&& QSqlQuery query(db);//可以执行查询与删除修改添加操作对象。
&&& query.exec(&select top 10 * from dbo.Orders&);
&&& if(query.numRowsAffected() == -1)
&&&&&&& QMessageBox::about(this,&234&P,&234&P);
&&& QSqlQueryModel *model = new QSqlQueryM
&&& ui-&tableView-&setWindowTitle(&model&);
&&& model-&setQuery(&select top 10 * from dbo.Orders&);
&&& ui-&tableView-&setModel(model);
&&& ui-&tableView-&show();
16、例用QTableWidget实现表格样式自定义显示结构。
&&& db =QSqlDatabase::addDatabase(&QODBC&);
&&& db.setDatabaseName(QString(&DRIVER={SQL Server};&
&&&&&&&&&&&&&&&&&&& &SERVER=%1;DATABASE=%2;UID=%3;PWD=%4&P)
&&&&&&&&&&&&&&& .arg(&192.168.0.16&P)
&&&&&&&&&&&&&&& .arg(&Northwind&)
&&&&&&&&&&&&&&& .arg(&sa&)
&&&&&&&&&&&&&&& .arg(&sa&));
&&& db.open();
&&& QSqlQueryModel *model=new QSqlQueryModel(this);
&&& model-&setQuery(&select * from EmployeeTerritories where EmployeeID&4&P);
&&& QStringList L
&&& List.push_back(&aa&);List.push_back(&bb&);setColumnCount(2);//设置字段名
&&& setHorizontalHeaderLabels(List);//命名字段
&&& for(int i=0;i&model-&rowCount();i++)
&&&&&&& QS
&&&&&&& s=model-&record(i).value(&EmployeeID&).toString();
&&&&&&& QPushButton *LineEdit1=new QPushButton(s);//绑定在表格中的控件类型
&&&&&&& insertRow(i);
&&&&&&& setCellWidget(i,0,LineEdit1);
&&& db.close();
17、实现不规则窗体显示。
&&& //自定义不规则窗体
&&& QPalette p = palette();
&&& QPixmap img(&a.jpg&);
&&& //窗体掩码图定义
&&& //QBitmap mask(&mask.png&);
&&& p.setBrush(QPalette::Window, QBrush(img));
&&& setPalette(p);
&&& //设置掩模图
&&& //setMask(mask);
&&& setWindowFlags(Qt::FramelessWindowHint);
&&& resize(800, 600);
&&& //ui-&setupUi(this);
18、重写鼠标控制窗体移动事件
&&& //声明的对象
&&& QPoint last,pos0;//鼠标移动控制对象
&&& //重写的鼠标移动事件
&&& void MainWindow::mouseMoveEvent(QMouseEvent *e)
&&&&&&& if(e-&buttons() & Qt::LeftButton)
&&&&&&&&&&& //QMessageBox::about(this,&进入移动&,&成功进入移动事件&);
&&&&&&&&&&& QPoint newpos = e-&globalPos();
&&&&&&&&&&& QPoint upleft = pos0 + newpos &
&&&&&&&&&&& move(upleft);
&&& //重写的鼠标按下事件
&&& void MainWindow::mousePressEvent(QMouseEvent *e)
&&&&&&& if(e-&button()==Qt::LeftButton)
&&&&&&&&&&& //QMessageBox::about(this,&进入按下&,&成功进入按下事件&);
&&&&&&&&&&& last = e-&globalPos();
&&&&&&&&&&& pos0 = e-&globalPos() & e-&pos();
19、QT中调用DLL实现代码段
&&& 这个推荐一款小工具 viewdll.exe 。实例代码和工具下面提供下载。将DLL文件直接拖过去,就直接显示DLL里的函数名。当然也不是所有DLL都能显示。&&
&&& 用QT生成DLL,直接导出函数的方法。&&&
&&& 用QTcreator& dll向导建立工程。把所有.H文件删除,在唯一的.CPP文件中编写你所要导出的函数,函数模版&&&
&&& extern &C& __declspec(dllexport) int ShowMessageBox()&&&
&&&&&&& char *str = &this is Dll&;&&&
&&&&&&& cout&&&&&
&&&&&&& return 0;&&&
&&& 直接编译后,生成DLL文件。&&&
&&& 将dll文件拷贝到你要使用的exe工程中。这里我的EXE使用的是core类型,没有使用GUI。&&&
&&& 在新工程的cpp文件中加入&&&
&&& QLibrary myLib(&ClassDll.dll&);//加载dll文件&&&
&&& typedef void (*MyPrototype)();&&&
&&& MyPrototype myFunction = (MyPrototype) myLib.resolve(&ClassDll&);//CLASSDLL是函数名&&&
&&& if (myFunction)&&&
&&&&&&& myFunction();//调用的classdll,也就是你的函数生成dll的文件:
&&& //mydll.h
& extern &C& __declspec(dllexport) int maxfun(int,int);&&& //函数
struct __declspec(dllexport) nNode& //结构体
//mydll.cpp
#include &mydll.h&
extern &C& __declspec(dllexport)int maxfun(int x,int y)
&&& return x+y;
extern &C& __declspec(dllexport)nNode& temp={10};& //这里一个结构体对象
///下面是程序调用dll.
#include &qapplication.h&
#include &qlibrary.h&
#include &qmessagebox.h&
int main(int argc,char* argv[])
&&& QApplication app(argc,argv);&
&&& struct mynode
&&& QLibrary lib(&mydll&);
&&& mynode* no = (mynode*)lib.resolve(&temp&);
&&& if(no)
&&&&&&& QMessageBox::information(0,&name&,QString::number(no-&i));
&&&&&&& QMessageBox::information(0,&name&,&no==0&P);
&&& return app.exec();
20、QT中的网络编程与实现。QT中共提供四个与套按字相关的类,分别是:
  QServerSocket:TCP-based server
  QSocket: Buffered TCP connection
  QSocketDevice: Platform-independent low-level socket API
  QSocketNotifier: Support for socket callbacks
  下面介绍使用QT进行网络编程,我们使用一个简单的C/S模式网络程序说明如何使用QT中的套接字。同时我们用TCP和UDP两种协议实现这个程序(该程序客户端与服务端各向对方发送一个字符口串&abc&)
  1、UDP实现
   UDP是不连接协议,没有客户端与服务端的概念。
   1)建立套接字相关对象
   QSocketDevice *MUReceiveS //套接字对象
   QSocketNotifier *MSocketN //套接字监听对象
   2)初始化套接字相关对象
   MUReceiveSocket=new QSocketDevice(QSocketDevice::Datagram);
   //UDP初始化
   QHostAddress MyA
   QString FakeA
   FakeAddress = get_eth1_ip(); //取得接口IP
   MyAddress.setAddress(FakeAddress);
   MUReceiveSocket-&bind(MyAddress,Port);
   //绑定到指定网络接口地址(IP),指定逻辑端口
   MSocketNotifier = new QSocketNotifier(MUReceiveSocket-&socket(),QSocketNotifier::Read,0,&MSocketNotifier&);
   //监听MUReceiveSocket套接字
   3)定义用实现响应slot
   virtual void OnMReceive();
   void Client::OnMReceive()
   int ByteCount,ReadC
   char *IncommingC
   fprintf(stderr,&Load a piece of Message!\n&);
   ByteCount=MUReceiveSocket-&bytesAvailable();
   IncommingChar=(char *)malloc(ByteCount+1);
   ReadCount=MUReceiveSocket-&readBlock(IncommingChar,ByteCount);
   IncommingChar[ByteCount]=&;
   fprintf(stderr,&%s&,IncommingChar); //打印接收的字符串
   4)关联套接字的signal和接收slot
   connect(MSocketNotifier,SIGNAL(activated(int)),this,SLOT(OnMReceive()));
   //当MSocketNotifier检测到MUReceiveSocket活跃时调用OnMReceive
   5)发送字符串
   char information[20];
   strcpy(information,&abc&);
   MUReceiveSocket-&writeBlock(information,length,MyAddress,2201);
  2、TCP实现
   TCP的实现与UDP的实现大同小异,它是面象连接的协议。这里只介绍与UDP不同的地方。
   服务端:
   1)套接字对象的定义
   比UDP多定义一个套接字,一个用来监听端口,一个用来通信。
   QSocketDevice *ServerS
   QSocketDevice *ClientS
   QSocketNotifier *ClientN
   QSocketNotifier *ServerN
   2)套接字的初始化
   QHostAddress MyA
   QString FakeA
   FakeAddress = &127.0.0.1&P;
   MyAddress.setAddress(FakeAddress);
   UINT Port=1234;
   ServerSocket=new QSocketDevice(QSocketDevice::Stream);
   ClientSocket=new QSocketDevice(QSocketDevice::Stream);
   ServerSocket-&bind(MyAddress,Port);
   ServerSocket-&listen(20); //20代表所允许的最大连接数
   ClienttNotifier = new QSocketNotifier(ClientSocket-&socket(),QSocketNotifier::Read,0,&ClientSocket&);
   ServerNotifier = new QSocketNotifier(ServerSocket-&socket(),QSocketNotifier::Read,0,&ServerSocket&);
   3)响应连接(在定义slot中响应)
   当收到客户端的连接后,响应它,并以ClientSocket接收:
   ServerSocket-&SetSocket(ClientSocket-&socket());
   4)接收信息slot与UDP一致,这里不在叙述。
   客户端实现:
   客户端的实现与UDP实现大同小异,不同的地方只是客户端套接字不需要bind端口,因为连接上服 务端后TCP会保持这个连接,直到通信的结束。
操作系统:ARM-LINUX QT版本:QT-2.3.2-FOR-LINUX GUI:Qtopia 在LINUX下进行网络编程,我们可以使用LINUX提供的统一的套接字接口。但是这种方法牵涉到太多的结构体,比如IP地址,端口转换等,不熟练的人往往容易犯这样那样的错误。QT中提供的SOCKET完全使用了类的封装机制,使用户不需要接触底层的各种结构体操作。而且它采用QT本身的signal-slot机制,使编写的程序更容易理解。 QT中共提供四个与套按字相关的类,分别是: QServerSocket:TCP-based server QSocket: Buffered TCP connection QSocketDevice: Platform-independent low-level socket API QSocketNotifier: Support for socket callbacks 下面介绍使用QT进行网络编程,我们使用一个简单的C/S模式网络程序说明如何使用QT中的套接字。同时我们用TCP和UDP两种协议实现这个程序(该程序客户端与服务端各向对方发送一个字符口串&abc&) 1、UDP实现 UDP是不连接协议,没有客户端与服务端的概念。 1)建立套接字相关对象 QSocketDevice *MUReceiveS //套接字对象 QSocketNotifier *MSocketN //套接字监听对象 2)初始化套接字相关对象 MUReceiveSocket=new QSocketDevice(QSocketDevice::Datagram); //UDP初始化 QHostAddress MyA QString FakeA FakeAddress = get_eth1_ip(); //取得接口IP MyAddress.setAddress(FakeAddress); MUReceiveSocket-&bind(MyAddress,Port); //绑定到指定网络接口地址(IP),指定逻辑端口 MSocketNotifier = new QSocketNotifier(MUReceiveSocket-&socket(),QSocketNotifier::Read,0,&MSocketNotifier&); //监听MUReceiveSocket套接字 3)定义用实现响应slot virtual void OnMReceive(); void Client::OnMReceive() { int ByteCount,ReadC char *IncommingC fprintf(stderr,&Load a piece of Message!\n&); ByteCount=MUReceiveSocket-&bytesAvailable(); IncommingChar=(char *)malloc(ByteCount+1); ReadCount=MUReceiveSocket-&readBlock(IncommingChar,ByteCount); IncommingChar[ByteCount]=&; fprintf(stderr,&%s&,IncommingChar); //打印接收的字符串 } 4)关联套接字的signal和接收slot connect(MSocketNotifier,SIGNAL(activated(int)),this,SLOT(OnMReceive())); //当MSocketNotifier检测到MUReceiveSocket活跃时调用OnMReceive 5)发送字符串 char information[20]; strcpy(information,&abc&); MUReceiveSocket-&writeBlock(information,length,MyAddress,2201); 2、TCP实现 TCP的实现与UDP的实现大同小异,它是面象连接的协议。这里只介绍与UDP不同的地方。 服务端: 1)套接字对象的定义 比UDP多定义一个套接字,一个用来监听端口,一个用来通信。 QSocketDevice *ServerS QSocketDevice *ClientS QSocketNotifier *ClientN QSocketNotifier *ServerN 2)套接字的初始化 QHostAddress MyA QString FakeA FakeAddress = &127.0.0.1&P; MyAddress.setAddress(FakeAddress); UINT Port=1234; ServerSocket=new QSocketDevice(QSocketDevice::Stream); ClientSocket=new QSocketDevice(QSocketDevice::Stream); ServerSocket-&bind(MyAddress,Port); ServerSocket-&listen(20); //20代表所允许的最大连接数 ClienttNotifier = new QSocketNotifier(ClientSocket-&socket(),QSocketNotifier::Read,0,&ClientSocket&); ServerNotifier = new QSocketNotifier(ServerSocket-&socket(),QSocketNotifier::Read,0,&ServerSocket&); 3)响应连接(在定义slot中响应) 当收到客户端的连接后,响应它,并以ClientSocket接收: ServerSocket-&SetSocket(ClientSocket-&socket()); 4)接收信息slot与UDP一致,这里不在叙述。 客户端实现: 客户端的实现与UDP实现大同小异,不同的地方只是客户端套接字不需要bind端口,因为连接上服 务端后TCP会保持这个连接,直到通信的结束。
21、Qt窗体布局操作
&&& 布局中主要的操作有
&&& 水平布局, 垂直布局, 打破布局。
&&& 当只有一个控件时,不能进行布局操作。布局操作是多个控件,或者对话框的操纵。
&&& 选择多个窗体控件,按住shift键,鼠标点击选取,右键进行布局操纵。
&&& 当选中对话框主窗体时,可以进行窗体上控件的布局操作。
&&& 该操纵将对窗体上的控件或者布局进行,水平布局或者垂直布局操纵
22、Qt绘图模式
&&& Qt助手,放大缩小,很方便。
&&& 绘图系统
&&& 主要基于三个类,QPainter, QPaintDevice, QPaintEngine.
&&& QPainter用于执行绘图操作。QPaintDevice使用QPaint进行绘图所使用的二维空间。QPaintEngine提供了在不同设备上的绘图接口,被QPainter, QPaintDevice内部使用,对于程序员来说是隐藏的,只有在创建自己的设备类型时,才能用到。
&&& QPainter能用画笔作图,画文字或者图形。
&&& 画 填充 创建设备 读写图形文件 样式
&&& QPaintDevice是用于画图的设备的基类。
&&& QPaintDevice的子类有 QWidget, QImage, QPixmap, QGLWidget, QGLPixelBuffer, QPicture and QPrinter。
23、CListWidget与CTableWidget编程注意事项
&&& 在执行CListWidget与CTableWidget等类似的列表控件的Clear操作时,系统经常崩溃,原因分析。这个clear操作因为改变了列表的内容,会触发其它的信号。特别是下面的两个函数。
&&& CListWidget的函数
&&& void currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous )
&&& void currentRowChanged ( int currentRow )
&&& CTableWidget的函数。
&&& void currentCellChanged ( int currentRow, int currentColumn, int previousRow, int previousColumn )
&&& void currentItemChanged ( QTableWidgetItem * current, QTableWidgetItem * previous )
&&& 如果,在下面的函数中,没有加入信号参数检测,就很容易出错。主要检查currentRow 是否大于或者等于0。current,previous 是否有效。如果不检查,并根据该参数,调用了其它的方法。当currentRow =-1; 时,就会发生错误。
&&& ui.tableWidget-&item(row, 0);& row=-1时,调用就会产生错误。
&&& ui.listWidget-&item(row);& row=-1时,调用就会产生错误。
&&& 错误解决方法:加入错误检查,
&&& if (row&=0){//其它相关处理}
24、一个工程中出现多个QMainWindow并同时显示的方案。
&&& 问题描述:
在一个CMainWindow CMyWin1的继承类中,如果再使用一个CMainWindow类CMyWin2;
在CMyWin1中使用以下代码、
mw.show ()
mw 一闪就没有了。具体原因不明。
定义窗体局部变量: CDataManager *m_pDataM
调用过程如下,并建立信号连接,监控信号 destryed,接收道该信号时,做一个槽处理。
if (m_pDataMager)
&& m_pDataMager-&setVisible (true);
&& m_pDataMager-&showNormal ();
&& //m_pDataMager-&
&& m_pDataMager = new CDataManager();
&& connect(m_pDataMager, SIGNAL(destroyed(QObject*)),
&&&& this, SLOT(after_DataManage_Destoryed(QObject*)));
&& m_pDataMager-&setVisible (true);
在函数after_DataManage_Destoryed中,进行窗体的delete,并设置变量为NULL。
void SeismicRecogn::after_DataManage_Destoryed(QObject *obj)
&&& //QMessageBox::information(this,&Test Box&,&DataManage_Destoryed!&);
&&& if (m_pDataMager)
&&&& disconnect(m_pDataMager, SIGNAL(destroyed(QObject*)),
&&&&&&& this, SLOT(after_DataManage_Destoryed(QObject*)));
&&&& obj-&deleteLater();
&&&& m_pDataMager =NULL;
25、资源文件的动态加载
在构造函数中添加如下:
icon.addPixmap(QPixmap(QString::fromUtf8(&../resource/well.png&)), QIcon::Normal,QIcon::Off);
ui.actionLoad-&setIcon(icon);
tableWidget设置高度宽带
ui.tableWidget-&setColumnWidth(0,280);
ui.tableWidget-&setColumnWidth(1,280);
for (int i=0;i&10;i++)
&& ui.tableWidget-&setRowHeight(i,20);
26、如何对LineEdit输入数据进行格式限制。
QLineEdit 中对输入字符输入格式的控制通过inputMask与validators实现。
使用时,详细阅读2个的说明。
QIntValidator *vv=new QIntValidator(this);
ui.lineEdit-&setValidator (vv);
27、二维图形框架Graphics View
Graphics View框架实现了模型-视图结构的图形管理,能对大量的图元进行管理,支持碰撞检测、坐标变换和图元组等多种方便的操作。Graphics View支持事件传播体系结构,可以使图元在场景(scene)中得到提高了一倍的精确交互能力。图元能够处理键盘事件,鼠标按下、移动、释放和双击事件,也能跟踪鼠标的移动。在Graphics View框架中,通过BSP(二元空间划分树,Binary Space Partionng)来提供快速的图元查找,这样就能实时地显示大场景,甚至上百万个图元。
Graphics View框架提供基于图元的模型-视图编程,类似于Qt InterView的模型-视图结构,只是这里的数据是图形。Graphics View框架中包括三个主要的类:QGraphicsItem, QGraphicsScene 和 QGraphicsView。
Graphics View为大量定制的2维图元的管理与交互提供了一个框架,可以实现这些图元的可视化,并支持缩放和旋转。
28、Graphics View框架继续学习
主要内容:场景 QGraphicsScene 视图 QGraphicsView 图元 QGraphicsItem
示例:Examples and Demos && Graphics View
QGraphicsScene是QGraphicsItems的容器。它与QGraphicsView一起实现了图元的可视化,例如线,矩形,文本,以及定制的图元。QGraphicsScene也提供了以下功能,让你高效的确定图元的位置以及图元的可视性。
QGraphicsS
scene.addText(&Hello, world!&);
QGraphicsView view(&scene);
view.show();
重点示例程序:
Diagram Scene
//图元的外接矩形区域(虚函数的实现)
QRectF CGeoObjCnoline::boundingRect() const
//图元的绘制路径(虚函数的实现)
QPainterPath CGeoObjCnoline::shape() const
//图元的绘制(虚函数的实现)
void CGeoObjCnoline::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
29、要想界面一直存在用new创建
用new指针生成,起作用
Ui::cdtestC
QGraphicsScene *
QGraphicsView *
cdtest::cdtest(QWidget *parent, Qt::WFlags flags): QMainWindow(parent, flags)
&&& ui.setupUi(this);
&&& scene = new QGraphicsScene();
&&& scene-&setSceneRect (-400,-300,800,600);
&&& scene-&setItemIndexMethod (QGraphicsScene::NoIndex );
&&& scene-&addText (&Good&);
&&& view = new QGraphicsView(scene);
&&& ui.layTest-&addWidget(view);
&&& view-&update();
用局部变量不起作用
void cdtest::on_actionTest_triggered()
&&& QGraphicsS
&&& scene.setSceneRect (-400,-300,800,600);
&&& scene.setItemIndexMethod (QGraphicsScene::NoIndex );
&&& scene.addText (&Good&);
&&& QGraphicsView view(&scene);
&&& ui.layTest-&addWidget(&view);
&&& view.update();
指针用局部变量,使用的时候new,起作用。
void cdtest::on_actionTest_triggered()
&&& QGraphicsScene *
&&& scene = new QGraphicsS
&&& scene-&setSceneRect (-400,-300,800,600);
&&& scene-&setItemIndexMethod (QGraphicsScene::NoIndex );
&&& scene-&addText (&Good&);
&&& QGraphicsView *
&&& view =new QGraphicsView(scene);
&&& ui.layTest-&addWidget(view);
&&& view-&update();
30、QTableView根据内容自动调整列宽行高
1: 使用QTableView自己带的函数,函数原型如下:
ui.tableWidget-&resizeColumnToContents (0);
将第一列根据内容自动调整列宽。
根据内容自动调整某列的列宽
void QTableView::resizeColumnToContents ( int column ) [slot]
Resizes the given column based on the size hints of the delegate used to render each item in the column.
根据内容自动调整所有列的列宽
void QTableView::resizeColumnsToContents () [slot]
Resizes all columns based on the size hints of the delegate used to render each item in the columns.
根据内容自动调整某一行的行高
void QTableView::resizeRowToContents ( int row ) [slot]
Resizes the given row based on the size hints of the delegate used to render each item in the row.
根据内容自动调整所有行的行高。
void QTableView::resizeRowsToContents () [slot]
Resizes all rows based on the size hints of the delegate used to render each item in the rows.
31、QGraphicsItem中的碰撞检测描述
QGraphicsItem是图元基类。QGraphics View框架提供了几种标准的图元,如矩形(QGraphicsRectItem、椭圆(QGraphicsEllipseItem)和文本图元(QGraphicsTextItem)等。用户可以继承QgraphicItem实现符合自己需要的图元。
QGraphicsItem具有以下功能:
处理鼠标按下、移动、释放、双击、悬停、滚轮和右键菜单事件
处理键盘输入事件
处理拖放事件
& 图元有自己的坐标系统,也提供场景和图元、图元与图元之间的坐标转换函数。图元可以包含子图元。
&&& 要创建自己的图元,必须首先创建QGrahicsItem的一个子类,然后开始实现他的2个纯虚函数。一个是boundingRect(),用于返回图元绘制所需要的估测区域。另一个是paint,它实现实际的绘图操纵。举例:
class SimpleItem : public QGraphicsItem
&& public:
&& QRectF boundingRect() const
&&&&&& qreal penWidth = 1;
&&&&&& return QRectF(-10 & penWidth / 2, -10 & penWidth / 2,
&&&&&&&&&&&&& 20 + penWidth / 2, 20 + penWidth / 2);
&&& void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget)
&&&&&& painter-&drawRoundedRect(-10, -10, 20, 20, 5, 5);
&&& boundingRect函数有几个目的。QGraphicsScene的图元索引就是建立在boundingRect的基础上。QGraphicsView也使用这个函数来从视图上将不可见的图元移去,以及在绘制重叠的图元时决定需要重新组织的区域。另外,QGraphicsItem的碰撞检测机制(collision detection)使用boundingRest来提高高效的处理。更好的碰撞检测算法是基于shape函数的调用,shape函数将图元的形状的准确外观以QPainterPath返回。
&&& QGraphicsScene认为所有图元的boundingRect函数与shape函数都是不发生改变的,除非用户进行通知。如果你想改变一个图元的范围,必需先调用prepareGeometryChange以允许QGraphicsScene进行更新。
碰撞检测可以通过以下两种方式实现:
重新实现shape函数返回一个准确的图元外观形状,依赖collidesWithItem函数进行缺省的碰撞检测,如果形状非常的复杂,该检测将是非常耗时的。
重新实现collidesWithItem函数,为自己的定制图元编写碰撞检测算法。
对于多点成线的图元可以使用下面的方式返回shape。
//直线的绘制路径
if (m_pointList.count()&0)
&& iSize = m_pointList.size();
&& path.moveTo (m_pointList[0]);
&& for(int i=1;i&iSize/2;i++)
&&&&&& path.lineTo (m_pointList[i*2]);
&& for(int i=iSize/2;i&=1;i&)
&&&&&& path.lineTo (m_pointList[i*2-1]);
&& path.closeSubpath();
32、sql中二进制文件通过QByteArray读写
从数据库到文件
QSqlQuery myquery( *pDatabase);
if(myquery.exec(sql))
&&& QSqlRecord myrecord = myquery.record();
&&& if (myquery.next()) {
&&&&&&& myba = myquery.value(myrecord.indexOf(&Settings&)).toByteArray();//读取二进制对象
&&& initBoundary();
QFile mybfile(MapDataFilename);
if (!mybfile.open(QIODevice::WriteOnly))
&& initBoundary();
mybfile.write (myba);
mybfile.close();
从文件到数据库
//将文件存入数据库
QByteArray mapD
QFile file(MapDataFilename);
if (!file.open(QIODevice::ReadOnly))
mapData = file.readAll();
file.close();
QSqlDatabase* pDatabase = CAccessController::getInstance()-&getAccesser(g_dbXMLFilePath);
if (pDatabase ==0 )
&& // QMessageBox::information(this, &Error&, CAccessController::getInstance()-&lastError());
QSqlQuery query( *pDatabase);
query.prepare(&update p_project SET Settings = :set where ID_P = :idp&);
query.bindValue (&:set&,mapData);
query.bindValue (&:idp&,CMainConfig::CurProjectID);
bool bRtn = query.exec();
if (!bRtn)
&& QSqlError er =query.lastError ();
&& QString ss= er.text();
33、QGraphicsView放大缩小中心属性分析
&& 将下面的函数注释掉,是resize,不发生缩放。
&& void CBaseMapForm::resizeEvent ( QResizeEvent * event )
&&&&& //m_view-&doZoomAll();
&& QMatrix可以直接进行文件存储。 && &&。
34、帮助文件的调用执行问题
& 帮助文件安装制作:
& 取得当前可执行程序的路径
& QString strUrl=QApplication::applicationDirPath () ;
& strUrl=QString(&&(strUrl)
& 用客户机的浏览器,打开网页
& desktopServices.openUrl(qqq);
35、最简单的图形显示控件QLabel
& imageLabel = new QL
& imageLabel-&setWordWrap(true);
& imageLabel-&setAlignment(Qt::AlignCenter);
& imageLabel-&setPixmap(QPixmap(&:/images/image.png&));
& QPixmap的伸缩
& ui.lblImage-&setPixmap(pixmap.scaled(ui.lblImage-&size()-QSize(40,40),Qt::KeepAspectRatio, Qt::FastTransformation));
36、取得QTableView的特定行,特定列的数据
& QModelIndex index = ui.tableView-&currentIndex();
& if (!index.isValid())
&&&& QMessageBox::information (NULL,&提示&,&请先选择一行数据。&);
& iRow = index.row();
& QAbstractItemModel* model = ui.tableView-&model();
& //取得层数据库的数据表名
& index = model-&index(iRow,1,QModelIndex());
& QString strHorizonN
& strHorizonName = index.data().toString();
37、qt下获得屏幕的分辨率
在Qt中提供了QDesktopWidget类,提供屏幕的有关信息.
可以这么作:
QDesktopWidget *d=QApplication::desktop();
int width=d-&widht(); //屏幕的宽度
int height=d-&height(); //屏幕的高度
或者简写如下:
int width=QApplication::desktop()-&width();
int height=QApplication::desktop()-&height();
38、干掉QT窗体的标题栏。。
setWindowFlags(Qt::FramelessWindowHint);
39、设置QT按钮为透明。
//就是这句能够实现透明,真是意外的发现,希望对一些学习的朋友有点帮助
ui-&pushButton-&setFlat(true);
40、设置QT窗体置顶。
this-&setWindowFlags(Qt::WindowStaysOnTopHint);
41、判断sqlite数据表是否存在。
&&& QStringList existT
&&& existTables=dataBase-&tables();
&&& if(!existTables.contains(userId))
&&& QSqlDatabase db = QSqlDatabase::addDatabase(&QSQLITE&);
&&& //创建不带名称的数据库连接,可以理解成ADO中的Connection
Driver&& Class name&&&&& Constructor arguments&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& File to include
QPSQL&&& QPSQLDriver&&&& PGconn *connection&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& qsql_psql.cpp
QMYSQL&& QMYSQLDriver&&& MYSQL *connection&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& qsql_mysql.cpp
QOCI&&&& QOCIDriver&&&&& OCIEnv *environment, OCISvcCtx *serviceContext&&&&&&&&&&&&&&&&&&&&&& qsql_oci.cpp
QODBC&&& QODBCDriver&&&& SQLHANDLE environment, SQLHANDLE connection&&&&&&&&&&&&&&&&&&&&&&&&& qsql_odbc.cpp
QDB2&&&& QDB2 SQLHANDLE& environment, SQLHANDLE connection&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& qsql_db2.cpp
QTDS&&&& QTDSDriver&&&&& LOGINREC *loginRecord, DBPROCESS *dbProcess, const QString &hostName qsql_tds.cpp
QSQLITE& QSQLiteDriver&& sqlite *connection&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& qsql_sqlite.cpp
QIBASE&& QIBaseDriver&&& isc_db_handle connection&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& qsql_ibase.cpp
ODBC连接适合数据库类型 连接方式access& &Driver={microsoft access driver(*.mdb)};dbq=*.uid=pwd=&dBase& &Driver={microsoft dbase driver(*.dbf)};driverid=277;dbq=&&&&;&oracle& &Driver={microsoft odbc for oracle};server=oraclesever.uid=pwd=&MSSQL server& &Driver={sql server};server=database=uid=pwd=&MS text& &Driver={microsoft text driver(*. *.csv)};dbq=&&;extensions=asc,csv,tab,Persist SecurityInfo=&Visual Foxpro& &Driver={microsoft Visual Foxpro driver};sourcetype=DBC;sourceDB=*.Exclusive=No;&MySQL& &Driver={mysql};database=uid=pwd=option=16386;&SQLite& &Driver={SQLite3 ODBC Driver};Database=D:\SQLite\*.db&PostgreSQL& &Driver={PostgreSQL ANSI};server=127.0.0.1;uid=pwd=database=databaseName&OLEDB连接适合的数据库类型 连接方式access& &Provider=microsoft.jet.oledb.4.0;data source=your_database_user id=password=&oracle& &Provider=OraOLEDB.Odata source=user id=password=&MS SQL Server& &Provider=SQLOLEDB;data source=initial catalog=userid=password=&MS text& &Provider=microsof.jet.oledb.4.0;data source=your_Extended Properties&FMT=Delimited&
&&& //参见QSqlDatabase的文档
&&& db.setDatabaseName(&UserDB&);
&&& if ( !db.open())
&&&&&&& QMessageBox::critical(NULL, QObject::tr(&Collection&), QObject::tr(&数据库连接失败!&));
&&& if(db.tables().isEmpty())
&&&&&&& QMessageBox::critical(NULL, QObject::tr(&Collection&), QObject::tr(&数据库连接失败!&));
42、QString 转换 unsigned char* 。
&&&& QString str = &ABCD&;
&&&& int length = str.length();
&&&& unsigned char *sequence = NULL;
&&&& sequence = (unsigned char*)qstrdup(str.toAscii().constData());
43、怎样获取手机串号?
&&&& TPlpVariantMachineId machineId;
&&&& PlpVariant::GetMachineIdL(machineId);
44、自定义按键事件与控件大小变化事件
&&& //按键事件
&&& virtual void keyPressEvent(QKeyEvent *k);
&&& //控件改变重绘事件
&&& virtual void paintEvent(QPaintEvent *);
45、获取QTableView行信息内容
&&& QSqlQueryM//以绑定数据内容的QSqlQueryModel
&&& query.prepare(&delete from glossary where [work]=:work and [explain]=:explain&);
&&& QModelIndex index = ui-&tableView-&currentIndex();
&&& query.bindValue(&:work&, model-&record(index.row()).value(0).toString());
&&& query.bindValue(&:explain&, model-&record(index.row()).value(1).toString());
本文来源:
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 好安静的书 的文章

 

随机推荐