一.對話框內(nèi)容概要
- 菜單欄—>菜單項—>模態(tài)窗口/非模態(tài)窗口
- 工具欄
- 狀態(tài)欄
- 核心控件
- 浮動窗口
二 .操作步驟:
1.新建項目,在ui界面添加textEdit控件(顯示內(nèi)容)
2.包含頭文件
#include "QPushButton"
#include "QStatusBar"
#include "QLabel"
#include "QTextEdit"
#include "QToolBar"
#include "QDockWidget"
#include "QDialog"
#include "iostream"
#include "QDebug"
3 .實現(xiàn)代碼
1).添加菜單欄(QMenuBar)
法一:
QMenuBar *mBar=menuBar();//
//添加菜單
//給菜單欄加一個菜單"文件",賦給指針pFile,這一步?jīng)]有用,下面有用
QMenu *Menu = mBar->addMenu(QString::fromLocal8Bit("文件"));
法二:
//因為menuBar()是QMenuBar的一個成員函數(shù),返回的是一個對象,所以它可以像對象一樣調(diào)用函數(shù),可直接
menuBar()->addMenu(QString::fromLocal8Bit("文件"));
關(guān)于:fromLocal8Bi()函數(shù)
? ? *QT默認(rèn)的編碼是unicode,不能正確顯示中文的
? ? *windows默認(rèn)使用(GBK/GB2312/GB18030)
? ? *.使用fromLocal8Bit()函數(shù),實現(xiàn)了從本地字符集GB到Unicode的轉(zhuǎn)換,用于處理漢語顯示亂碼等問題
2).添加菜單項(QAction)(按下文件,會出現(xiàn)新建、保存那些菜單項),即添加動作addAction
? ? . 添加“新建”菜單項
//給菜單"文件"添加一個動作"新建"
QAction *act = Menu->addAction( QString::fromLocal8Bit("新建"));
? ? . 單擊新建,彈出模態(tài)對話框 -QDialog
connect(act ,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec(); //.exec()是對話框?qū)傩宰優(yōu)槟B(tài),含義是執(zhí)行到這里就不會動(主函數(shù)里面也是一樣)
}
);
? ? . 添加“”打開“”菜單項
//給菜單"文件"添加一個動作"打開"
QAction *open = Menu->addAction(QString::fromLocal8Bit("打開"));
? ? . 單擊打開,彈出非模態(tài)對話框 -QDialog
connect(open ,&QAction::triggered,//triggered和clicked類似,但應(yīng)用范圍更廣
[=]()
{
/*****法一******/
dlg1; //注意這里需要將dlg定義為全局變量,這樣運行完show(),dlg就不會釋放了,否則運行完,釋放dlg,非模態(tài)對話框?qū)⒁婚W而過
dlg1.show(); //.show()是對話框?qū)傩詾槟B(tài)
/*****法二******/ //缺點:在程序結(jié)束時,指針才會釋放,若多次使用該對話框,導(dǎo)致內(nèi)存越用越小,
/*QDialog *p = new QDialog(this);
p->show();*/
/*****法三******/
/*QDialog *p = new QDialog(this);
p->setAttribute(Qt::WA_DeleteOnClose);//窗口關(guān)閉自動釋放內(nèi)存
p->show();*/
}
);
注:法一添加QDialog類型全局變量dlg1:
3).添加工具欄(QToolBar)(菜單項的快捷方式)
QToolBar *toolBar = addToolBar("");
toolBar->addAction(act);//act為上面QAction 類型指針
注:給工具欄添加小控件的方法
QPushButton p = new QPushButton(this); // 在主窗口加一個按鈕類型指針
p->setText(QString::fromLocal8Bit(“(__)”));
toolBar->addWidget§;
//點擊按鈕,改變名稱
connect(p,&QPushButton::clicked,
= {
p->setText(QString::fromLocal8Bit(“1111”));
}
);
4).添加狀態(tài)欄(QStatusBar)
/***法一***/
QStatusBar *Bar = statusBar();
QLabel *label = new QLabel(this);
label->setText(QString::fromLocal8Bit("Narmal text file"));
Bar->addWidget(label);
/***法二***/
Bar->addWidget(new QLabel("2",this));
//若想在右邊添加狀態(tài)欄
Bar->addPermanentWidget(new QLabel("3",this));
5).添加浮動窗口(QDockWidget)
QDockWidget *DockWidge = new QDockWidget(this);
//第一個參數(shù),浮動窗口的位置
//第二個參數(shù),QDockWidget類型的指針
addDockWidget(Qt::RightDockWidgetArea,DockWidge);
//給浮動窗口加個編輯器TextEdit
QTextEdit *TextEdit = new QTextEdit(this);
DockWidge->setWindowTitle(QString::fromLocal8Bit("我是浮動窗口"));
DockWidge->setWidget(TextEdit);
整體代碼
在構(gòu)造函數(shù)部分添加:
//添加菜單欄
/*****法一*****/
QMenuBar *mBar=menuBar();//
//添加菜單
//給菜單欄加一個菜單"文件",賦給指針pFile,這一步?jīng)]有用,下面有用
QMenu *Menu = mBar->addMenu(QString::fromLocal8Bit("文件"));
/*****法二*****/
//因為menuBar()是QMenuBar的一個成員函數(shù),返回的是一個對象,所以它可以像對象一樣調(diào)用函數(shù),可直接
//menuBar()->addMenu(name);
//添加菜單項(按下文件,會出現(xiàn)新建、保存那些菜單項),添加動作
QAction *act = Menu->addAction( QString::fromLocal8Bit("新建"));//給菜單"文件"添加一個動作"新建"
//單擊新建,彈出模態(tài)對話框 -QDialog
//QAction *p1 = Menu->addAction(QString::fromLocal8Bit("模態(tài)對話框"));
connect(act ,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec(); //.exec()是對話框?qū)傩宰優(yōu)槟B(tài),含義是執(zhí)行到這里就不會動(主函數(shù)里面也是一樣)
}
);
Menu->addSeparator();//添加分割線,僅僅為了美觀
QAction *open = Menu->addAction(QString::fromLocal8Bit("打開"));//給菜單"文件"添加一個動作"打開"
//單擊打開,彈出非模態(tài)對話框
//QAction *p2 = Menu->addAction(QString::fromLocal8Bit("非模態(tài)對話框"));
connect(open ,&QAction::triggered,//triggered和clicked類似,但應(yīng)用范圍更廣
[=]()
{
/*****法一******/
dlg1; //注意這里需要將dlg定義為全局變量,這樣運行完show(),dlg就不會釋放了,否則運行完,釋放dlg,非模態(tài)對話框?qū)⒁婚W而過
dlg1.show(); //.show()是對話框?qū)傩詾槟B(tài)
/*****法二******/ //缺點:在程序結(jié)束時,指針才會釋放,若多次使用該對話框,導(dǎo)致內(nèi)存越用越小,
/*QDialog *p = new QDialog(this);
p->show();*/
/*****法三******/
/*QDialog *p = new QDialog(this);
p->setAttribute(Qt::WA_DeleteOnClose);//窗口關(guān)閉自動釋放內(nèi)存
p->show();*/
}
);
//添加工具欄,菜單項的快捷方式
QToolBar *toolBar = addToolBar("");
toolBar->addAction(act);
//給工具欄添加小控件
QPushButton *p = new QPushButton(this); //在主窗口加一個按鈕類型指針
p->setText(QString::fromLocal8Bit("(*^__^*)"));
toolBar->addWidget(p);
//點擊按鈕,改變名稱
connect(p,&QPushButton::clicked,
[=]()
{
p->setText(QString::fromLocal8Bit("1111"));
}
);
//狀態(tài)欄
QStatusBar *Bar = statusBar();
QLabel *label = new QLabel(this);
label->setText(QString::fromLocal8Bit("Narmal text file"));
Bar->addWidget(label);
//法二:
Bar->addWidget(new QLabel("2",this));
//若想在右邊添加狀態(tài)欄
Bar->addPermanentWidget(new QLabel("3",this));
//核心控件(中間內(nèi)容)
//浮動窗口-QDockWidget
QDockWidget *DockWidge = new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea,DockWidge);//第一個參數(shù),浮動窗口的位置
//第二個參數(shù),QDockWidget類型的指針
//給浮動窗口加個編輯器
QTextEdit *TextEdit = new QTextEdit(this);
DockWidge->setWindowTitle(QString::fromLocal8Bit("我是浮動窗口"));
DockWidge->setWidget(TextEdit);
4.運行結(jié)果:
補(bǔ)充:標(biāo)準(zhǔn)對話框(關(guān)于對話框和問題對話框)和文件對話框
一丶標(biāo)準(zhǔn)對話框
1.關(guān)于對話框(模態(tài)的)–QMessagebox
代碼:
? ? ? ? ? #include “QMessagebox”
QAction *p2 = Menu->addAction(QString::fromLocal8Bit("關(guān)于對話框"));
connect(p2 ,&QAction::triggered,
[=]()
{
QMessageBox::about(this,QString::fromLocal8Bit("關(guān)于"),
QString::fromLocal8Bit("關(guān)于QT"));
}
);
2.問題對話框(常用)–QMessagebox,一般退出時詢問是否保存的時候使用
代碼:
QAction *p3 = Menu->addAction(QString::fromLocal8Bit("問題對話框"));
connect(p3 ,&QAction::triggered,
[=]()
{
// QMessageBox::question(this,QString::fromLocal8Bit("我是名稱"),QString::fromLocal8Bit("are you OK"));
/****默認(rèn)的是YES/NO,若想改變按鈕名稱,則***/
QMessageBox::question(this,QString::fromLocal8Bit("我是名稱"),QString::fromLocal8Bit("are you OK"),
QMessageBox::Ok,
QMessageBox::Cancel);
/* switch(ret)
{
case QMessageBox::Ok:
qDebug()<<"";
break;
case QMessageBox::Cancel:
break;
default:
break;
}*/
}
);
二、文件對話框
代碼:
? ? ? ? ? #include “QFileDialog”
QAction *p4 = Menu->addAction(QString::fromLocal8Bit("文件對話框"));
connect(p4 ,&QAction::triggered,
[=]()
{
QFileDialog::getOpenFileName(this,//指定父對象
"對話框標(biāo)題",
"../" , //上一級路徑
"souce(*.cpp *.h);;Text(*.text);;all(*.*)" //*代碼所有的
);
}
);
?
戳戳小手幫忙點個免費的贊和關(guān)注吧,嘿嘿。