文章目錄:
來源
教程社區(qū)?
一:QT下載安裝
二:注意事項
1.在哪里寫程序
2.如何看手冊
3.技巧
三:常用函數(shù)
1.窗口?
2.相關?
3.按鈕
4.信號與槽函數(shù)?
5.常用欄?
菜單欄?
工具欄?
狀態(tài)欄
6.鉚接部件
7.文本編輯
8.背景圖
9.UI界面設計
10.常用對話框
11.實現(xiàn)界面的跳轉(zhuǎn)
12.常用控件?
QLabel標簽
QLineEdit文本編輯框
自定義控件使用
棧容器:設置點擊按鈕切換窗口
13.常用事件?
事件處理?
事件過濾器?
14.繪畫
15.QT添加視頻播放、QT添加背景音樂
16.QT數(shù)據(jù)庫Mysql操作
四:常見錯誤
1.QT解決中文亂碼
2.添加 "plainTextEdit" 成員變量到 "Ui::MainWindow" 類中
3.DirectShowPlayerService::doRender: Unresolved error code 0x80040266
4.DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80004005 ()
5.error: C1060: 編譯器的堆空間不足
6.file not recognized: File format not recognized
7. QMYSQL driver not loaded;QSQLITE QODBC QODBC3 QPSQL QPSQL7
來源
知識點來源:總統(tǒng)來說講的可以,但是會有一些錯誤需要自己去解決
教程社區(qū)?
教程:Qt 快速入門系列教程、Qt參考文檔、Qt5編程入門教程(charge)
社區(qū):QT開源社區(qū)
一:QT下載安裝
第一種 Qt Downloads第二種?QT在線安裝Qt Downloads第三種 QT一鍵下載第四種 QT官方離線安裝包第五種 QT利用常用鏡像下載??【看選擇鏡像決定速度】第六種 QT直接下載??提取碼: vqzw【快】第七章 QT利用鏡像在線安裝【快】 清華、 中科大、 中互信、 阿里云(等等 可以參考第五種里面的鏡像地址)
二:注意事項
1.在哪里寫程序
在widget.cpp中寫程序
2.如何看手冊
在QT Creator的幫助 或者 Assistant中利用索引? public function或public slots查看
3.技巧
創(chuàng)建類名:第一個字母大寫 ctrl +i :代碼自動對齊 alt + enter:可以進行跳轉(zhuǎn)
三:常用函數(shù)
1.窗口?
//修改名字 this->setWindowTitle ("第一個窗口"); //設置窗口 this->resize(800,600); //設置固定大小 this->setFixedSize(500,500);
2.相關?
//打印函數(shù) #include <QDebug> qDebug<<""; //Lamdba表達式用于定義并創(chuàng)建匿名的函數(shù)對象,來簡化編程工作 [](){} // 無mutable那么參數(shù)就會報錯
3.按鈕
//按鈕 #include <QPushButton> //添加按按鈕方法一 QPushButton *button = new QPushButton; //button->show(); //設置按鈕的父對象在窗口里面 button->setParent(this); //設置按鈕位置 button->move(100,100); //設置按鈕內(nèi)容 button->setText("第一個按鈕"); //設置按鈕大小 button->setFixedSize(150,60); //添加按按鈕方法二 QPushButton *button1 = new QPushButton("第二個按鈕",this);
4.信號與槽函數(shù)?
//信號和槽 n+其他 發(fā)送介紹 可以嵌套聯(lián)動 connect(sender, signal, receiver, slot); QPushButton *button1 = new QPushButton("第二個按鈕",this); //信號與槽實現(xiàn)點擊按鈕關閉窗口 connect(button1,&QPushButton::clicked,this,&Widget::close); //a.信號在.h文件的signals下面聲明返回類型和函數(shù)void hungury(),槽函數(shù)在.h文件的public slots下面聲明返回類型和函數(shù)void treat() //b.在.cpp文件中定義聲明的函數(shù) void Student::treat(){qDebug()<<"請吃飯"} void Teacher::hungury(){qDebug()<<"老師餓"} //c.在widget.h的public下面定義對象,并導入對象的頭文件Teacher *tea;student *stu; include "teacher.h" #include "student.h" //d.在widget.cpp中創(chuàng)建對象this- >tea = new Teacher();this- >stu =new Student();調(diào)用連接函數(shù)connect(tea,&Teacher: : hungury,stu,&Student: :treat);后面調(diào)用Classover() //e.在widget.h的public下面聲明觸發(fā)事件void Classover()、在widget.cpp中定義觸發(fā)事件發(fā)送void Widget::Classover(){emit teacher->hungury();} //如果有參數(shù)且重載了,需要利用函數(shù)指針指向函數(shù)地址,然后在做連接 // void ( Teacher : : *teachersignal) (Qstring)= &Teacher : : hungury; // void (student : : *studentslot)(Qstring)= &student : :treat; // connect(tea , teachersignal,stu ,studentslot) ;
5.常用欄?
菜單欄?
//創(chuàng)建菜單欄 #include <QMenuBar> //創(chuàng)建菜單 #include <QMenu> //創(chuàng)建菜單項 子菜單 #include <QAction> //創(chuàng)建菜單欄 //QMenuBar *menubar = new QMenuBar(this); //this->setMenuBar(menubar); QMenuBar *menubar = menuBar(); this->setMenuBar(menubar); //創(chuàng)建菜單 QMenu *menu1 = new QMenu("文件"); QMenu *menu2 = new QMenu("編輯"); QMenu *menu3 = new QMenu("構建"); //添加菜單進去 menubar->addMenu(menu1); menubar->addMenu(menu2); menubar->addMenu(menu3); //創(chuàng)建菜單項子菜單 QAction *act1 = new QAction("打開文件"); QAction *act2 = new QAction("關閉文件"); QAction *act3 = new QAction("另存文件"); //把子菜單添加到菜單 menu1->addAction(act1); menu2->addAction(act2); menu3->addAction(act3); //實現(xiàn)點擊關閉窗口 connect(act2,&QAction::triggered,this,&QMainWindow::close);
工具欄?
//創(chuàng)建工具欄 #include <QToolBar> //創(chuàng)建工具欄 QToolBar *toolbar = new QToolBar(this); //把工具欄添加到窗口中 this->addToolBar(toolbar); //this->addToolBar(Qt::LeftToolBarArea,toolbar); //給工具欄添加類容 toolbar->addAction(act1); toolbar->addAction(act2); toolbar->addAction(act3); QAction *act4 = new QAction("工具"); toolbar->addAction(act4); //修改工具欄不可移動 默認是可以移動的 //toolbar->setMovable(false); //設置停靠區(qū)域 // Qt:: LeftToolBarArea // ??吭谧髠? // Qt ::RightToolBarArea // 停靠在右側 // Qt::TopToolBarArea // ??吭陧敳? // Qt :: BottomToolBarArea // ??吭诘撞? // Qt ::Al1ToolBarAreas // 以上四個位置都可停靠 toolbar->setAllowedAreas (Qt::LeftToolBarArea | Qt::RightToolBarArea);//需要在addToolBar指定具體位置 //設置工具欄的浮動狀態(tài) 默認可懸浮窗口 //toolbar->setFloatable(false);
狀態(tài)欄
//創(chuàng)建狀態(tài)欄 #include <QStatusBar> //狀態(tài)欄信息 #include <QLabel> //創(chuàng)建狀態(tài)欄 QStatusBar *statusbar = statusBar(); //QStatusBar *statusbar = new QStatusBar(this); //把狀態(tài)欄放到窗口上去 this->setStatusBar(statusbar); //增加信息 //臨時信息,如果有臨時會覆蓋正式 statusbar->showMessage("頁面顯示成功",1000); //正式信息 左側 QLabel *label1 = new QLabel("打開打開",this); statusbar->addWidget(label1); //永久信息 右側 QLabel *label2 = new QLabel( "www.baidu.com",this); statusbar->addPermanentWidget(label2);
6.鉚接部件
//鉚接部件 #include <QDockWidget> //創(chuàng)建鉚接部件(浮動窗口) QDockWidget *dockwidget = new QDockWidget("鉚接部件",this); //添加到窗口當中 this->addDockWidget(Qt::TopDockWidgetArea,dockwidget);
7.文本編輯
//核心部件(中心部件) #include <QTextEdit> //核心部件(中心部件) //文本編輯記事本 QTextEdit *edit = new QTextEdit("文本編輯",this); this->setCentralWidget(edit);
8.背景圖
要添加資源文件resources,路徑放在項目的同目錄下 //背景圖片 //聲明部件 QWidget *widget = new QWidget(); widget->setAutoFillBackground(true);//鋪滿 //定義畫板 QPalette palette; //定義照片 QPixmap pixmap(":/images/gass.png"); //把照片印刷到畫板 palette.setBrush(QPalette::Window, QBrush(pixmap)); widget->setPalette(palette); widget->show(); //給菜單項加載圖片 //創(chuàng)建圖片控件 QPixmap pix; //選擇圖片 pix.load(":/image/add.png"); //給菜單項設置圖片 act1->setIcon(QIcon(pix));
9.UI界面設計
首先要勾選ui創(chuàng)建的時候 第一種:直接在forms的mainwindow.ui中進行拖拽添加(感覺有點像DW) 第二種:代碼添加 //比如 添加一個狀態(tài)欄 this->resize(800,600); ui->setupUi(this); statusBar()->showMessage("顯示成功",3000);
10.常用對話框
//對話框 #include "QDialog" //模態(tài)對話框 會阻塞其他 QDialog dialog; dialog.setWindowTitle(tr("Hello, dialog!")); dialog.exec(); //非模態(tài)對話框 //QDialog dialog(this);會被析構 //dialog.setWindowTitle(tr("Hello, dialog!")); //dialog.show(); QDialog *dialog = new QDialog; //dialog 使用 new 在堆上分配空間,卻一直沒有 delete,那么這里設置自動銷毀 dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle(tr("Hello, dialog!")); dialog->show();
//文件對話框 #include "mainwindow.h" #include "ui_mainwindow.h" //對話框 #include "QDialog" //文件對話框 #include "QFileDialog" //打印 #include "QDebug" //用于顯示純文本編輯框 #include "QPlainTextEdit" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { this->resize(800,600); ui->setupUi(this); //標準對話框:內(nèi)置的一系列對話框 // ?QColorDialog: 選擇顏色; // ?QFileDialog: 選擇文件或者目錄; // ?QFontDialog: 選擇字體; // ?QInputDialog: 允許用戶輸入一個值,并將其值返回; // ?QMessageBox: 模態(tài)對話框,用于顯示信息、詢問問題等; // ?QPageSetupDialog: 為打印機提供紙張相關的選項; // ?QPrintDialog: 打印機配置; // ?QPrintPreviewDialog:打印預覽; // ?QProgressDialog: 顯示操作過程。 ui->pushButton->setFixedSize(200,50); ui->pushButton_2->setFixedSize(200,50); //在按鈕出右鍵設置轉(zhuǎn)到槽,之后編輯邏輯代碼 } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { //父對象指針 文件對話框的標題 打開文件路徑 文件過濾器 QString path = QFileDialog::getOpenFileName(this,tr("打開文件"), "./",tr("Text Files(*.txt);;Images(*.png *.jpg)")); QString fileName = "example.txt"; QTextEdit *plainTextEdit = new QTextEdit(this); if (!fileName.isEmpty()) //ui->plainTextEdit->appendPlainText("fileName"); plainTextEdit->insertPlainText("Plain text to append"); } void MainWindow::on_pushButton_2_clicked() { //QTextEdit *plainTextEdit = new QTextEdit(this); QPlainTextEdit *editor = new QPlainTextEdit(); QStringList filesName = QFileDialog::getOpenFileNames(this,"打開文件","./","Images (*.png *.xpm *.jpg)"); for(int i=0;i<filesName.count();i++) //qDebug()<<filesName.at(i); //plainTextEdit->insertPlainText(filesName.at(i)); editor->appendPlainText(filesName.at(i)); }
//顏色對話框 #include "mainwindow.h" #include "ui_mainwindow.h" //對話框 #include <QDialog> //文件對話框 #include <QFileDialog> //打印 #include <QDebug> //用于顯示純文本編輯框 #include <QPlainTextEdit> //顏色對話框 #include <QColorDialog> #include <QPalette> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { setFixedSize(800,600); ui->setupUi(this); // 創(chuàng)建 plainTextEdit 對象 plainTextEdit = new QPlainTextEdit(this); // 設置 plainTextEdit 的大小和位置 plainTextEdit->setGeometry(100, 100, 300, 200); // 將 plainTextEdit 添加到窗口中 this->setCentralWidget(plainTextEdit); ui->pushButton_3->setFixedSize(200,50); //在按鈕出右鍵設置轉(zhuǎn)到槽,之后編輯邏輯代碼 this->plainTextEdit->setFixedSize(400,400); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_3_clicked() { //QPalette pal = ui->plainTextEdit->palette();//獲取現(xiàn)有palette QPalette pal = this->plainTextEdit->palette();//獲取現(xiàn)有palette QColor iniColor = pal.color(QPalette::Text);//現(xiàn)有文字顏色 QColor color = QColorDialog::getColor(iniColor,this,"選擇顏色"); //判斷選擇顏色是否有效,如果有效設置編輯器字體顏色 if(color.isValid()){ pal.setColor(QPalette::Text,color); this->plainTextEdit->setPalette(pal); } }
常用對話框?
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDialog> #include <QDebug> #include <QFileDialog> #include <QColorDialog> #include <QFontDialog> #include <QPalette> #include <QMessageBox> #include <QInputDialog> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { setFixedSize(800,600); ui->setupUi(this); // 創(chuàng)建 plainTextEdit 對象 plainTextEdit = new QPlainTextEdit(this); // 設置 plainTextEdit 的大小和位置 plainTextEdit->setGeometry(100, 100, 300, 200); // 將 plainTextEdit 添加到窗口中 this->setCentralWidget(plainTextEdit); ui->pushButton->setFixedSize(200,30); ui->pushButton_2->setFixedSize(200,30); ui->pushButton_3->setFixedSize(200,30); ui->pushButton_4->setFixedSize(200,30); ui->pushButton_5->setFixedSize(200,30); ui->pushButton_6->setFixedSize(200,30); this->plainTextEdit->setFixedSize(400,400); } //文件對話框 MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { QString fileName = QFileDialog::getOpenFileName(this, tr("打開文件"),"./", tr("Images (*.png *.xpm *.jpg);;Text (*.txt)")); if(!fileName.isEmpty()) this->plainTextEdit->appendPlainText(fileName); } //文件對話框 void MainWindow::on_pushButton_2_clicked() { QStringList filesName = QFileDialog::getOpenFileNames( this, "打開文件", "./", "Images (*.png *.xpm *.jpg)"); for(int i=0;i<filesName.count();i++) { //qDebug()<<filesName.at(i); this->plainTextEdit->appendPlainText(filesName.at(i)); } } //顏色對話框 void MainWindow::on_pushButton_3_clicked() { QPalette pal = this->plainTextEdit->palette();//獲取現(xiàn)有palette QColor iniColor = pal.color(QPalette::Text);//現(xiàn)有文字顏色 QColor color = QColorDialog::getColor(iniColor,this,"選擇顏色"); //判斷選擇顏色是否有效,如果有效設置編輯器字體顏色 if(color.isValid()){ pal.setColor(QPalette::Text,color); this->plainTextEdit->setPalette(pal); } } //字體對話框 void MainWindow::on_pushButton_4_clicked() { bool ok; QFont iniFont = this->plainTextEdit->font();//獲取原有文本框字體 QFont font = QFontDialog::getFont(&ok, iniFont, this); if (ok) {//如果ok=true this->plainTextEdit->setFont(font); } } //消息對話框 void MainWindow::on_pushButton_5_clicked() { //錯誤彈窗 //QMessageBox::critical(this,"錯誤消息對話框","程序出現(xiàn)錯誤"); //警告彈窗 // QMessageBox::warning(this,"警告消息對話框","程序出現(xiàn)警告"); //消息彈窗 // QMessageBox::information(this,"消息對話框","程序一切正常",QMessageBox::Ok,QMessageBox::NoButton); //消息選擇彈窗 QMessageBox::StandardButton result; result=QMessageBox::question(this,"選擇消息框","文件已修改,是否保存",QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,QMessageBox::NoButton); if(result==QMessageBox::Yes) qDebug()<<"正在保存"; else if(result==QMessageBox::No) qDebug()<<"不保存"; else qDebug()<<"取消操作"; } //輸入對話框 void MainWindow::on_pushButton_6_clicked() { //生成輸入文字對話框 bool ok; QString text = QInputDialog::getText(this, tr("輸入文字對話框"),tr("請輸入文字"), QLineEdit::Normal,"demo", &ok); if (ok && !text.isEmpty()) this->plainTextEdit->appendPlainText(text); }
11.實現(xiàn)界面的跳轉(zhuǎn)
要新建一個QT設計師界面類窗口
效果圖
頁面跳轉(zhuǎn)
界面
mainwindow.h
//導入需要跳轉(zhuǎn)的界面 #include "form.h" private: Ui::MainWindow *ui; //實例化一個窗口 Form *new_window; };
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); this->new_window = new Form(); //從登陸界面跳轉(zhuǎn) connect(ui->pushButton,&QPushButton::clicked,this,[=](){ this->hide();//登陸界面隱藏 this->new_window->show();//主界面顯示 }); //從主界面跳轉(zhuǎn) connect(this->new_window,&Form::back,this,[=](){ this->new_window->hide();//主界面隱藏 this->show();//登陸界面顯示 }); }
??form.h
private: Ui::Form *ui; //返回去要發(fā)送信號 只是聲明,不需要定義實現(xiàn) signals: void back(void); };
?form.cpp
Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) { ui->setupUi(this); //點擊返回按鈕,跳轉(zhuǎn)回到登陸界面 connect(ui->pushButton,SIGNAL(clicked(bool)),this,SIGNAL(back())); }
12.常用控件?
QLabel標簽
#include "widget.h" #include "ui_widget.h" //標簽 #include <QLabel> //動畫 #include <QMovie> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //定義一個對象 QLabel *label = new QLabel(this); //顯示文字 label->setText("這是代碼實現(xiàn)的標簽"); //顯示超鏈接 ui->label1->setText("<h1><a href=\"https://www.baidu.com\">百度</a></h1>"; ui->label1->setOpenExternalLinks(true);//設置連接可以自動打開 //顯示圖片 QPixmap pixmap; pixmap.load(":/image/cat.png"); ui->label_image->setPixmap(pixmapp); //顯示動圖 QMovie *movie = new QMovie( ":/image/cat.gif"); ui->label_gif->setMovie(movie) ; movie->start(); //點擊按鈕暫停 connect(ui->pushButton,&QPushButton: :clicked,this,[=](){ movie->stop(); }); } Widget::~Widget() { delete ui; }
QLineEdit文本編輯框
#include "widget.h" #include "ui_widget.h" //文本編輯框 #include <QLineEdit> #include <QDebug> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //定義創(chuàng)建一個編輯框 QLineEdit *edit =new QLineEdit(this); //設置內(nèi)容 edit->setText("這是代碼創(chuàng)建的編輯框"); //獲取信息 QString str = ui->lineEdit->text(); qDebug()<<str; // ?QLineEdit::Normal 模式顯示方式,按照輸入的內(nèi)容顯示。 // ?QLineEdit::NoEcho 不顯示任何內(nèi)容,此模式下無法看到用戶的輸入。 // ?QLineEdit::Password 密碼模式,輸入的字符會根據(jù)平臺轉(zhuǎn)換為特殊字符。 // QLineEdit::PasswordEchoOnEdit 編輯時顯示字符否則顯示字符作為密 //給編輯框輸入信息設置密碼模式 ui->lineEdit->setEchoMode(QLineEdit::Password); //設置左 上 右 下保持距離 ui->lineEdit->setTextMargins(100,0,0,0); } Widget::~Widget() { delete ui; }
自定義控件使用
//自定義控件使用 新建一個設計界面類Form、右鍵選擇提升,把提升類名稱對應,勾選全局包含 //form.cpp //數(shù)字改變跟著滑動 connect(ui->spinBox,SIGNAL(valueChanged(int)), ui->horizontalslider,SLOT(setValue(int))); //滑動距離改變從而數(shù)字跟著改變 connect(ui->horizontalslider,SIGNAL(valuechanged(int)), ui->spinBox,SLOT(setValue(int)); //widget.cpp //點擊按鈕就自動設置一半 connect(ui->pushButton,SIGNAL(clicked(bool)) , ui->widget,SLOT(setNum())); //form.h public slots: void setNum(); //form.cpp void Form::setNum(){//類名加函數(shù) ui->horizontalslider->setValue(5ol ; }
棧容器:設置點擊按鈕切換窗口
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //設置棧容器默認顯示窗口 //新建2個設計界面類,主界面添加棧容器,里面分別進行提升 ui->stackedWidget->setcurrentIndex(0); //點擊第一個按鈕跳轉(zhuǎn)界面 connect(ui->pushButton ,&QPushButton::clicked,this,[=](){ ui->stackedwidget->setcurrentIndex(0); }); //點擊第二個按鈕跳轉(zhuǎn)界面 connect(ui->pushButton_2,&QPushButton: :clicked,this,[=](){ ui->stackedwidget->setcurrentIndex(1) ; }); } Widget::~Widget() { delete ui; }
13.常用事件?
事件 事件經(jīng)過以下:事件派發(fā)----》事件過濾器----》事件分發(fā)---》事件處理階段。 事件:系統(tǒng)或者Qt本身在不同的時刻發(fā)出的。 事件循環(huán)開始: exec()函數(shù)。 事件處理有以下四個過程: 事件處理:重寫鼠標按下事件、鼠標釋放事件,這個是最簡單的形式及功能。 事件分發(fā):重新event函數(shù)。 事件過濾:重寫eventFilter,過濾特定對象的事件,或者所有對象的所有事件(QCoreApplication:instance). 事件派發(fā):(QCoreApplication::notify).
事件處理?
//重寫 widget.h protected: void closeEvent(QCloseEvent *event); void resizeEvent(QResizeEvent *event); //widget.cpp #include "widget.h" #include "ui_widget.h" //彈窗 #include <QMessageBox> //關閉事件 #include <QCloseEvent> //打印 #include <QDebug> //大小事件 #include <QResizeEvent> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } //重寫窗口關閉 void Widget::closeEvent(QCloseEvent *event) { //彈出提示框 int ret = QMessageBox::question(this,"提示", "您確定要關閉窗口嗎?"); if(ret==QMessageBox::Yes) { event->accept(); } else{ event->ignore(); } } //重寫窗口大小 void Widget::resizeEvent(QResizeEvent *event) { qDebug()<<"oldsize="<<event->oldSize(); qDebug()<<"newsize="<<event->size(); }
#include "mylabel.h" #include <QDebug> #include <QMouseEvent> MyLabel::MyLabel(QWidget *parent) : QLabel(parent) { this->setMouseTracking(true);//設置追蹤模式 } void MyLabel::mousePressEvent(QMouseEvent *ev) { if( ev->button() == Qt::LeftButton){ qDebug()<<"鼠標左鍵按下了"; } else if( ev->button() == Qt::RightButton) { qDebug()<<"鼠標右鍵按下了"; } else{ qDebug()<<"鼠標其他按下了"; } } void MyLabel::mouseReleaseEvent(QMouseEvent *ev) { qDebug()<<"在標簽上的鼠標釋放了"; } void MyLabel::mouseMoveEvent(QMouseEvent *ev) { qDebug()<<"鼠標移動"<<ev->x()<<","<<ev->y(); QString str; str.sprintf("<center><h1>(%d ,%d)</h1></center>",ev->x(),ev->y()); this->setText(str); }
事件過濾器?
//事件過濾器 bool Mainwindow::eventFilter(Q0bject *obj,QEvent *event){ if (obj == textEdit) { if (event->type() == QEvent: :KeyPress) { QKeyEvent *keyEvent = static_cast<QKeyEvent *> ( event); qDebug() <<"Ate key press" << keyEvent->key(); return true; }else { return false; } }else { //pass the event on to the parent class return QMainwindow : : eventFilter(obj,event); } }
14.繪畫
QPainyer:畫筆 QPainterDevice:繪圖設備(紙張、墻壁) QPaintEngine:畫筆(QPainter)在不同的設備上進行繪制的統(tǒng)一的接口(一般不考慮)
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QPaintEvent> #include <QDebug> //畫筆 #include <QPainter> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); this->setFixedSize(800,600); } MainWindow::~MainWindow() { delete ui; } void paintEvent(QPaintEvent *p){ QPainter painter; painter.drawLine (80,100,500, 500); painter.setPen(Qt::red); painter.drawRect(0,0,400,200); painter.setPen(QPen(Qt::blue,5)); painter.drawEllipse(0,0,400,20); }
15.QT添加視頻播放、QT添加背景音樂
?.pro文件
QT += core gui multimedia multimediawidgets CONFIG += resources_big QT +=multimedia
.cpp文件
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QtMultimedia/QtMultimedia> #include <QtMultimediaWidgets/QVideoWidget> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); this->setFixedSize(800,600); //創(chuàng)建一個顯示視頻的控件 QVideoWidget* videowin = new QVideoWidget(this ); videowin->resize(400,300); //添加一個播放器 QMediaPlayer* player = new QMediaPlayer(this); player->setVideoOutput(videowin); //視頻 player->setMedia(QMediaContent(QUrl::fromLocalFile("F:/QT/demo06/page.mp4"))); //音樂 player->setMedia(QMediaContent(QUrl::fromLocalFile("F:/QT/demo06/mu.mp3"))); player->setVolume(50);//音量 //開始播放 player->play(); } MainWindow::~MainWindow() { delete ui; }
16.QT數(shù)據(jù)庫Mysql操作
QT連接Mysql數(shù)據(jù)庫
QTSQL數(shù)據(jù)庫:QSqlQuery查詢、查詢模型QSqlQueryModel、表格模型QSqlTableModel、關系表格模型QSqlRelationalTableModel?
四:常見錯誤
1.QT解決中文亂碼
在.pro文件后面加上#pro文件中,解決中文亂碼 msvc { QMAKE_CFLAGS += /utf-8 QMAKE_CXXFLAGS += /utf-8 }
如果還不行:在?工具->選項->文本編輯器->默認編碼改為UTF-8
2.添加 "plainTextEdit" 成員變量到 "Ui::MainWindow" 類中
您可以按照以下步驟將 "plainTextEdit" 成員變量添加到 "Ui::MainWindow" 類中: 1.打開 "ui_MainWindow.h" 文件,該文件是在 Qt Creator 中自動生成的。 2.在 "Ui::MainWindow" 類的定義中,找到一個未使用的成員變量聲明區(qū)域。 3.在該區(qū)域中添加以下代碼來聲明 "plainTextEdit" 成員變量: QPlainTextEdit *plainTextEdit; 4.保存文件并重新生成代碼。 5.在 "MainWindow.cpp" 文件中,在構造函數(shù)或初始化方法中,為 "plainTextEdit" 成員變量分配內(nèi)存并設置初始值,例如: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { // ... // 創(chuàng)建 plainTextEdit 對象 plainTextEdit = new QPlainTextEdit(this); // 設置 plainTextEdit 的大小和位置 plainTextEdit->setGeometry(100, 100, 300, 200); // 將 plainTextEdit 添加到窗口中 this->setCentralWidget(plainTextEdit); }
3.DirectShowPlayerService::doRender: Unresolved error code 0x80040266
解碼問題:安裝一個DirectShow解碼器 如:LAV?Filters?重新編譯運行
LAV Filters的下載地址如下:http://files.1f0.de/lavf/LAVFilters-0.65.exe
LAV 過濾器可在此處找到:?https://www.videohelp.com/software/LAV-Filters
4.DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80004005 ()
路徑或者名稱問題:將視頻文件放在全英文且無空格的路徑下?修改路徑后重新編譯運行
5.error: C1060: 編譯器的堆空間不足
?.pro文件中添加CONFIG += resources_big
6.file not recognized: File format not recognized
解決辦法:在項目里面選擇自己合適的型號?
查看型號
?修改自己項目型號
![]()
?
文章來源:http://www.zghlxwxcb.cn/news/detail-604316.html
7. QMYSQL driver not loaded;QSQLITE QODBC QODBC3 QPSQL QPSQL7
QT連接數(shù)據(jù)庫報錯-QT沒有mysql驅(qū)動的解決辦法SqlDatabase: QMYSQL driver not loadedQSqlDatabase: available drivers文章來源地址http://www.zghlxwxcb.cn/news/detail-604316.html
到了這里,關于基于C++的QT基礎教程學習筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!