Qt - txt 파일을 읽고 테이블에 쓰기

4745 단어 Qt
#include "tablewidget.h" 
#include 
#include 
#include 
#include
#include 


void readData()				//        , txt                    
{
	std::ifstream fin;
	fin.open("Imagedata.txt");
	if (fin.fail())
	{
		std::cout << "File open error!";
		int m;
		std::cin >> m;
	}
	else{
		for (int i = 0; i < 85425; i++)
		{
			for (int j = 0; j < 33; j++){
				fin >> imageData[i][j];
				
			}
		}
		fin.close();
	}

}

int x=1;
int y=20;			//      (225,355,33)   (85425,33)   
int location = (x-1)*355+y;			//225*355      (x,y)        location 
double imageData[85425][33];			//(1,1)      ,(1,2)      。。。(1,355)   355 ,(2,1)   356 ,    

TableWidget::TableWidget()

{ 
        table = new QTableWidget(this); 
        table->setColumnCount(56); 
        table->setRowCount(60);			//     60*56   


        QStringList headers; 
        headers <setHorizontalHeaderLabels(headers); //     ,       ,     
		
	table->resize(1366,200);	

readData();
		
	for (int column = 0; column < 33; ++column)   
{  
	QTableWidgetItem *item0;  
	item0 = new QTableWidgetItem;  
		
	double m=imageData[location][column];
	QString txt = QString("%1").arg(m);  //         string 
	item0->setText(txt);  
	table->setItem( 0 , column , item0);  // txt       	
      
}  
		
	

}

		

다음은 다음과 같습니다.
첫째:readData() 함수, 파일 읽기
4
void readData()				      
{
	std::ifstream fin;
	fin.open("Imagedata.txt");
	if (fin.fail())
	{
		std::cout << "File open error!";
		int m;
		std::cin >> m;
	}
	else{
		for (int i = 0; i < 85425; i++)
		{
			for (int j = 0; j < 33; j++){
				fin >> imageData[i][j];
				
			}
		}
		fin.close();
	}

}
우선, 헤드 파일과 입력 출력을 포함해야 하며, 파일의 읽기와 쓰기를 책임져야 한다. 주로 다음과 같은 세 가지 함수가 있다.
4
#include   
ofstream         //                 
ifstream         //     ,            
fstream          //    ,                
이 분야에 대한 소개가 많고 구체적으로도 참고 링크http://blog.csdn.net/kingstar158/article/details/6859379
두 번째: 56*60 테이블을 만듭니다.
TableWidget::TableWidget()

{ 
        table = new QTableWidget(this); 
        table->setColumnCount(56); 
        table->setRowCount(60);

        QStringList headers; 
        headers <	<setHorizontalHeaderLabels(headers); //     ,       ,     
}
     QTableWidget  ,      ,    。            
   
   
  
QTableWidget *table = new QTableWidget(60,56);  //   60 56     

추가 줄을 실현하려면 이 글을 참고하십시오. 여기에 링크를 첨부하십시오http://blog.csdn.net/xgbing/article/details/7774737
문제는 표가 너무 작아서 자기 소프트웨어 시스템이 또 무슨 미친 짓을 했는지 몰라서 리즈 함수를 호출해서 표의 크기를 조절했다.
table->resize(1366,200);

여기 1366은 어디서 얻은 건가요?나는 창의 해상도를 보고 함수를 호출한 것을 알았다
QDesktopWidget *d = QApplication::desktop();
int w = d->width();     //       
int h = d->height();	//       

나도 탭->resize(w,h)를 직접 양보해 본 적이 있다.그러나 이런 방법은 나로 하여금 스크롤 바를 잃게 할 뿐만 아니라, 비례가 보기 좋은 원인에 끼어 있어서, 나는 그것의 폭만 취했다.
셋째: 수조를 표에 쓴다
for (int column = 0; column < 33; ++column)   
{  
	QTableWidgetItem *item0;  
	item0 = new QTableWidgetItem;  
		
	double m=imageData[location][column];
	QString txt = QString("%1").arg(m);  //           string 
	item0->setText(txt);  
	table->setItem( 0 , column , item0);  // txt       	
      
}  
 
   
  

table->setItem(0, 0, new QTableWidgetItem(QString("1"))); 

Qstring은 문자열만 입력할 수 있기 때문에 십진수를string형으로 변환해야 합니다. 아래 문장을 통해 이 문제를 해결했습니다.
4
QString txt = QString("%1").arg(m);
그 중에서%1은 첫 번째 숫자로 대체하고%2는 두 번째 숫자로 대체한다. 쉽게 말하면 문자열 변수 매개 변수로 문자열의 최소 수치를 순서대로 대체한다. 예를 들어 다음과 같다.
QString status = QString("Processing file %1 of %2: %3") .arg(i).arg(total).arg(fileName);

"Processing file i of totalt: fileName"
다시 보기arg의 정의: QString::arg (int a, int field Width = 0, int base = 10, const QChar & fillChar = QLatin1 Char (') const, 여기field Width는 문자의 폭을 표시하고base는 진수를 표시합니다
관련 지식은 주로 이 편을 참고한다http://qimo601.iteye.com/blog/1420750

좋은 웹페이지 즐겨찾기