文章目錄
- 信号和槽
- 使用彈簧做界面
- 友善Debug語句
- 設定标題添加狀态欄
- 顯示圖檔
- 檔案操作
- QByteArray轉int
- QJson類讀GeoJson檔案
- TreeView的簡單使用
- Qt OpenGL的使用
- gdal的編譯及Qt加載
信号和槽
- connect
- 槽函數
- 設計界面 不能自定義
connect 更喜歡用這種形式:匿名函數+函數
connect(fontWidget,&QDialog::accepted,[this](){
});
connect(fontWidget,&QDialog::accepted,this,&MainWindow::changeFonts);
void MainWindow::changeFonts()
{
mout<<"改變字";
mout<<fontWidget->getFontSize();
ui->textEdit->setFontItalic(fontWidget->isitalic());
ui->textEdit->setFontPointSize(fontWidget->getFontSize());
ui->textEdit->setFont(fontWidget->getFont());
}
使用彈簧做界面
友善Debug語句
#include <QtDebug>
#define mout qDebug() <<"["<<__FILE__<<":"<<__LINE__<<"]"
mout<<"";
設定标題添加狀态欄
//設标題
this->setWindowTitle("EncodeDa");
//狀态欄
this->myStatusBar = statusBar();
this->myStatusBarLabel = new QLabel(this);
myStatusBarLabel->setText("字元:0,單詞數:0");
myStatusBar->addWidget(myStatusBarLabel);
顯示圖檔
QImage* img = new QImage;
QLabel* scrImg1 = new QLabel(this);
scrImg1->setGeometry(150,10,380,240);
img->load("F:/Reverse.bmp");
scrImg1->setPixmap(QPixmap::fromImage(img->scaled(230,230,Qt::KeepAspectRatio)));
emit scrImg3->clear();//可清除内容
檔案操作
- 打開檔案
- 按長度讀取
- 擷取檔案資訊
- 寫入檔案
- 檔案打開儲存對話框
打開檔案
按長度讀取
#include<QFile>
QFile file(path);
bool isOK = file.open(QIODevice::ReadOnly);//打開檔案
if(isOK == false){
mout <<"檔案打開失敗";
}else{
//讀取檔案
QByteArray s = file.read(sizeof (char));//read有幾種用法參考提示。
QByteArray w = file.read(sizeof (int));
}
file.close();//勿忘
//也可以使用
#include<QDataStream>
擷取檔案資訊
#include<QFileInfo>
//顯示檔案資訊
QFileInfo info(path);
QString fileInfo = QString("檔案名:%1 檔案大小:%2 檔案建立日期:%3")
.arg(info.fileName().toUtf8().data()).arg(info.size())
.arg(info.birthTime().toString("yyyy-MM-dd hh:mm:ss"));
ui->label_FileInfo->setText(fileInfo);
寫入檔案
QFile file;
file.setFileName(fileName);
bool isOK = file.open(QIODevice::WriteOnly);
if(isOK == true)
{
QString str = ui->textEdit->toPlainText();
//寫檔案需轉UTF-8
file.write(str.toLocal8Bit());
}else{
mout <<"儲存失敗";
}
file.close();//勿忘
檔案打開儲存對話框
#include<QFileDialog>
QString path = QFileDialog::getOpenFileName(this,"标題","此處初始目錄”,"JPEG Files(*.jpg);;PNG Files(*.png)");
if(path.isEmpty() == true)
{
mout <<"目錄為空";
}else{
}
QString fileName = QFileDialog::getSaveFileName(this,"标題","../1.txt","TXT(*.txt)");
if(fileName.isEmpty() == true)
{
mout <<"路徑為空";
}else{
}
QByteArray轉int
int MainWindow::bytesToInt(QByteArray bytes) {
int addr = bytes[0] & 0x000000FF;
addr |= ((bytes[1] << 8) & 0x0000FF00);
addr |= ((bytes[2] << 16) & 0x00FF0000);
addr |= ((bytes[3] << 24) & 0xFF000000);
return addr;
}
QJson類讀GeoJson檔案
GeoJson檔案格式規範說明
GeoJson資料下載下傳
也可以從ArcGIS導出GeoJson資料
QJson類前人經驗
主要是object、value、array之間的關系,注意對變體型的應用,給出一些讀取結構截圖
點
線
面
TreeView的簡單使用
直接參考這個文章
擷取TreeView資料的代碼
void MainWindow::slotMapTreeMenutoQString(bool checked)
{
QModelIndex curIndex = ui->mapTreeView->currentIndex();
QModelIndex index = curIndex.sibling(curIndex.row(),2); //同一行第3列元素的index
QModelIndex indexP1 = index.parent().sibling(index.parent().row(),2);
QModelIndex indexP2 = indexP1.parent().sibling(indexP1.parent().row(),2);
if(index.isValid())
{
if(indexP1.isValid()){
if(indexP2.isValid()){
//三級節點
this->showMessage(this->maps.at(indexP2.data().toInt())
->getLayer(indexP1.data().toInt())
->getObj(index.data().toInt())->toQString());
ui->textBrowser->setText(this->maps.at(indexP2.data().toInt())
->getLayer(indexP1.data().toInt())
->getObj(index.data().toInt())->toQString());
}else{
//二級節點
this->showMessage(this->maps.at(indexP1.data().toInt())->getLayer(index.data().toInt())->toQString());
ui->textBrowser->setText(this->maps.at(indexP1.data().toInt())->getLayer(index.data().toInt())->toQString());
}
}else{
//一節節點
this->showMessage(this->maps.at(index.data().toInt())->toQString());
ui->textBrowser->setText(this->maps.at(index.data().toInt())->toQString());
}
}
}
Qt OpenGL的使用
Learn OpenGL
主要參考這個
和這個
//調用Widget::Updata()可以重繪
emit openGLWidget->update();
gdal的編譯及Qt加載
這篇文章