【QT設計】QT學習11個心得總結

說明:環境vs2013+QT5.5(x64)
小白學QT,ui先畫界面,槽函數放實現功能函數,最後鏈接槽函數與功能函數。
第一步:設計界面
在這裏插入圖片描述
第二步:.hpp的class中添加槽函數
private slots: 定義槽函數

第三步:.cpp中 實現槽函數,並且鏈接槽函數與信號
ui.setupUi(this);下面鏈接
connect(ui.start_button, SIGNAL(clicked()), this, SLOT(on_start()));
這句話的意思是:點擊了啓動按鈕就跳轉on_start()函數執行內容。

總結如下

1 信號常用觸發形式

類型查看可參考總結第二點。
觸發形式——信號類型
clicked——QPushbutton
triggered——QAction
toggled ——QRadioButton(單選按鈕)
在這裏插入圖片描述
菜單欄上的是QMenu
在這裏插入圖片描述
紅色框中是QAction
在這裏插入圖片描述

QRadiobutton如下
在這裏插入圖片描述

2界面信息查看

對象查看器包含你界面所有的信息;
左邊1表示你對應按鈕或者label的別名,比如啓動程序這個按鈕別名爲start_button,在程序中空控制這個按鈕就必須用start_button。右邊2表示類型。
在這裏插入圖片描述
在這裏插入圖片描述

3多行顯示信息

2.1 text edit
在這裏插入圖片描述
ui.textedit->append(“hello”);
delay(1);
ui.textedit->append(“bye”);
append函數可以實現自動換行顯示。
2.2text Browser
在這裏插入圖片描述
ui.textbrowser->append(“hello”);
PS:delay函數用處:當現實文字信息換行時,會等到整個槽函數執行完成之後纔將全部信息打印出來;這是在中間插一句delay();打斷一下即可正常顯示。
#include < QTime>

void delay(unsigned int msec)
{
	QTime dieTime = QTime::currentTime().addMSecs(msec);
	while (QTime::currentTime() < dieTime)
		QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}

4如何更換字體顏色 大小

QString str = QString("

<font size="%1" color="%2">%3

").arg(6).arg(“red”).arg(“svm test”);//對應修改arg括號中即可
ui.testtext->append(str);

5槽函數定義

在你的類添加一個private slots:
所有槽函數就放在下面,槽函數指點擊相應按鈕觸發的運行的函數。
在這裏插入圖片描述

6鏈接信號與槽

start_button:是啓動按鈕的別名,on_start 表示槽函數
connect(ui.start_button, SIGNAL(clicked()), this, SLOT(on_start()));
在這裏插入圖片描述
這句話的意思是:點擊了啓動按鈕就跳轉on_start()函數執行內容。

7退出界面函數

void on_bar_exit()
{
QApplication* app;
app->exit(0);
}

8打開文件,比如選擇訓練集或者測試集

頭文件引用:
#include “QFileDialog”

QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setWindowTitle(tr("Choose Image"));
//設置默認文件路徑
fileDialog->setDirectory(".");
//設置文件過濾器
fileDialog->setNameFilter(tr("Images(*.png *.jpg *.jpeg *.bmp)"));
//設置可以選擇多個文件,默認爲只能選擇一個文件QFileDialog::ExistingFiles
fileDialog->setFileMode(QFileDialog::ExistingFiles);
//設置視圖模式
fileDialog->setViewMode(QFileDialog::Detail);
//存入所有文件的路徑
QStringList fileNames;
if (fileDialog->exec())
{
	fileNames = fileDialog->selectedFiles();
}
//將QString轉換爲String用於Opencv讀取路徑
QString fileName;
for (int i = 0; i < fileNames.length(); i++)
{
	//將QStringList逐一讀取到QString
	fileName = fileNames[i];
}

9 Mat類轉爲QImage作顯示

圖片顯示框一般爲ui中的Qlabel類
在這裏插入圖片描述

cv::Mat rgb;
m_src1 = cv::imread("1.png");
if (m_src1.empty()){ printf("no data!"); }
else{
	if (m_src1.channels() == 3)
	{
		cvtColor(m_src1, rgb, CV_BGR2RGB);
		m_test = QImage((const unsigned char*)(rgb.data),
			rgb.cols, rgb.rows, rgb.cols*rgb.channels(),
			QImage::Format_RGB888);
	}
	else
	{
		m_test = QImage((const unsigned char*)(m_src1.data),
			m_src1.cols, m_src1.rows, rgb.cols*m_src1.channels(),
			QImage::Format_RGB888);
	}
	ui.Qlabel->setPixmap(QPixmap::fromImage(m_test).scaled(ui.src_test->size()));
	ui.Qlabel->resize(ui.src_test->pixmap()->size());
}

10 int /float 轉Qstring

		int i=10;
		QString PT1Str = QString("%1").arg(i);
		ui.testtext->append( PT1Str);

11 當報錯找不到generated文檔時

在這裏插入圖片描述
首次點擊QT5 Qt Project Setting
在這裏插入圖片描述

version 選擇版本信息。
在這裏插入圖片描述

最後:
我初試效果如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章