跨平台应用开发框架(2)----Qt(窗口篇)
目录
1.Qt窗口
2.QMainWindow
1.QMenuBar
1.创建菜单栏
2.在菜单栏上添加菜单
3.创建菜单项
4.菜单项之间添加分割线
2.QToolBar
1.创建工具栏
2.设置停靠方式
3.设置浮动属性
4.设置移动属性
3.QStatusBar
1.状态栏的创建
2.显示实时消息
3.显示永久消息
4.QDockWidget
1.浮动窗口的创建
2.设置停靠的位置
3.QDialog
1.QMessageBox
2.QColorDialog
3.QFileDialog
4.QFontDialog
5.QInputDialog
1.Qt窗口
Qt 中的窗口(Window)是 GUI 应用程序的核心元素,用于显示用户界面和承载控件。窗口通常由QWidget或其派生类实现,如QMainWindow和QDialog。
2.QMainWindow
QMainWindow 是⼀个为用户提供主窗口程序的类,继承自QWidget 类,并且提供了⼀个预定义的布局。QMainWindow 包含 ⼀个菜单栏(menu bar)、多个⼯具栏(tool bars)、多个浮动窗⼝(铆接部件)(dock widgets)、⼀个状态栏(status bar) 和⼀个 中心部件(central widget),它是许多应⽤程序的基础,如⽂本编辑器,图片编辑器等。
1.QMenuBar
QMenuBar是 Qt 中用于创建菜单栏的控件,通常用于主窗口( QMainWindow )中,为用户提供菜单项的操作入口。
1.创建菜单栏
方式⼀:菜单栏的创建可以借助于 QMainWindow类提供的 menuBar() 函数来实现。
QMenuBar *menubar=menuBar();
this->setMenuBar(menubar);
方式二:在堆上动态创建。
QMenuBar *menubar=new menuBar(this);
this->setMenuBar(menubar);
2.在菜单栏上添加菜单
QMenuBar *menubar=menuBar();
this->setMenuBar(menubar);
QMenu *menu1=new QMenu("文件");
QMenu *menu2=new QMenu("编辑");
QMenu *menu3=new QMenu("构建");
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);
3.创建菜单项
QAction *act1=new QAction("open");
QAction *act2=new QAction("close");
QAction *act3=new QAction("create");
menu1->addAction(act1);
menu1->addAction(act2);
menu1->addAction(act3);
4.菜单项之间添加分割线
menu1->addAction(act1);
menu1->addSeparator();
menu1->addAction(act2);
menu1->addAction(act3);
2.QToolBar
⼯具栏是应用程序中集成各种功能实现快捷键使用的⼀个区域。可以有多个,也可以没有,它并不是应用程序中必须存在的组件。它是⼀个可移动的组件,它的元素可以是各种窗⼝组件,它的元素通常以图标按钮的方式存在。
1.创建工具栏
QToolBar *toolBar1=new QToolBar(this);
QToolBar *toolBar2=new QToolBar(this);
this->addToolBar(toolBar1);
this->addToolBar(toolBar2);
2.设置停靠方式
方式⼀:创建工具栏的同时指定其停靠的位置。
Qt::LeftToolBarArea 停靠在左侧Qt::RightToolBarArea 停靠在右侧Qt::TopToolBarArea 停靠在顶部Qt::BottomToolBarArea 停靠在底部Qt::AllToolBarAreas 以上四个位置都可停靠
QToolBar *toolBar1=new QToolBar(this);
QToolBar *toolBar2=new QToolBar(this);
this->addToolBar(Qt::LeftToolBarArea,toolBar1);
this->addToolBar(Qt::RightToolBarArea,toolBar2);
方式二:使用QToolBar类提供的setAllowedAreas()函数设置停靠位置。
QToolBar *toolBar1=new QToolBar(this);
QToolBar *toolBar2=new QToolBar(this);
this->addToolBar(toolBar1);
this->addToolBar(toolBar2);
toolBar1->setAllowedAreas(Qt::LeftToolBarArea);
toolBar2->setAllowedAreas(Qt::RightToolBarArea);
3.设置浮动属性
工具栏的浮动属性可以通过QToolBar类提供的setFloatable()函数来设置。
QToolBar *toolBar1=new QToolBar(this);
QToolBar *toolBar2=new QToolBar(this);
this->addToolBar(Qt::LeftToolBarArea,toolBar1);
this->addToolBar(Qt::RightToolBarArea,toolBar2);
toolBar1->setFloatable(true);//允许浮动
toolBar2->setFloatable(false);//不允许浮动
4.设置移动属性
设置工具栏的移动属性可以通过QToolBar类提供的setMovable()函数来设置。
QToolBar *toolBar1=new QToolBar(this);
QToolBar *toolBar2=new QToolBar(this);
this->addToolBar(Qt::LeftToolBarArea,toolBar1);
this->addToolBar(Qt::RightToolBarArea,toolBar2);
toolBar1->setMovable(true);//允许移动
toolBar2->setMovable(false);//不允许移动
3.QStatusBar
状态栏是应用程序中输出简要信息的区域。⼀般位于主窗口的最底部,⼀个窗口中最多只能有⼀个状态栏。消息类型如下:
实时消息:如当前程序状态永久消息:如程序版本号,机构名称进度消息:如进度条提示,百分百提示
1.状态栏的创建
状态栏的创建是通过QMainWindow类 提供的statusBar()函数来创建。
QStatusBar *stbar=statusBar();
setStatusBar(stbar);
2.显示实时消息
stbar->showMessage("Hello_Qt",2000);
3.显示永久消息
QStatusBar *stbar=statusBar();
setStatusBar(stbar);
QLabel *label=new QLabel("提示信息",this);
stbar->addWidget(label);
QLabel *label2=new QLabel("右侧提示信息",this);
stbar->addPermanentWidget(label2);
4.QDockWidget
在 Qt 中,浮动窗口也称之为铆接部件。浮动窗口是通过QDockWidget类来实现浮动的功能。浮动窗口⼀般是位于核心部件的周围,可以有多个。
1.浮动窗口的创建
浮动窗口的创建是通过QDockWidget类提供的构造方法QDockWidget()函数动态创建的。
QDockWidget *dockwidget=new QDockWidget("浮动窗口",this);
addDockWidget(Qt::BottomDockWidgetArea,dockwidget);
2.设置停靠的位置
浮动窗口是位于中心部件的周围。可以通过QDockWidget类中提供setAllowedAreas()函数设置其允许停靠的位置。
Qt::LeftDockWidgetArea 停靠在左侧Qt::RightDockWidgetArea 停靠在右侧Qt::TopDockWidgetArea 停靠在顶部Qt::BottomDockWidgetArea 停靠在底部Qt::AllDockWidgetAreas 以上四个位置都可停靠
dockwidget->setAllowedAreas(Qt::TopDockWidgetArea|Qt::BottomDockWidgetArea);
3.QDialog
对话框是 GUI 程序中不可或缺的组成部分。⼀些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是⼀个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有:QFiledialog(文件对话框)、QColorDialog(颜色对话框)、QFontDialog(字体对话框)、QInputDialog (输⼊对话框)和 QMessageBox(消息框) 。
对话框分为模态对话框和非模态对话框。
模态对话框指的是:显示后无法与父窗口进行交互,是⼀种阻塞式的对话框。使用 QDialog::exec() 函数调用。
模态对话框适用于必须依赖用户选择的场合,比如消息显示,文件选择,打印设置等。
connect(ui->action_2,&QAction::triggered,[=](){
QDialog dlg(this);
dlg.resize(200,100);
dlg.exec();
});
非模态对话框显示后独立存在,可以同时与父窗⼝进行交互,是⼀种非阻塞式对话框,使用
QDialog::show()函数调用。
connect(ui->action_2,&QAction::triggered,[=](){
QDialog *dlg=new QDialog(this);
dlg->resize(200,100);
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->show();
});
混合属性对话框同时具有模态对话框和非模态对话框的属性,对话框的生成和销毁具有非模态对话框属性,功能上具有模态对话框的属性。
dlg->setModal(true);
1.QMessageBox
消息对话框是应用程序中最常用的界面元素。消息对话框主要用于为用户提示重要信息,强制用户进行选择操作。
resize(800,600);
QPushButton *btn=new QPushButton("消息对话框",this);
QMessageBox *msg=new QMessageBox(this);
msg->setWindowTitle("Warning Message");
msg->setText("Error Message!");
msg->setIcon(QMessageBox::Question);
msg->setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel);
connect(btn,&QPushButton::clicked,[=](){
msg->show();
});
msg->setIcon(QMessageBox::Warning);
msg->setIcon(QMessageBox::Critical);
2.QColorDialog
颜色对话框的功能是允许用户选择颜色。
常用方法介绍:
1、 QColorDialog (QWidget *parent = nullptr) //创建对象的同时设置父对象2、 QColorDialog(const QColor &initial, QWidget *parent = nullptr) //创建对象的同时通过QColor 对象设置默认颜色和父对象3、 void setCurrentColor(const QColor &color) //设置当前颜色对话框4、 QColor currentColor() const //获取当前颜色对话框5、 QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options=ColorDialogOptions()) //打开颜色选择对话框,并返回⼀个QColor对象
参数说明:initial:设置默认颜色parent:设置父对象title:设置对话框标题options:设置选项
resize(800,600);
QPushButton *btn=new QPushButton("消息对话框",this);
QColorDialog *cdlg=new QColorDialog(this);
connect(btn,&QPushButton::clicked,[=](){
QColor color=cdlg->getColor(QColor(255,0,0));
qDebug()<<"r="<<color.red();
qDebug()<<"g="<<color.green();
qDebug()<<"b="<<color.blue();
});
3.QFileDialog
文件对话框用于应用程序中需要打开⼀个外部文件或需要将当前内容存储到指定的外部文件。
常用方法介绍:
1、打开文件(⼀次只能打开⼀个文件)QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())2、打开多个文件(⼀次可以打开多个文件)QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())3、 保存文件QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())参数说明:参数1:parent 父亲参数2:caption 对话框标题参数3:dir 默认打开的路径参数4:filter 文件过滤器
resize(800,600);
QPushButton *btn=new QPushButton("文件",this);
QFileDialog *fdlg=new QFileDialog(this);
connect(btn,&QPushButton::clicked,[=](){
QString str=fdlg->getOpenFileName(this,"文件","C:\\Users\\25713\\Pictures\\图片","*.jpg");
qDebug()<<str;
});
4.QFontDialog
Qt 中提供了预定义的字体对话框类 QFontDialog,同于提供选择字体的对话框部件。
resize(800,600);
QPushButton *btn=new QPushButton("字体",this);
connect(btn,&QPushButton::clicked,[=](){
bool flag;
QFont font=QFontDialog::getFont(&flag,QFont("华文行楷",36));
qDebug()<<"字体:"<<font.family().toUtf8().data();
qDebug()<<"字号:"<<font.pointSize();
qDebug()<<"是否加粗:"<<font.bold();
qDebug()<<"是否倾斜:"<<font.italic();
});
5.QInputDialog
Qt 中提供了预定义的输入对话框类:QInputDialog,用于进行临时数据输入的场合。
常用方法介绍:
1、双精度浮点型输入数据对话框double getDouble (QWidget *parent, const QString &title, const QString &label, doublevalue = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());2、整型输入数据对话框int getInt (QWidget *parent, const QString &title, const QString &label, int value = 0, intmin = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());3、选择条目型输入数据框QString getItem (QWidget *parent, const QString &title, const QString &label, constQStringList &items, int current = 0, bool editable = true, bool *ok = nullptr,Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints =Qt::ImhNone) ;参数说明:parent:父亲title:对话框标题label:对话框标签items:可供选择的条目
resize(800,600);
QPushButton *btn=new QPushButton("输入框",this);
QInputDialog *idlg=new QInputDialog(this);
connect(btn,&QPushButton::clicked,[=](){
int i=idlg->getInt(this,"输入框","Int");
qDebug()<<"i="<<i;
});