天天看點

Qt C++ 基本學習筆記信号和槽使用彈簧做界面友善Debug語句設定标題添加狀态欄顯示圖檔檔案操作QByteArray轉intQJson類讀GeoJson檔案TreeView的簡單使用Qt OpenGL的使用gdal的編譯及Qt加載

文章目錄

  • 信号和槽
  • 使用彈簧做界面
  • 友善Debug語句
  • 設定标題添加狀态欄
  • 顯示圖檔
  • 檔案操作
  • QByteArray轉int
  • QJson類讀GeoJson檔案
  • TreeView的簡單使用
  • Qt OpenGL的使用
  • gdal的編譯及Qt加載

信号和槽

  1. connect
  2. 槽函數
  3. 設計界面 不能自定義

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();//可清除内容
           

檔案操作

  1. 打開檔案
  2. 按長度讀取
  3. 擷取檔案資訊
  4. 寫入檔案
  5. 檔案打開儲存對話框

打開檔案

按長度讀取

#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之間的關系,注意對變體型的應用,給出一些讀取結構截圖

Qt C++ 基本學習筆記信号和槽使用彈簧做界面友善Debug語句設定标題添加狀态欄顯示圖檔檔案操作QByteArray轉intQJson類讀GeoJson檔案TreeView的簡單使用Qt OpenGL的使用gdal的編譯及Qt加載

Qt C++ 基本學習筆記信号和槽使用彈簧做界面友善Debug語句設定标題添加狀态欄顯示圖檔檔案操作QByteArray轉intQJson類讀GeoJson檔案TreeView的簡單使用Qt OpenGL的使用gdal的編譯及Qt加載
Qt C++ 基本學習筆記信号和槽使用彈簧做界面友善Debug語句設定标題添加狀态欄顯示圖檔檔案操作QByteArray轉intQJson類讀GeoJson檔案TreeView的簡單使用Qt OpenGL的使用gdal的編譯及Qt加載

Qt C++ 基本學習筆記信号和槽使用彈簧做界面友善Debug語句設定标題添加狀态欄顯示圖檔檔案操作QByteArray轉intQJson類讀GeoJson檔案TreeView的簡單使用Qt OpenGL的使用gdal的編譯及Qt加載
Qt C++ 基本學習筆記信号和槽使用彈簧做界面友善Debug語句設定标題添加狀态欄顯示圖檔檔案操作QByteArray轉intQJson類讀GeoJson檔案TreeView的簡單使用Qt OpenGL的使用gdal的編譯及Qt加載

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加載

這篇文章

繼續閱讀