1. 程式人生 > >QT學習筆記(5) 菜單欄、工具欄、窗口、對話框

QT學習筆記(5) 菜單欄、工具欄、窗口、對話框

let qlabel rman 運行 內存空間 介紹 edi left setw

本程序主要介紹了以下幾種常用控件的使用方法:

(1)菜單欄、工具欄

(2)核心控件、狀態欄、浮動窗口

(3)模態窗口、非模態窗口

(4)標準對話框、文件對話框

代碼如下:

mainwindow.h文件

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QDialog>
 6 
 7 class MainWindow : public QMainWindow
 8 {
 9     Q_OBJECT
10 
11 public:
12     MainWindow(QWidget *parent = 0
); 13 ~MainWindow(); 14 15 private: 16 QDialog dialog2;//用於非模態窗口的顯示 17 }; 18 19 #endif // MAINWINDOW_H

mainwindow.cpp文件

#include "mainwindow.h"
#include <QMenuBar>//菜單欄
#include <QMenu>//菜單
#include <QAction>//菜單項
#include <QDebug>
#include <QToolBar>//工具欄
#include <QPushButton>
#include 
<QStatusBar>//狀態欄 #include <QLabel>//標簽 #include <QTextEdit>//文本 #include <QDockWidget>//浮動窗口 #include <QDialog>//對話框 #include <QMessageBox>//消息對話框 #include <QFileDialog>//文件對話框 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { //菜單欄 //定義菜單欄 QMenuBar *mBar = menuBar();
//添加菜單 QMenu *pFile = mBar->addMenu("wenjian"); //添加菜單項,添加動作 QAction *pNew = pFile->addAction("xinjian"); //給菜單項建立連接,完成相應的操作 connect(pNew,&QAction::triggered, [=]() { qDebug() << "xinjian" ; } ); //給菜單項之間添加分割線 pFile->addSeparator(); QAction *pOpen = pFile->addAction("dakai"); //工具欄 //工具欄中存放的大多是菜單項的快捷方式 QToolBar *toolBar = addToolBar("toolbar"); //工具欄添加快捷鍵,直接把菜單項的指針添加到工具欄 toolBar->addAction(pNew); //向工具欄添加控件,並添加操作 QPushButton * b = new QPushButton(this); b->setText("-_-"); toolBar->addWidget(b); connect(b,&QPushButton::clicked, [=]() { b->setText("123"); } );//註意此處的; //狀態欄 QStatusBar *sBar = statusBar(); QLabel *label = new QLabel(this); label->setText("Normal text file"); sBar->addWidget(label); //從左網往右依次添加 sBar->addWidget(new QLabel("2",this)); //從右往左依次添加 sBar->addPermanentWidget(new QLabel("3",this)); //核心控件 QTextEdit *textEdit = new QTextEdit(this); setCentralWidget(textEdit); //浮動窗口 QDockWidget *dock = new QDockWidget(this); addDockWidget(Qt::LeftDockWidgetArea,dock);//存放的位置,存放的窗口 QTextEdit *textEdit1 = new QTextEdit(this); dock->setWidget(textEdit1);//向浮動窗口添加東西 //模態對話框和非模態對話框 QMenu *pDialog = mBar->addMenu("Dialog"); //模態對話框 QAction *p1 = pDialog->addAction("motai"); connect(p1,&QAction::triggered, [=]() { QDialog dialog1; dialog1.exec();//此處會一直運行 qDebug() << "motai" ; } ); //非模態對話框 QAction *p2 = pDialog->addAction("feimotai"); connect(p2,&QAction::triggered, [=]() { //QDialog dialog1; //如果在函數體內聲明,dialog1相當於局部變量,會在跳出是直接消失 //dialog1.show(); //解決辦法1:把dialog1當做成員變量 dialog2.show(); qDebug() << "feimotai" ; //解決辦法2:動態分配內存空間 QDialog *dialog3 = new QDialog(this); //由於分配的內存空間只有在系統結束時才釋放,如果經常需要打開此窗口,會導致內存越用越少 //所以要設置屬性為關閉時釋放空間 dialog3->setAttribute(Qt::WA_DeleteOnClose); dialog3->show(); } ); //標準對話框和文件對話框 QMenu *pMessage = mBar->addMenu("MessageBox"); //關於對話框 QAction *p3 = pMessage->addAction("guanyu"); connect(p3,&QAction::triggered, [=]() { QMessageBox::about(this,"guanyu","guanyuQT"); } ); //問題對話框 QAction *p4 = pMessage->addAction("wenti"); connect(p4,&QAction::triggered, [=]() { int ret = QMessageBox::question(this, "question", "Are you ok?", QMessageBox::Ok | QMessageBox::Cancel); switch(ret) { case QMessageBox::Ok: qDebug() << "i am OK" ; break; case QMessageBox::Cancel: qDebug() << "i am Cancel" ; break; default: break; } } ); //文件對話框 QAction *p5 = pMessage->addAction("wenjian"); connect(p5,&QAction::triggered, [=]() { QString path = QFileDialog::getOpenFileName(this, "open", "../", "source(*.cpp *.h);;" "Text(*.txt);;" "all(*.*)"); qDebug() << path ; } ); } MainWindow::~MainWindow() { }

QT學習筆記(5) 菜單欄、工具欄、窗口、對話框