上一篇文章介绍了QPushbutton,本文再基于上一篇文章介绍另外几个常用控件。打开ui编辑器,可以在左边看到很多控件,使用拖拽即可拖入ui编辑框。
QLabel 和 QLineEdit
最常用的控件组合是QLabel和QLineEdit,用来提示内容和实现输入的操作。在上一文的ui文件中拖入一个QLabel 和一个QLineEdit控件,修改QLabel名称为“标签”,修改QLineEdit的对象名称为lineEdit_input。
同样的,按照上文的例子,希望建立一个信号和槽的关联关系,输入完字符串之后,将输入的字符串添加到文本中。首先建立一个槽函数,来处理输入信息:
public slots:
void btnClicked(); //控件点击槽函数
void inputFinished(); //Line Eidt输入结束槽函数
再到cpp文件中对槽函数进行实现:
void mainWindow::inputFinished(){
ui->plainTextEdit->appendPlainText(ui->lineEdit_input->text());
}
建立字符串信号和槽函数的之间的关联,此处需要使用的信号函数是
editingFinished:
connect(ui->lineEdit_input,&QLineEdit::editingFinished,this,&mainWindow::inputFinished); //建立信号和槽的联系
运行代码,在edit中输入一段字符,按键盘回车键表示输入结束,输入信息将会保存到文本框之中:
下拉框QComboBox
另外比较重要的控件就是下拉菜单,Qt实现下拉菜单的模块是QComboBox。同样的,在ui设计器中向界面添加一个下拉菜单控件,并将对象命名为downList。
QComboBox的接口函数比较多,可以去Qt帮助之中仔细阅读:
默认添加的下拉菜单没有选择内容,可以通过接口函数insertItem(int index, const QString &text, const QVariant &userData = QVariant())来添加下拉选项,也可以直接在ui设计界面进行编辑。双击ui中的下拉菜单,添加一些下拉选项:
同样的,来开发一些和下拉动作相关的槽函数,当下拉菜单变化后,将选中的内容写入文本框之中,槽函数chooseChanged():
public slots:
void btnClicked(); //控件点击槽函数
void inputFinished(); //Line Eidt输入结束槽函数
void chooseChanged(); //ComboBox槽函数
在CPP中进行实现:
void mainWindow::chooseChanged()
{
ui->plainTextEdit->appendPlainText(ui->downList->currentText());
}
再将槽函数与下拉菜单的信号关联,此处使用的信号是currentTextChanged。
connect(ui->downList,&QComboBox::currentTextChanged,this,&mainWindow::chooseChanged); //建立信号和槽的联系
运行代码,选择几个下拉菜单:
其他常用的控件还有很多,此文就不再一一介绍,请读者自己阅读Qt帮助和ui设计器。
本文使用的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_NAMESPACE
class mainWindow : public QMainWindow
{
Q_OBJECT
public:
mainWindow(QWidget *parent = nullptr);
~mainWindow();
private:
Ui::mainWindow *ui;
QMenu *m_fileMenu; //添加一些menu
QToolBar *m_fileToolBar; //添加一些工具栏
QDockWidget *m_dockWidget = nullptr;
public slots:
void btnClicked(); //控件点击槽函数
void inputFinished(); //Line Eidt输入结束槽函数
void chooseChanged(); //ComboBox槽函数
};
#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); //建立信号和槽的联系
connect(ui->lineEdit_input,&QLineEdit::editingFinished,this,&mainWindow::inputFinished); //建立信号和槽的联系
connect(ui->downList,&QComboBox::currentTextChanged,this,&mainWindow::chooseChanged); //建立信号和槽的联系
}
mainWindow::~mainWindow()
{
delete ui;
}
void mainWindow::btnClicked()
{
ui->plainTextEdit->appendPlainText("You clicked the button!\n");
}
void mainWindow::inputFinished()
{
ui->plainTextEdit->appendPlainText(ui->lineEdit_input->text());
}
void mainWindow::chooseChanged()
{
ui->plainTextEdit->appendPlainText(ui->downList->currentText());
}
本文本使用的ui文件代码:
<?xmlversion="1.0"encoding="UTF-8"?>
<uiversion="4.0">
<class>mainWindow</class>
<widgetclass="QMainWindow"name="mainWindow">
<propertyname="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>731</width>
<height>456</height>
</rect>
</property>
<propertyname="windowTitle">
<string>mainWindow</string>
</property>
<widgetclass="QWidget"name="centralwidget">
<layoutclass="QGridLayout"name="gridLayout_2">
<itemrow="0"column="0">
<widgetclass="QSplitter"name="splitter">
<propertyname="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widgetclass="QWidget"name="layoutWidget">
<layoutclass="QVBoxLayout"name="verticalLayout">
<item>
<widgetclass="QPlainTextEdit"name="plainTextEdit">
<propertyname="plainText">
<string>WelcometoQtworld!</string>
</property>
</widget>
</item>
<item>
<spacername="horizontalSpacer">
<propertyname="orientation">
<enum>Qt::Horizontal</enum>
</property>
<propertyname="sizeHint"stdset="0">
<size>
<width>498</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widgetclass="QWidget"name="layoutWidget">
<layoutclass="QGridLayout"name="gridLayout">
<itemrow="0"column="0">
<widgetclass="QPushButton"name="btu_click">
<propertyname="text">
<string>点击按钮</string>
</property>
</widget>
</item>
<itemrow="1"column="0">
<widgetclass="QLabel"name="label">
<propertyname="text">
<string>标签</string>
</property>
</widget>
</item>
<itemrow="1"column="1">
<widgetclass="QLineEdit"name="lineEdit_input"/>
</item>
<itemrow="2"column="1">
<widgetclass="QComboBox"name="downList">
<item>
<propertyname="text">
<string>Item1</string>
</property>
</item>
<item>
<propertyname="text">
<string>Item2</string>
</property>
</item>
<item>
<propertyname="text">
<string>Item3</string>
</property>
</item>
<item>
<propertyname="text">
<string>Item4</string>
</property>
</item>
</widget>
</item>
<itemrow="2"column="0">
<widgetclass="QLabel"name="label_2">
<propertyname="text">
<string>选择信息</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widgetclass="QMenuBar"name="menubar">
<propertyname="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>731</width>
<height>22</height>
</rect>
</property>
</widget>
<widgetclass="QStatusBar"name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
欢迎同好沟通交流,批评指正,欢迎关注我的公号:不如起而行之