一.對話框內容概要 菜單欄—菜單項—模態窗口/非模態窗口 工具欄 狀態欄 核心控件 浮動窗口 二 .操作步驟: 1.新建項目,在ui界面添加textEdit控件(顯示內容) 2.包含頭文件 #include "QPu
一.對話框內容概要
- 菜單欄—>菜單項—>模態窗口/非模態窗口
- 工具欄
- 狀態欄
- 核心控件
- 浮動窗口
二 .操作步驟:
1.新建項目,在ui界面添加textEdit控件(顯示內容)
2.包含頭文件
#include "QPushButton"
#include "QStatusBar"
#include "QLabel"
#include "QTextEdit"
#include "QToolBar"
#include "QDockWidget"
#include "QDialog"
#include "iostream"
#include "QDebug"
3 .實現代碼
1).添加菜單欄(QMenuBar)
法一:
QMenuBar *mBar=menuBar();//
//添加菜單
//給菜單欄加一個菜單"文件",賦給指針pFile,這一步沒有用,下面有用
QMenu *Menu = mBar->addMenu(QString::fromLocal8Bit("文件"));
法二:
//因為menuBar()是QMenuBar的一個成員函數,返回的是一個對象,所以它可以像對象一樣調用函數,可直接
menuBar()->addMenu(QString::fromLocal8Bit("文件"));
關于:fromLocal8Bi()函數
? ? *QT默認的編碼是unicode,不能正確顯示中文的
? ? *windows默認使用(GBK/GB2312/GB18030)
? ? *.使用fromLocal8Bit()函數,實現了從本地字符集GB到Unicode的轉換,用于處理漢語顯示亂碼等問題
2).添加菜單項(QAction)(按下文件,會出現新建、保存那些菜單項),即添加動作addAction
? ? . 添加“新建”菜單項
//給菜單"文件"添加一個動作"新建"
QAction *act = Menu->addAction( QString::fromLocal8Bit("新建"));
? ? . 單擊新建,彈出模態對話框 -QDialog
connect(act ,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec(); //.exec()是對話框屬性變為模態,含義是執行到這里就不會動(主函數里面也是一樣)
}
);
? ? . 添加“”打開“”菜單項
//給菜單"文件"添加一個動作"打開"
QAction *open = Menu->addAction(QString::fromLocal8Bit("打開"));
? ? . 單擊打開,彈出非模態對話框 -QDialog
connect(open ,&QAction::triggered,//triggered和clicked類似,但應用范圍更廣
[=]()
{
/*****法一******/
dlg1; //注意這里需要將dlg定義為全局變量,這樣運行完show(),dlg就不會釋放了,否則運行完,釋放dlg,非模態對話框將一閃而過
dlg1.show(); //.show()是對話框屬性為模態
/*****法二******/ //缺點:在程序結束時,指針才會釋放,若多次使用該對話框,導致內存越用越小,
/*QDialog *p = new QDialog(this);
p->show();*/
/*****法三******/
/*QDialog *p = new QDialog(this);
p->setAttribute(Qt::WA_DeleteOnClose);//窗口關閉自動釋放內存
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).添加狀態欄(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));
//若想在右邊添加狀態欄
Bar->addPermanentWidget(new QLabel("3",this));
5).添加浮動窗口(QDockWidget)
QDockWidget *DockWidge = new QDockWidget(this);
//第一個參數,浮動窗口的位置
//第二個參數,QDockWidget類型的指針
addDockWidget(Qt::RightDockWidgetArea,DockWidge);
//給浮動窗口加個編輯器TextEdit
QTextEdit *TextEdit = new QTextEdit(this);
DockWidge->setWindowTitle(QString::fromLocal8Bit("我是浮動窗口"));
DockWidge->setWidget(TextEdit);
整體代碼
在構造函數部分添加:
//添加菜單欄
/*****法一*****/
QMenuBar *mBar=menuBar();//
//添加菜單
//給菜單欄加一個菜單"文件",賦給指針pFile,這一步沒有用,下面有用
QMenu *Menu = mBar->addMenu(QString::fromLocal8Bit("文件"));
/*****法二*****/
//因為menuBar()是QMenuBar的一個成員函數,返回的是一個對象,所以它可以像對象一樣調用函數,可直接
//menuBar()->addMenu(name);
//添加菜單項(按下文件,會出現新建、保存那些菜單項),添加動作
QAction *act = Menu->addAction( QString::fromLocal8Bit("新建"));//給菜單"文件"添加一個動作"新建"
//單擊新建,彈出模態對話框 -QDialog
//QAction *p1 = Menu->addAction(QString::fromLocal8Bit("模態對話框"));
connect(act ,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec(); //.exec()是對話框屬性變為模態,含義是執行到這里就不會動(主函數里面也是一樣)
}
);
Menu->addSeparator();//添加分割線,僅僅為了美觀
QAction *open = Menu->addAction(QString::fromLocal8Bit("打開"));//給菜單"文件"添加一個動作"打開"
//單擊打開,彈出非模態對話框
//QAction *p2 = Menu->addAction(QString::fromLocal8Bit("非模態對話框"));
connect(open ,&QAction::triggered,//triggered和clicked類似,但應用范圍更廣
[=]()
{
/*****法一******/
dlg1; //注意這里需要將dlg定義為全局變量,這樣運行完show(),dlg就不會釋放了,否則運行完,釋放dlg,非模態對話框將一閃而過
dlg1.show(); //.show()是對話框屬性為模態
/*****法二******/ //缺點:在程序結束時,指針才會釋放,若多次使用該對話框,導致內存越用越小,
/*QDialog *p = new QDialog(this);
p->show();*/
/*****法三******/
/*QDialog *p = new QDialog(this);
p->setAttribute(Qt::WA_DeleteOnClose);//窗口關閉自動釋放內存
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"));
}
);
//狀態欄
QStatusBar *Bar = statusBar();
QLabel *label = new QLabel(this);
label->setText(QString::fromLocal8Bit("Narmal text file"));
Bar->addWidget(label);
//法二:
Bar->addWidget(new QLabel("2",this));
//若想在右邊添加狀態欄
Bar->addPermanentWidget(new QLabel("3",this));
//核心控件(中間內容)
//浮動窗口-QDockWidget
QDockWidget *DockWidge = new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea,DockWidge);//第一個參數,浮動窗口的位置
//第二個參數,QDockWidget類型的指針
//給浮動窗口加個編輯器
QTextEdit *TextEdit = new QTextEdit(this);
DockWidge->setWindowTitle(QString::fromLocal8Bit("我是浮動窗口"));
DockWidge->setWidget(TextEdit);
4.運行結果:
補充:標準對話框(關于對話框和問題對話框)和文件對話框
一丶標準對話框
1.關于對話框(模態的)–QMessagebox
代碼:
? ? ? ? ? #include “QMessagebox”
QAction *p2 = Menu->addAction(QString::fromLocal8Bit("關于對話框"));
connect(p2 ,&QAction::triggered,
[=]()
{
QMessageBox::about(this,QString::fromLocal8Bit("關于"),
QString::fromLocal8Bit("關于QT"));
}
);
2.問題對話框(常用)–QMessagebox,一般退出時詢問是否保存的時候使用
代碼:
QAction *p3 = Menu->addAction(QString::fromLocal8Bit("問題對話框"));
connect(p3 ,&QAction::triggered,
[=]()
{
// QMessageBox::question(this,QString::fromLocal8Bit("我是名稱"),QString::fromLocal8Bit("are you OK"));
/****默認的是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,//指定父對象
"對話框標題",
"../" , //上一級路徑
"souce(*.cpp *.h);;Text(*.text);;all(*.*)" //*代碼所有的
);
}
);
?
戳戳小手幫忙點個免費的贊和關注吧,嘿嘿。
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。