在Qt控件中,输入类的控件占比最大,数量多达16个,下面将演示每一个控件的具体用法。
16个输入控件列表如下:
1、combo box 叫下拉列表框,用于展示多条文本数据;
2、font combo box 叫字体选择窗口部件,用于让用户选择合适的字体;
3、line edit 叫单行文本输入框,用于让用户输入文本信息;
4、text edit 叫多行文本输入框,用于让用户输入多行文本;
5、plain text edit 是一个只支持纯文本的编辑框,用于让用户查看和编辑内容;
6、spin box 是一个整数输入框,用于让用户输入和查看整数;
7、double spin box 是一个支持输入小数、负数、整数的输入框,用于让用户输入和查看数据;
8、time edit 是一个时间编辑框,用于让用户修改和查看时间(时分秒);
9、date edit 是一个日期编辑控件,用户让用户修改和查看日期(年月日);
10、date/time edit 是一个时间日期编辑控件,用户让用户修改和查看时间日期(年月日时分秒);
11、dial 是一个带滑块的圆形转盘,当用户滑动滑块时,与之绑定的其他事件将发生改变;
12、horizontal scroll bar 是一个水平滑动条,当用户拖动滑动条时,与之绑定的其他事件将发生改变;vertical scroll bar 是一个垂直滑动条,当用户拖动滑动条时,与之绑定的其他事件将发生改变;
13、horizontal slider是一个水平滚动条,vertical slider是一个垂直滚动条,当用户拖动滚动条时,与之绑定的其他事件将发生改变;
14、key sequence edit 是一个记录快捷键的控件,方便用户设置快捷键来的一个控件;
下面将使用纯代码的方式依次演示各个控件的具体用法。话不多说,开始敲代码:
1、combo box
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void selectText(QString s);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include <QComboBox>
#include<QStatusBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(800,800);
setWindowTitle("combo box");
QComboBox *combobox=new QComboBox(this);
combobox->setGeometry(200,200,500,60);
combobox->addItem("A");
combobox->addItem("B");
QStringList list;
list<<"C"<<"D"<<"E"<<"F";
combobox->addItems(list);
combobox->setCurrentIndex(0);
connect(combobox,SIGNAL(currentTextChanged(QString)),this,SLOT(selectText(QString)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::selectText(QString s)
{
this->statusBar()->showMessage("you select is: "+s);
}
运行效果:
2、font combo box
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void fontChange(QFont f);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QFontComboBox>
#include<QFont>
#include<QStatusBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(800,800);
setWindowTitle("font combo box");
QFontComboBox *fontcombobox=new QFontComboBox(this);
fontcombobox->setGeometry(200,200,300,60);
connect(fontcombobox,SIGNAL(currentFontChanged(QFont)),this,SLOT(fontChange(QFont)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::fontChange(QFont f)
{
this->statusBar()->showMessage(f.toString());
}
程序运行效果:
3、line edit
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void textChange(QString s);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QLineEdit>
#include<QStatusBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(800,800);
setWindowTitle("line edit");
QLineEdit *edit=new QLineEdit("lineEdit",this);
edit->setGeometry(200,200,400,30);
connect(edit,SIGNAL(textChanged(QString)),this,SLOT(textChange(QString)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::textChange(QString s)
{
statusBar()->showMessage("you input text is: "+s);
}
程序运行效果:
4、text edit
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTextEdit>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QTextEdit *textEdit;
private slots:
void textChange();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QStatusBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(800,800);
setWindowTitle("textEdit");
textEdit=new QTextEdit("please input text affter push enter to next line",this);
textEdit->setGeometry(100,100,500,500);
connect(textEdit,SIGNAL(textChanged()),this,SLOT(textChange()));
}
MainWindow::~MainWindow()
{
}
void MainWindow::textChange()
{
statusBar()->showMessage(textEdit->toPlainText());
}
程序运行效果:
5、plain text edit
此处实现的功能是: 把输入框中的每一行文本显示到下拉框中;
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QComboBox>
#include <QMainWindow>
#include <QPlainTextEdit>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QPlainTextEdit *plaintext;
QTextDocument *docment;
QComboBox *combo;
int blockCount;
private slots:
void blockCountChange(int count);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QPlainTextEdit>
#include<QStatusBar>
#include<QTextDocument>
#include<QComboBox>
#include<QTextBlock>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(800,800);
setWindowTitle("plain text edit");
plaintext=new QPlainTextEdit("plain text edit",this);
plaintext->setGeometry(100,100,400,400);
docment=plaintext->document();
combo=new QComboBox(this);
combo->setGeometry(100,600,600,40);
connect(docment,SIGNAL(blockCountChanged(int)),this,SLOT(blockCountChange(int)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::blockCountChange(int count)
{
combo->clear();
for (int var = 0; var < count; ++var) {
combo->addItem(docment->findBlockByNumber(var).text());
}
this->statusBar()->showMessage("current total have: "+QString::number(count)+"line text");
}
运行效果:
6、spin box
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "qcombobox.h"
#include <QMainWindow>
#include <QSpinBox>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QSpinBox *spinbox,*spinbox2;
QComboBox *combobox;
private slots:
void textChange(QString toChange);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QSpinBox>
#include<QStatusBar>
#include<QComboBox>
#include<QLabel>
#include<QHBoxLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(800,800);
setWindowTitle("spin box");
QLabel *label=new QLabel("请选择需要转换的进制:",this);
label->resize(150,20);
QWidget *widget=new QWidget(this);
QHBoxLayout *hbox=new QHBoxLayout;
spinbox=new QSpinBox;
spinbox->setMaximum(INT_MAX);
combobox=new QComboBox;
combobox->addItem("2");
combobox->addItem("8");
combobox->addItem("10");
combobox->addItem("16");
spinbox2=new QSpinBox;
spinbox2->setMaximum(INT_MAX);
hbox->addWidget(spinbox);
hbox->addWidget(label);
hbox->addWidget(combobox);
hbox->addWidget(spinbox2);
widget->setLayout(hbox);
widget->resize(width(),height());
connect(combobox,SIGNAL(currentTextChanged(QString)),this,SLOT(textChange(QString)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::textChange(QString toChange)
{
int v=spinbox->value();
spinbox2->setValue(v);
spinbox2->setDisplayIntegerBase(toChange.toInt());
}
运行效果:
7、double spin box
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDoubleSpinBox>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QDoubleSpinBox *spinbox;
private slots:
void textChange(QString toChange);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QSpinBox>
#include<QStatusBar>
#include<QDoubleSpinBox>
#include<QLabel>
#include<QHBoxLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(800,800);
setWindowTitle("spin box");
QWidget *widget=new QWidget(this);
QHBoxLayout *hbox=new QHBoxLayout;
spinbox=new QDoubleSpinBox;
spinbox->setMaximum(INT_MAX);
hbox->addWidget(spinbox);
widget->setLayout(hbox);
widget->resize(width(),height());
connect(spinbox,SIGNAL(textChanged(QString)),this,SLOT(textChange(QString)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::textChange(QString toChange)
{
statusBar()->showMessage(toChange);
}
运行效果:
8、time edit
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimeEdit>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private :
QTimeEdit *time;
private slots:
void timeChange(QTime time);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QTimeEdit>
#include<QStatusBar>
#include<QTime>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(800,800);
setWindowTitle("time edit");
QTimeEdit *time=new QTimeEdit(this);
time->setGeometry(200,200,200,200);
time->setTime(QTime::currentTime());
time->setDisplayFormat("HH:mm:ss");
connect(time,SIGNAL(timeChanged(QTime)),this,SLOT(timeChange(QTime)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::timeChange(QTime time)
{
statusBar()->showMessage(time.toString());
}
程序运行效果:
9、date edit
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDateEdit>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private :
QDateEdit *date;
private slots:
void timeChange(QDate date);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QDateEdit>
#include<QStatusBar>
#include<QDate>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(800,800);
setWindowTitle("time edit");
QDateEdit *date=new QDateEdit(this);
date->setGeometry(200,200,200,200);
date->setDate(QDate::currentDate());
date->setDisplayFormat("yyyy-MM-dd ");
connect(date,SIGNAL(dateChanged(QDate)),this,SLOT(timeChange(QDate)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::timeChange(QDate date)
{
statusBar()->showMessage(QString::number(date.year())+"-"+QString::number(date.month())+"-"+QString::number(date.day()));
}
运行效果:
10、date/time edit
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QDateTimeEdit>
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QDateTimeEdit *dateTime;
private slots:
void dateTimeChange(QDateTime d);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QDateTimeEdit>
#include<QStatusBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(800,800);
setWindowTitle("dateTime edit");
dateTime=new QDateTimeEdit(QDateTime::currentDateTime(),this);
dateTime->resize(400,40);
dateTime->setDisplayFormat("yyyy-MM-dd HH:mm:ss");
//弹出日期控件
dateTime->setCalendarPopup(true);
connect(dateTime,SIGNAL(dateTimeChanged(QDateTime)),this,SLOT(dateTimeChange(QDateTime)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::dateTimeChange(QDateTime d)
{
auto date = d.date();
auto time=d.time();
QString dateStr=QString::number(date.year())+"-"+QString::number(date.month())+"-"+QString::number(date.day());
QString timeStr=QString::number(time.hour())+":"+QString::number(time.minute())+":"+QString::number(time.second());
statusBar()->showMessage(dateStr+" "+timeStr);
}
运行效果:
11、dial
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QDial>
#include <QLabel>
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QDial *dial;
QLabel *label ;
private slots:
void sliderChange(int value);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QDial>
#include <QLabel>
#include<QStyle>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setGeometry(100,100,800,800);
setWindowTitle("dial");
dial=new QDial(this);
dial->setGeometry(100,100,400,400);
dial->setStyleSheet("background-color:rgb(%1,%2,%3);");
/* 设置页长(两个最大刻度的间距)*/
dial->setPageStep(10);
/* 设置刻度可见 */
dial->setNotchesVisible(true);
/* 设置两个凹槽之间的目标像素数 */
dial->setNotchTarget(1.00);
/* 设置dial值的范围 */
dial->setRange(0,400);
/* 开启后可指向圆的任何角度 */
//dial->setWrapping(true);
/* 实例化对象和设置显示位置与大小 */
label = new QLabel("0 km/h",this);
label->setGeometry(270, 300, 200, 50);
connect(dial,SIGNAL(valueChanged(int)),this,SLOT(sliderChange(int)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::sliderChange(int value)
{
label->setText(QString::number(value)+" km/h");
}
运行效果:
12、horizontal scroll bar 与 vertical scroll bar
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QLabel>
#include <QMainWindow>
#include <QScrollBar>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QScrollBar *horizontalScrollBar,*verticalScrollBar;
QLabel *label ;
private slots:
void horizontalScrollBarvalueChange(int value);
void verticalScrollBarvalueChange(int value);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QScrollBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setGeometry(100,100,800,800);
setWindowTitle("horizontal scroll bar");
horizontalScrollBar=new QScrollBar(Qt::Horizontal,this);
horizontalScrollBar->setGeometry(0,600,800,20);
horizontalScrollBar->setRange(0,100);
horizontalScrollBar->setSingleStep(10);
horizontalScrollBar->setStyleSheet("QScrollBar:horizontal {"
"border-top: 1px solid rgb(99, 174, 236);"
"border-left: 1px solid rgb(99, 174, 236);"
"border-right: 1px solid rgb(99, 174, 236);"
"background: rgb(213,100,252);"
"height: 15px;"
"margin: 0px 0 0px 0;"
"}");
verticalScrollBar=new QScrollBar(Qt::Vertical,this);
verticalScrollBar->setGeometry(600,0,20,800);
verticalScrollBar->setRange(0,100);
verticalScrollBar->setSingleStep(10);
verticalScrollBar->setStyleSheet("QScrollBar:Vertical {"
"border-top: 1px solid rgb(99, 174, 236);"
"border-left: 1px solid rgb(99, 174, 236);"
"border-right: 1px solid rgb(99, 174, 236);"
"background: rgb(255,255,255);"
"height: 15px;"
"margin: 0px 0 0px 0;"
"}");
label=new QLabel("0",this);
label->setGeometry(100,400,300,100);
connect(horizontalScrollBar,SIGNAL(valueChanged(int)),this,SLOT(horizontalScrollBarvalueChange(int)));
connect(verticalScrollBar,SIGNAL(valueChanged(int)),this,SLOT(verticalScrollBarvalueChange(int)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::horizontalScrollBarvalueChange(int value)
{
label->setText("horizontal value is:"+QString::number(value));
}
void MainWindow::verticalScrollBarvalueChange(int value)
{
label->setText("vertical value is:"+QString::number(value));
}
运行效果:
13、horizontal slider与vertical slider
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QSlider>
#include<QLabel>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QSlider *horizontalSlider,*verticalSlider;
QLabel *label;
private slots:
void valueChange(int value);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include<QSlider>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setGeometry(100,100,800,800);
setWindowTitle("slider");
horizontalSlider=new QSlider(Qt::Horizontal,this);
horizontalSlider->setGeometry(0,600,800,20);
horizontalSlider->setRange(0,100);
horizontalSlider->setPageStep(10);
horizontalSlider->setValue(60);
verticalSlider=new QSlider(Qt::Vertical,this);
verticalSlider->setGeometry(600,0,20,800);
verticalSlider->setRange(0,100);
verticalSlider->setPageStep(10);
verticalSlider->setValue(80);
label=new QLabel("horizontalSlider value is:"+QString::number(horizontalSlider->value())+"\n"+"verticalSlider value is:"+QString::number(verticalSlider->value()),this);
label->setGeometry(400,400,200,30);
connect(horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(valueChange(int)));
connect(verticalSlider,SIGNAL(valueChanged(int)),this,SLOT(valueChange(int)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::valueChange(int value)
{
label->setText("value is: "+QString::number(value));
}
运行效果:
14、key sequence edit
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QKeySequenceEdit>
#include<QLabel>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QKeySequenceEdit *keyEdit;
QLabel *label;
private slots:
void keyChange(QKeySequence key);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setGeometry(100,100,800,800);
setWindowTitle("key Squence Edit");
keyEdit=new QKeySequenceEdit(this);
keyEdit->setGeometry(200,200,500,50);
label=new QLabel("Ctrl + Q退出程序 ",this);
label->setGeometry(200,250,300,30);
connect(keyEdit,SIGNAL(keySequenceChanged(QKeySequence)),this,SLOT(keyChange(QKeySequence)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::keyChange(QKeySequence key)
{
if(key==QKeySequence("Ctrl+Q")){
this->close();
}else {
label->setText("you press keys is: "+key.toString());
}
}
运行效果:
下一篇文章:Qt6教程之二(8) Display Widgets
上一篇文章:Qt6教程之二(6) contains