[Qt5] 創建菜單欄、工具欄、核心控件和浮動窗口

一.對話框內容概要 菜單欄—菜單項—模態窗口/非模態窗口 工具欄 狀態欄 核心控件 浮動窗口 二 .操作步驟: 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:

[Qt5] 創建菜單欄、工具欄、核心控件和浮動窗口_開發語言


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);

整體代碼

在構造函數部分添加:

[Qt5] 創建菜單欄、工具欄、核心控件和浮動窗口_菜單項_02

//添加菜單欄
	/*****法一*****/
	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.運行結果:

[Qt5] 創建菜單欄、工具欄、核心控件和浮動窗口_#include_03

補充:標準對話框(關于對話框和問題對話框)和文件對話框

一丶標準對話框
1.關于對話框(模態的)–QMessagebox
代碼:
? ? ? ? ? #include “QMessagebox”

QAction *p2 = Menu->addAction(QString::fromLocal8Bit("關于對話框"));
	connect(p2 ,&QAction::triggered,
		[=]()
	    {
		 QMessageBox::about(this,QString::fromLocal8Bit("關于"),
		                             QString::fromLocal8Bit("關于QT"));	
	    }
	
	);

[Qt5] 創建菜單欄、工具欄、核心控件和浮動窗口_菜單項_04


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; 
		 }*/
	    }
	);

[Qt5] 創建菜單欄、工具欄、核心控件和浮動窗口_菜單項_05

二、文件對話框
代碼:

? ? ? ? ? #include “QFileDialog”

QAction *p4 = Menu->addAction(QString::fromLocal8Bit("文件對話框"));
	connect(p4 ,&QAction::triggered,
		[=]()
	    {
		 QFileDialog::getOpenFileName(this,//指定父對象
			 "對話框標題",
			 "../" , //上一級路徑
			 "souce(*.cpp *.h);;Text(*.text);;all(*.*)" //*代碼所有的
			 );
	    }
	
	);

[Qt5] 創建菜單欄、工具欄、核心控件和浮動窗口_qt_06


?


戳戳小手幫忙點個免費的贊和關注吧,嘿嘿。


聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 立川理惠在线播放一区| 免费观看欧美一级牲片一| 亚洲一卡二卡三卡四卡无卡麻豆| a级毛片免费完整视频| 疯狂的欧美乱大交| 天天爽天天爽夜夜爽毛片| 国产成人教育视频在线观看| 亚洲人成网站日本片| 老司机精品免费视频| 欧美乱大交XXXXX潮喷| 嫩草影院在线播放| 免费观看黄网站| 99爱免费视频| 欧美最猛黑人xxxx黑人猛交| 国产精品日韩一区二区三区| 午夜时刻免费实验区观看| 三级伦理在线播放| 黄色片免费网站| 日本在线色视频| 国产福利91精品一区二区三区| 亚洲www在线| 青青草成人免费| 成人私人影院在线版| 公侵犯玩弄漂亮人妻优| a国产成人免费视频| 欧美日韩国产另类在线观看| 国产日韩欧美中文字幕| 久久久久亚洲精品男人的天堂| 美女张开双腿让男生捅| 奶交性视频欧美| 午夜毛片不卡免费观看视频| a级日本片在线观看| 欧美成人免费观看久久| 国产成人精品一区二三区在线观看| 久久久最新精品| 97久久天天综合色天天综合色| 欧美日韩人妻精品一区二区三区| 国产看午夜精品理论片| 久久久久亚洲Av片无码下载蜜桃 | 日本dhxxxxxdh14日本| 午夜久久久久久久|