勇's profile尘埃落定PhotosBlogListsMore Tools Help

勇 宁

No list items have been added yet.

尘埃落定

满怀感恩,勇担责任。
April 22

c++解析文件/字符串

1。读取文件,解析文件
ifstream in;
in.open(filename);
if(!in)
{
//打不开文件
}
else
{
in.getline(char *buf,streamsize num);
if(in)
{
string str(buf);//将字符数组赋给字符串
int j=str.find('/');
if(j=string::npos)
{
//找不到指定分隔符
}
else
{
//找到分隔符,将原是字符串分别赋给2个字符串,将所需字符串赋给字符数组,然后将字符数组转换为存储数据的数组
}
}
}
2。二维数组和一维数组的声明
正确声明:int a[3];//不可将数组的大小声明为变量
错误声明:int k=3;
             int a[k];
如果想动态声明数组:
一维数组:
int *a;
a=new int[k];//这时k可以使变量
二维数组:
int **ptr=new int *[n];
for(i=0;i<n;i++)
{
*(ptr+i)=new int [m];
for(j=0;j<m;j++)
{
*(*(ptr+i)+k)=//赋值
}
}
April 14

调试成功

如何生成MySQL的配置文件my.cnf
SeLinux的配置问题。关于为什么不能正确加载libphp4.so文件。
(3)前2点是这次配置遇到的问题,前几次配置都是根据张微波的BLOG配置的,没有什么问题。
April 11

Linux下安装php+apache+mysql

去年自己调试好了一次,现在一直在使用。今天去给师弟安装,乱七八糟的问题,郁闷。。。
等明天去把我安装好的那些文件拷过去试试,成功了再来写点心得...

模式与非模式的区别

QWidegt的模式和非模式非常重要。
非模式窗口就是运行在应用程序中,对于任何其他窗口都是独立窗口,用show()调用。
模式窗口就是当它被调用而弹出的时候,它会阻塞这个应用程序,直到这个窗口被关闭,发生的其他任何处理或者交互才能继续运行,用exec()调用。
例如:
class MainWindow:public QMainWindow
{
......
}
void MainWindow::find()
//弹出一个非模式的窗口,将该非模式的窗口中的动作发出的信号和父窗口的槽联系起来。用户可以在FindDialog 和MainWindow之间切换
{
if(!finddialog)
{
FindDialog finddialog(this);//FindDialog是一个非模式的窗口。
connect(&finddialog,SIGNAL(),spreadsheet,SLOT());//
}
finddialog.show();//调用show(),raise(0,setActiveWindow()来确保这个窗口是可视的,在其他窗口之上并且是激活的
finddialog.raise();
finddialog.setActiveWindow();
}
 
void MainWindow::gotocell()//弹出一个模式窗口
{
GOTOCELL dialog(this);
if(dialog.exec())
{
.....
}
}
注意模式窗口的如下函数:reject(),accept()返回什么值。
April 10

貌似稍微搞懂了点QCanvas

1

在项目的main()函数里,需要声明一个QCanvas对象,并设置其大小、颜色等等。

#include <qapplication.h>

#include "form1.h"

int main( int argc, char ** argv )

{

    QApplication a( argc, argv );

//声明QCanvas   

    QCanvas canvas(300,180);

    canvas.setAdvancePeriod(30);

    canvas.setBackgroundColor(QColor(200,200,200));

 //创建Form1的一个对象,Form1为一个QWidget  

    Form1 w(canvas);//canvas传递给Form1的构造函数

    w.show();

    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );

    return a.exec();

}

需要注意的是Form1的构造函数,Form1是继承QWidget的,在其构造函数中应添加一个QCanvas &的声明。

2)类的建立

#ifndef FORM1_H

#define FORM1_H

#define WINDOW_WIDTH 300;

#define WINDOW_HEIGHT 180;

#include <qvariant.h>

#include <qwidget.h>

#include <qcanvas.h>

#include <qpen.h>

#include <qcolor.h>

class QVBoxLayout;

class QHBoxLayout;

class QGridLayout;

class QSpacerItem;

class QPushButton;

 

class Frame : public QCanvasView//建一个Frame继承了QCanvasView

{

       Q_OBJECT

public:   

       Frame(QCanvas&, QWidget* parent=0, const char* name=0, WFlags f=0);

       ~Frame();     

private:

       QPainter * paint; 

};

 

class Form1 : public QWidget

{

    Q_OBJECT

 

public:

    Form1(QCanvas&, QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );//Form1的构造函数中可以接收传递的QCanvas

    ~Form1();

 

    QPushButton* pushButton1;

              int m_width;

              int m_height;

              void drawcanvas();

 

protected:

 

protected slots:

    virtual void languageChange();

private:

              QCanvas& canvas;//声明QCanvas的一个引用

              Frame * frame;//声明Frame的一个对象

};

 

#endif // FORM1_H

3.cpp文件

我们的思路应该是利用form1.h中声明的2个类(一个是QCanvasView,一个是QWidget),首先在main()中将我们已经设置好的QCanvas赋给QWidget,在QWidget中实现一个新的QCanvasView,同时将已经赋给QWidgetQCanvas再赋给这个新的QCanvasView

总结成一句话就是,要想使用QCanvas绘图,则必须使用QCancaView,在QCancaView放置QCanvas,然后在QCanvas上绘图。

#include "form1.h"

 

#include <qvariant.h>

#include <qpushbutton.h>

#include <qlayout.h>

#include <qtooltip.h>

#include <qwhatsthis.h>

#include <qimage.h>

#include <qpixmap.h>

Form1::Form1(QCanvas& c, QWidget* parent, const char* name, WFlags fl )

    : QWidget( parent, name, fl ),canvas(c)//c赋给canvas,这里的c则是在main(0中传递下来的canvas.

{

    if ( !name )

              setName( "Form1" );

 

              m_width=WINDOW_WIDTH;

              m_height=WINDOW_HEIGHT;

 

      pushButton1 = new QPushButton( this, "pushButton1" );

             pushButton1->setGeometry( QRect( 230, 420, 86, 30 ) );

      languageChange();

      resize( QSize(600, 480).expandedTo(minimumSizeHint()) );

    clearWState( WState_Polished );

//这里重新实现一个QCanvawView,将在main()中设置好的canvas放在QCanvasView

              frame=new Frame(canvas,this);//将main()中这使得QCanvas放到我们的一个QCanvasView中

              frame->setGeometry(QRect(7,6,m_width+4,m_height+4));

              frame->viewport()->setBackgroundColor(gray);

              frame->show();

              drawcanvas();

}

 

void Form1::drawcanvas()

{

        QCanvasPolygonalItem* i = new QCanvasEllipse(20,20,&canvas);//在canvas中绘图

       i->setBrush(red);

       i->move(50,60);

        i->setZ(rand()%256);

    i->show();

}

Form1::~Form1()

{

}

Frame::Frame(QCanvas& c, QWidget* parent,const char* name, WFlags f) :QCanvasView(&c,parent,name,f)

{

}

Frame::~Frame()

{

}

void Form1::languageChange()

{

    setCaption( tr( "Form2" ) );

    pushButton1->setText( tr( "pushButton1" ) );

}

(4)

记得写析构函数 

 
Photo 1 of 9
No list items have been added yet.