說明:環境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 選擇版本信息。
最後:
我初試效果如下: