QMainWindow菜单栏、工具栏、状态栏、停靠窗口、中心控件
mianwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QLabel>
#include <QDockWidget>
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(400, 300);//调整窗口大小
//MenuBar
QMenuBar *menubar = new QMenuBar(this);
setMenuBar(menubar);//只能有一个菜单栏
//在菜单栏中添加菜单项
QMenu *filename = menubar->addMenu("文件(&F)");//快捷键ctr+F
QMenu *editmenu = menubar->addMenu("编辑(&E)");//快捷键ctr+E
QMenu *buildname = menubar->addMenu("构建(&B)");//快捷键ctr+B
filename->addAction("新建文件(&N)");
filename->addAction("打开文件(&O)");
filename->addSeparator();
filename->addAction("关闭文件(&C)");
editmenu->addAction("恢复(&U)");
buildname->addAction("构建所有项目(&R)");
//ToolBar
QToolBar *toolbar = new QToolBar(this);
addToolBar(Qt::TopToolBarArea, toolbar);//工具栏可以有多个
toolbar->addAction("新建");
toolbar->addAction("打开");
toolbar->addSeparator();
toolbar->addAction("关闭");
//StatusBar
QStatusBar *stbar = new QStatusBar(this);
setStatusBar(stbar);
QLabel *label = new QLabel(this);
label->setText("状态栏");
stbar->addWidget(label);
//DockWidget浮窗
QDockWidget *dockwidget = new QDockWidget("小窗口", this);
addDockWidget(Qt::LeftDockWidgetArea, dockwidget);
//Central Widget
QTextEdit *edit = new QTextEdit(this);
setCentralWidget(edit);
}
MainWindow::~MainWindow()
{
}
对话框(QDialog)
1、模态和非模态对话框
QDialog *dialog = new QDialog(this);
dialog->resize(200, 100);
//dialog->show(); //非模态对话框
//dialog->exec(); //模态对话框 方式1
dialog->setModal(true); //模态对话框 方式2
dialog->show();
dialog->setAttribute(Qt::WA_DeleteOnClose);
-
非模态对话框:
//dialog->show(); //非模态对话框
如果你注释掉了
show
方法,对话框将不会被显示。通常,非模态对话框允许用户在对话框打开时与应用程序的其他部分交互。 -
模态对话框方式1:
//dialog->exec(); //模态对话框 方式1
exec
方法用于显示模态对话框。调用exec
后,程序的执行将被阻塞,直到用户关闭对话框。这种方式适用于需要用户响应的对话框。 -
设置模态对话框方式2:
dialog->setModal(true); //模态对话框 方式2
使用
setModal(true)
将对话框设置为模态。模态对话框会阻止用户与应用程序的其他窗口交互,直到对话框被关闭。 -
显示对话框:
dialog->show();
show
方法用于显示对话框。对于模态对话框,这将导致程序执行阻塞,直到对话框被关闭。 -
设置关闭时删除对话框:
dialog->setAttribute(Qt::WA_DeleteOnClose);
setAttribute
方法用于设置窗口的属性。Qt::WA_DeleteOnClose
属性指定当对话框关闭时,它将自动被删除,从而释放内存。如果没有设置该属性,当你多次打开关闭对话框但没有关闭程序时,会造成内存一直覆盖使用。
2、标准对话框
-
颜色对话框
void MainWindow::on_pushButton_clicked() { //QColorDialog dialog(this); QColor color = QColorDialog::getColor(Qt::red, this); qDebug() << "color: " << color; }
-
文件对话框
void MainWindow::on_pushButton_2_clicked() { QString fileName = QFileDialog::getOpenFileName(this, "Open File", "C:\\"); //QString fileName = QFileDialog::getOpenFileName(this, "Open File", "C:\\", "图片文件(*.png *.jpg)"); qDebug() << "fileName: " << fileName; }
-
字体对话框
void MainWindow::on_pushButton_3_clicked() { bool ok; QFont font = QFontDialog::getFont(&ok, this); if(ok) ui->pushButton_3->setFont(font); else qDebug() << "没有选择任何字体"; }
-
输入对话框
void MainWindow::on_pushButton_4_clicked() { bool ok; QString string = QInputDialog::getText(this, "输入字符串对话框", "请输入用户名", QLineEdit::Normal, "", &ok); if(ok) qDebug() << "string: " << string; int value = QInputDialog::getInt(this, "输入整数对话框", "请输入0~100的整数", 0, 0, 100, 1, &ok); if(ok) qDebug() << "value = " << value; }
-
消息对话框
void MainWindow::on_pushButton_5_clicked() { //问题对话框 int ret1 = QMessageBox::question(this, "问题对话框", "你是否使用Qt", QMessageBox::Yes, QMessageBox::No); if(ret1 == QMessageBox::Yes) qDebug() << "Great"; //提示对话框 QMessageBox::information(this, "提示对话框", "你最好使用Qt", QMessageBox::Ok); //警告对话框 QMessageBox::warning(this, "警告对话框", "请停止使用其他GUI", QMessageBox::Ok); //错误对话框 QMessageBox::critical(this, "错误对话框", "重大错误", QMessageBox::Retry); //关于对话框 QMessageBox::about(this, "关于对话框", "我爱Rick"); }
-
进度对话框
void MainWindow::on_pushButton_6_clicked() { QProgressDialog prodlg("复制内容", "取消", 0, 50000, this); prodlg.setWindowTitle("复制文件"); prodlg.setWindowModality(Qt::WindowModal); prodlg.show(); for(int i = 0; i < 50000; i++) { prodlg.setValue(i); QCoreApplication::processEvents(); if(prodlg.wasCanceled()) break; } prodlg.setValue(50000); qDebug() << "拷贝完成"; }
-
错误信息对话框
void MainWindow::on_pushButton_7_clicked() { // QErrorMessage *errordlg = new QErrorMessage(this); errordlg->setWindowTitle("错误"); errordlg->showMessage("危险"); }
-
向导对话框
QWizardPage *createPage1(void) { QWizardPage *page = new QWizardPage; page->setTitle("第一步操作"); return page; } QWizardPage *createPage2(void) { QWizardPage *page = new QWizardPage; page->setTitle("第二步操作"); return page; } void MainWindow::on_pushButton_8_clicked() { QWizard wizard(this); wizard.setWindowTitle("向导对话框"); wizard.addPage(createPage1()); wizard.addPage(createPage2()); wizard.exec(); }