上一篇文章介绍了如何基于QMainWindow开发界面项目文件,介绍了三个关键文件ui文件、cpp文件和h文件,这三个文件实现了将界面控件设计和底层算法开发的解耦,这也是面向对象数据封装的主要精髓思想。本文将基于上一篇文章中开发的界面来添加基本控件。
按钮控件QPushButton
按钮控件是界面开发里面十分重要的元素,通过点击可以关联相关的动作。Qt的控件比较多,常用的是QPushButton。Qt中对QPushButton做了详细的介绍:
可以按照Qt的帮助,通过代码QPushButton *button = new QPushButton("&Download", this)来添加一个控件到界面。此处直接在ui文件之中拖入一个点击控件,命名改为“点击按钮”。
在ui设计器的属性区域修改按钮的对象名为“btu_click”,这个对象名是用来在代码中定位控件的名称。
编译代码,可以在ui的h代码中看到控件创建代码,以下代码是由ui文件自动编译生成的。
运行代码之后,会在主界面显示出控件:
下面来给控件添加一些点击动作,关联点击动作使用之前介绍的信号与槽函数关联。QPushbutton的信号函数都是继承的QAbstractButton,进入QAbstractButton的帮助可以阅读到相关信号信号函数:
其中最常用的是clicked(bool checked = false),关联控件被点击的动作。在mainwindow.h中的public slots字段下定义一个槽函数btnClicked()。
void btnClicked(); //控件点击槽函数
在cpp文件中对该槽函数进行实现,此处我们实现一个简单的动作,每点击一次按钮为文本中添加一条字符串“You clicked the button!\n”:
void mainWindow::btnClicked()
{
ui->plainTextEdit->appendPlainText("You clicked the button!\n");
}
然后在构造函数中建立槽函数和信号函数之间的关联:
connect(ui->btu_click,&QPushButton::clicked,this,&mainWindow::btnClicked); //建立信号和槽的联系
编译运行代码,双击几次按钮,会显示一些文字字符:
本文头文件h代码:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>#include <QtCore>
#include <QMenu>
#include <QMenuBar>
#include <QToolBar>
#include <QDockWidget>
#include <QPlainTextEdit>
#include <QAction>QT_BEGIN_NAMESPACE
namespace Ui { class mainWindow; }
QT_END_NAMESPACEclass mainWindow : public QMainWindow
{Q_OBJECTpublic:mainWindow(QWidget *parent = nullptr);~mainWindow();private:Ui::mainWindow *ui;QMenu *m_fileMenu; //添加一些menuQToolBar *m_fileToolBar; //添加一些工具栏QDockWidget *m_dockWidget = nullptr;
public slots:void btnClicked(); //控件点击槽函数
};
#endif // MAINWINDOW_H
本文cpp代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"mainWindow::mainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::mainWindow),m_dockWidget (new QDockWidget("Dock Widget", this))
{ui->setupUi(this);m_fileMenu = menuBar()->addMenu("&File");m_fileMenu->addAction("newAction");m_fileMenu->addAction("openAct");m_fileMenu->addAction("saveAct");m_fileToolBar = addToolBar("File");m_fileToolBar->addAction("newAction");m_fileToolBar->addAction("openAct");m_fileToolBar->addAction("saveAct");m_dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea |Qt::RightDockWidgetArea);addDockWidget(Qt::LeftDockWidgetArea, m_dockWidget);connect(ui->btu_click,&QPushButton::clicked,this,&mainWindow::btnClicked); //建立信号和槽的联系
}mainWindow::~mainWindow()
{delete ui;
}void mainWindow::btnClicked()
{ui->plainTextEdit->appendPlainText("You clicked the button!\n");
}
此文主要介绍如何在界面添加控件,创建控件的槽函数,同时建立信号和槽函数之间的关系。
欢迎同好沟通交流,批评指正,欢迎关注我的公号:不如起而行之