Qt中findItems的头文件misc.h是什么头文件

QT头文件的作用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
QT头文件的作用
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢在Qt&Creator的项目中添加头文件和库
在Qt Creator中的工程中,工程通过.pro文件管理。
额外需要连接的连接库
unix:LIBS += -L your_lib_path -lyour_lib
win32:LIBS += your_lib_path/your_lib
额外需要的头文件目录
INCLUDEPATH += your_include_path
另外有一些比较重要的变量:
SOURCES:应用程序中所有源文件列表
HEADERS:应用程序中所有头文件列表
FORMS:应用程序中所有.ui文件列表
CONFIG:编译器使用的选项
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。评论-2211&
& & & &在上一篇博文 中,初步了解了Qt下UDP的使用,这一节就学习下TCP的使用。2者其实流程都差不多。当然了,本文还是参考的《Qt及Qt Quick开发实战精解》一书中的第5个例子,即局域网聊天工具中的UDP聊天和TCP文件传送部分。另外&上有其源码和相关教程下载。
&&&&&&&& 其发送端界面如下:
  & & & &&
&&&&&&&& 接收端界面如下:
&&&&&&&& 发送端,也即承担服务器角色的操作:
&&&&&&&& 在主界面程序右侧选择一个需要发送文件的用户,弹出发送端界面后,点击打开按钮,在本地计算机中选择需要发送的文件,点击发送按钮,则进度条上会显示当前文件传送的信息,有已传送文件大小信息,传送速度等信息。如果想关闭发送过程,则单击关闭按钮。
&&&&&&&& 其流程图如下:
&&&&&&&& 接收端,也即承担客户端角色的操作:
&&&&&&&& 当在主界面中突然弹出一个对话框,问是否接自某个用户名和IP地址的文件传送信息,如果接受则单击yes按钮,否则就单击no按钮。当接收文件时,选择好接收文件所存目录和文件名后就开始接收文件了,其过程也会显示已接收文件的大小,接收速度和剩余时间的大小等信息。
&&&&&&&& 其流程图如下:
&&&&&&&& TCP部分程序代码和注释如下:
&Widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include &QWidget&
class QUdpS
class TcpS//可以这样定义类?不用保护头文件的?
namespace Ui {
// 枚举变量标志信息的类型,分别为消息,新用户加入,用户退出,文件名,拒绝接受文件
enum MessageType{Message, NewParticipant, ParticipantLeft, FileName, Refuse};
class Widget : public QWidget
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
void newParticipant(QString userName,
QString localHostName, QString ipAddress);
void participantLeft(QString userName,
QString localHostName, QString time);
void sendMessage(MessageType type, QString serverAddress="");
QString getIP();
QString getUserName();
QString getMessage();
void hasPendingFile(QString userName, QString serverAddress,
QString clientAddress, QString fileName);
Ui::Widget *
QUdpSocket *udpS
QString fileN
TcpServer *
private slots:
void processPendingDatagrams();
void on_sendButton_clicked();
void getFileName(QString);
void on_sendToolBtn_clicked();
#endif // WIDGET_H
Widget.cpp:
#include "widget.h"
#include "ui_widget.h"
#include &QUdpSocket&
#include &QHostInfo&
#include &QMessageBox&
#include &QScrollBar&
#include &QDateTime&
#include &QNetworkInterface&
#include &QProcess&
#include "tcpserver.h"
#include "tcpclient.h"
#include &QFileDialog&
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
ui-&setupUi(this);
udpSocket = new QUdpSocket(this);
port = 45454;
udpSocket-&bind(port, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams()));
sendMessage(NewParticipant);
//TcpServer是tcpserver.ui对应的类,上面直接用QUdpSocket是因为没有单独的udpserver.ui类
server = new TcpServer(this);
//sendFileName()函数一发送,则触发槽函数getFileName()
connect(server, SIGNAL(sendFileName(QString)), this, SLOT(getFileName(QString)));
Widget::~Widget()
// 使用UDP广播发送信息
void Widget::sendMessage(MessageType type, QString serverAddress)
QDataStream out(&data, QIODevice::WriteOnly);
QString localHostName = QHostInfo::localHostName();
QString address = getIP();
out && type && getUserName() && localHostN
switch(type)
case Message :
if (ui-&messageTextEdit-&toPlainText() == "") {
QMessageBox::warning(0,tr("警告"),tr("发送内容不能为空"),QMessageBox::Ok);
out && address && getMessage();
ui-&messageBrowser-&verticalScrollBar()
-&setValue(ui-&messageBrowser-&verticalScrollBar()-&maximum());
case NewParticipant :
case ParticipantLeft :
case FileName : {
int row = ui-&userTableWidget-&currentRow();//必须选中需要发送的给谁才可以发送
QString clientAddress = ui-&userTableWidget-&item(row, 2)-&text();//(row,,2)为ip地址
out && address && clientAddress && fileN//发送本地ip,对方ip,所发送的文件名
case Refuse :
out && serverA
udpSocket-&writeDatagram(data,data.length(),QHostAddress::Broadcast, port);
// 接收UDP信息
void Widget::processPendingDatagrams()
while(udpSocket-&hasPendingDatagrams())
datagram.resize(udpSocket-&pendingDatagramSize());
udpSocket-&readDatagram(datagram.data(), datagram.size());
QDataStream in(&datagram, QIODevice::ReadOnly);
int messageT
in && messageT
QString userName,localHostName,ipAddress,
QString time = QDateTime::currentDateTime()
.toString("yyyy-MM-dd hh:mm:ss");
switch(messageType)
case Message:
in && userName && localHostName && ipAddress &&
ui-&messageBrowser-&setTextColor(Qt::blue);
ui-&messageBrowser-&setCurrentFont(QFont("Times New Roman",12));
ui-&messageBrowser-&append("[ " +userName+" ] "+ time);
ui-&messageBrowser-&append(message);
case NewParticipant:
in &&userName &&localHostName &&ipA
newParticipant(userName,localHostName,ipAddress);
case ParticipantLeft:
in &&userName &&localHostN
participantLeft(userName,localHostName,time);
case FileName: {
in && userName && localHostName && ipA
QString clientAddress, fileN
in && clientAddress && fileN
hasPendingFile(userName, ipAddress, clientAddress, fileName);
case Refuse: {
in && userName && localHostN
QString serverA
in && serverA
QString ipAddress = getIP();
if(ipAddress == serverAddress)
server-&refused();
// 处理新用户加入
void Widget::newParticipant(QString userName, QString localHostName, QString ipAddress)
bool isEmpty = ui-&userTableWidget-&findItems(localHostName, Qt::MatchExactly).isEmpty();
if (isEmpty) {
QTableWidgetItem *user = new QTableWidgetItem(userName);
QTableWidgetItem *host = new QTableWidgetItem(localHostName);
QTableWidgetItem *ip = new QTableWidgetItem(ipAddress);
ui-&userTableWidget-&insertRow(0);
ui-&userTableWidget-&setItem(0,0,user);
ui-&userTableWidget-&setItem(0,1,host);
ui-&userTableWidget-&setItem(0,2,ip);
ui-&messageBrowser-&setTextColor(Qt::gray);
ui-&messageBrowser-&setCurrentFont(QFont("Times New Roman",10));
ui-&messageBrowser-&append(tr("%1 在线!").arg(userName));
ui-&userNumLabel-&setText(tr("在线人数:%1").arg(ui-&userTableWidget-&rowCount()));
sendMessage(NewParticipant);
// 处理用户离开
void Widget::participantLeft(QString userName, QString localHostName, QString time)
int rowNum = ui-&userTableWidget-&findItems(localHostName, Qt::MatchExactly).first()-&row();
ui-&userTableWidget-&removeRow(rowNum);
ui-&messageBrowser-&setTextColor(Qt::gray);
ui-&messageBrowser-&setCurrentFont(QFont("Times New Roman", 10));
ui-&messageBrowser-&append(tr("%1 于 %2 离开!").arg(userName).arg(time));
ui-&userNumLabel-&setText(tr("在线人数:%1").arg(ui-&userTableWidget-&rowCount()));
// 获取ip地址
QString Widget::getIP()
QList&QHostAddress& list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list) {
if(address.protocol() == QAbstractSocket::IPv4Protocol)
return address.toString();
// 获取用户名
QString Widget::getUserName()
QStringList envV
envVariables && "USERNAME.*" && "USER.*" && "USERDOMAIN.*"
&& "HOSTNAME.*" && "DOMAINNAME.*";
QStringList environment = QProcess::systemEnvironment();
foreach (QString string, envVariables) {
int index = environment.indexOf(QRegExp(string));
if (index != -1) {
QStringList stringList = environment.at(index).split('=');
if (stringList.size() == 2) {
return stringList.at(1);
return "unknown";
// 获得要发送的消息
QString Widget::getMessage()
QString msg = ui-&messageTextEdit-&toHtml();
ui-&messageTextEdit-&clear();
ui-&messageTextEdit-&setFocus();
// 发送消息
void Widget::on_sendButton_clicked()
sendMessage(Message);
// 获取要发送的文件名
void Widget::getFileName(QString name)
fileName =
sendMessage(FileName);
// 传输文件按钮
void Widget::on_sendToolBtn_clicked()
if(ui-&userTableWidget-&selectedItems().isEmpty())//传送文件前需选择用户
QMessageBox::warning(0, tr("选择用户"),
tr("请先从用户列表选择要传送的用户!"), QMessageBox::Ok);
server-&show();
server-&initServer();
// 是否接收文件,客户端的显示
void Widget::hasPendingFile(QString userName, QString serverAddress,
QString clientAddress, QString fileName)
QString ipAddress = getIP();
if(ipAddress == clientAddress)
int btn = QMessageBox::information(this,tr("接受文件"),
tr("来自%1(%2)的文件:%3,是否接收?")
.arg(userName).arg(serverAddress).arg(fileName),
QMessageBox::Yes,QMessageBox::No);//弹出一个窗口
if (btn == QMessageBox::Yes) {
QString name = QFileDialog::getSaveFileName(0,tr("保存文件"),fileName);//name为另存为的文件名
if(!name.isEmpty())
TcpClient *client = new TcpClient(this);
client-&setFileName(name);
//客户端设置文件名
client-&setHostAddress(QHostAddress(serverAddress));
//客户端设置服务器地址
client-&show();
sendMessage(Refuse, serverAddress);
Tcpserver.h:
#ifndef TCPSERVER_H
#define TCPSERVER_H
#include &QDialog&
#include &QTime&
class QTcpS
class QTcpS
namespace Ui {
class TcpS
class TcpServer : public QDialog
explicit TcpServer(QWidget *parent = 0);
~TcpServer();
void initServer();
void refused();
protected:
void closeEvent(QCloseEvent *);
Ui::TcpServer *
qint16 tcpP
QTcpServer *tcpS
QString fileN
QString theFileN
QFile *localF
qint64 TotalB
qint64 bytesW
qint64 bytesToW
qint64 payloadS
QByteArray outB
QTcpSocket *clientC
private slots:
void sendMessage();
void updateClientProgress(qint64 numBytes);
void on_serverOpenBtn_clicked();
void on_serverSendBtn_clicked();
void on_serverCloseBtn_clicked();
void sendFileName(QString fileName);
#endif // TCPSERVER_H
Tcpserver.cpp:
#include "tcpserver.h"
#include "ui_tcpserver.h"
#include &QFile&
#include &QTcpServer&
#include &QTcpSocket&
#include &QMessageBox&
#include &QFileDialog&
#include &QDebug&
TcpServer::TcpServer(QWidget *parent) :
QDialog(parent),
ui(new Ui::TcpServer)
ui-&setupUi(this);
//每一个新类都有一个自己的ui
setFixedSize(350,180);
//初始化时窗口显示固定大小
tcpPort = 6666;
//tcp通信端口
tcpServer = new QTcpServer(this);
//newConnection表示当tcp有新连接时就发送信号
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendMessage()));
initServer();
TcpServer::~TcpServer()
void TcpServer::initServer()
payloadSize = 64*1024;
TotalBytes = 0;
bytesWritten = 0;
bytesToWrite = 0;
ui-&serverStatusLabel-&setText(tr("请选择要传送的文件"));
ui-&progressBar-&reset();//进度条复位
ui-&serverOpenBtn-&setEnabled(true);//open按钮可用
ui-&serverSendBtn-&setEnabled(false);//发送按钮不可用
tcpServer-&close();//tcp传送文件窗口不显示
// 开始发送数据
void TcpServer::sendMessage()
//是connect中的槽函数
ui-&serverSendBtn-&setEnabled(false);
//当在传送文件的过程中,发送按钮不可用
clientConnection = tcpServer-&nextPendingConnection();
//用来获取一个已连接的TcpSocket
//bytesWritten为qint64类型,即长整型
connect(clientConnection, SIGNAL(bytesWritten(qint64)),
this, SLOT(updateClientProgress(qint64)));
ui-&serverStatusLabel-&setText(tr("开始传送文件 %1 !").arg(theFileName));
localFile = new QFile(fileName);
//localFile代表的是文件内容本身
if(!localFile-&open((QFile::ReadOnly))){
QMessageBox::warning(this, tr("应用程序"), tr("无法读取文件 %1:\n%2")
.arg(fileName).arg(localFile-&errorString()));//errorString是系统自带的信息
TotalBytes = localFile-&size();//文件总大小
//头文件中的定义QByteArray outB
QDataStream sendOut(&outBlock, QIODevice::WriteOnly);//设置输出流属性
sendOut.setVersion(QDataStream::Qt_4_7);//设置Qt版本,不同版本的数据流格式不同
time.start();
// 开始计时
QString currentFile = fileName.right(fileName.size()
//currentFile代表所选文件的文件名
- fileName.lastIndexOf('/')-1);
//qint64(0)表示将0转换成qint64类型,与(qint64)0等价
//如果是,则此处为依次写入总大小信息空间,文件名大小信息空间,文件名
sendOut && qint64(0) && qint64(0) && currentF
TotalBytes += outBlock.size();//文件名大小等信息+实际文件大小
//sendOut.device()为返回io设备的当前设置,seek(0)表示设置当前pos为0
sendOut.device()-&seek(0);//返回到outBlock的开始,执行覆盖操作
//发送总大小空间和文件名大小空间
sendOut && TotalBytes && qint64((outBlock.size() - sizeof(qint64)*2));
//qint64 bytesWbytesToWrite表示还剩下的没发送完的数据
//clientConnection-&write(outBlock)为套接字将内容发送出去,返回实际发送出去的字节数
bytesToWrite = TotalBytes - clientConnection-&write(outBlock);
outBlock.resize(0);//why??
// 更新进度条,有数据发送时触发
void TcpServer::updateClientProgress(qint64 numBytes)
//qApp为指向一个应用对象的全局指针
qApp-&processEvents();//processEvents为处理所有的事件?
bytesWritten += (int)numB
if (bytesToWrite & 0) {
//没发送完毕
//初始化时payloadSize = 64*1024;qMin为返回参数中较小的值,每次最多发送64K的大小
outBlock = localFile-&read(qMin(bytesToWrite, payloadSize));
bytesToWrite -= (int)clientConnection-&write(outBlock);
outBlock.resize(0);//清空发送缓冲区
localFile-&close();
ui-&progressBar-&setMaximum(TotalBytes);//进度条的最大值为所发送信息的所有长度(包括附加信息)
ui-&progressBar-&setValue(bytesWritten);//进度条显示的进度长度为bytesWritten实时的长度
float useTime = time.elapsed();//从time.start()还是到当前所用的时间记录在useTime中
double speed = bytesWritten / useT
ui-&serverStatusLabel-&setText(tr("已发送 %1MB (%2MB/s) "
"\n共%3MB 已用时:%4秒\n估计剩余时间:%5秒")
.arg(bytesWritten / (1024*1024))
//转化成MB
.arg(speed*1000 / (1024*1024), 0, 'f', 2)
.arg(TotalBytes / (1024 * 1024))
.arg(useTime/1000, 0, 'f', 0)
//0,&f&,0是什么意思啊?
.arg(TotalBytes/speed/1000 - useTime/1000, 0, 'f', 0));
if(bytesWritten == TotalBytes) {
//当需发送文件的总长度等于已发送长度时,表示发送完毕!
localFile-&close();
tcpServer-&close();
ui-&serverStatusLabel-&setText(tr("传送文件 %1 成功").arg(theFileName));
// 打开按钮
void TcpServer::on_serverOpenBtn_clicked()
//QString fileNQFileDialog是一个提供给用户选择文件或目录的对话框
fileName = QFileDialog::getOpenFileName(this);
//filename为所选择的文件名(包含了路径名)
if(!fileName.isEmpty())
//fileName.right为返回filename最右边参数大小个字文件名,theFileName为所选真正的文件名
theFileName = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1);
ui-&serverStatusLabel-&setText(tr("要传送的文件为:%1 ").arg(theFileName));
ui-&serverSendBtn-&setEnabled(true);//发送按钮可用
ui-&serverOpenBtn-&setEnabled(false);//open按钮禁用
// 发送按钮
void TcpServer::on_serverSendBtn_clicked()
//tcpServer-&listen函数如果监听到有连接,则返回1,否则返回0
if(!tcpServer-&listen(QHostAddress::Any,tcpPort))//开始监听6666端口
qDebug() && tcpServer-&errorString();//此处的errorString是指?
ui-&serverStatusLabel-&setText(tr("等待对方接收... ..."));
emit sendFileName(theFileName);//发送已传送文件的信号,在widget.cpp构造函数中的connect()触发槽函数
// 关闭按钮,服务器端的关闭按钮
void TcpServer::on_serverCloseBtn_clicked()
if(tcpServer-&isListening())
//当tcp正在监听时,关闭tcp服务器端应用,即按下close键时就不监听tcp请求了
tcpServer-&close();
if (localFile-&isOpen())//如果所选择的文件已经打开,则关闭掉
localFile-&close();
clientConnection-&abort();//clientConnection为下一个连接?怎么理解
close();//关闭本ui,即本对话框
// 被对方拒绝
void TcpServer::refused()
tcpServer-&close();
ui-&serverStatusLabel-&setText(tr("对方拒绝接收!!!"));
// 关闭事件
void TcpServer::closeEvent(QCloseEvent *)
on_serverCloseBtn_clicked();
Tcpclient.h:
#ifndef TCPCLIENT_H
#define TCPCLIENT_H
#include &QDialog&
#include &QHostAddress&
#include &QFile&
#include &QTime&
class QTcpS
namespace Ui {
class TcpC
class TcpClient : public QDialog
explicit TcpClient(QWidget *parent = 0);
~TcpClient();
void setHostAddress(QHostAddress address);
void setFileName(QString fileName);
protected:
void closeEvent(QCloseEvent *);
Ui::TcpClient *
QTcpSocket *tcpC
quint16 blockS
QHostAddress hostA
qint16 tcpP
qint64 TotalB
qint64 bytesR
qint64 bytesToR
qint64 fileNameS
QString fileN
QFile *localF
QByteArray inB
private slots:
void on_tcpClientCancleBtn_clicked();
void on_tcpClientCloseBtn_clicked();
void newConnect();
void readMessage();
void displayError(QAbstractSocket::SocketError);
#endif // TCPCLIENT_H
Tcpclient.cpp:
#include "tcpclient.h"
#include "ui_tcpclient.h"
#include &QTcpSocket&
#include &QDebug&
#include &QMessageBox&
TcpClient::TcpClient(QWidget *parent) :
QDialog(parent),
ui(new Ui::TcpClient)
ui-&setupUi(this);
setFixedSize(350,180);
TotalBytes = 0;
bytesReceived = 0;
fileNameSize = 0;
tcpClient = new QTcpSocket(this);
tcpPort = 6666;
connect(tcpClient, SIGNAL(readyRead()), this, SLOT(readMessage()));
connect(tcpClient, SIGNAL(error(QAbstractSocket::SocketError)), this,
SLOT(displayError(QAbstractSocket::SocketError)));
TcpClient::~TcpClient()
// 设置文件名
void TcpClient::setFileName(QString fileName)
localFile = new QFile(fileName);
// 设置地址
void TcpClient::setHostAddress(QHostAddress address)
hostAddress =
newConnect();
// 创建新连接
void TcpClient::newConnect()
blockSize = 0;
tcpClient-&abort();
//取消已有的连接
tcpClient-&connectToHost(hostAddress, tcpPort);//连接到指定ip地址和端口的主机
time.start();
// 读取数据
void TcpClient::readMessage()
QDataStream in(tcpClient);
//这里的QDataStream可以直接用QTcpSocket对象做参数
in.setVersion(QDataStream::Qt_4_7);
float useTime = time.elapsed();
if (bytesReceived &= sizeof(qint64)*2) {
//说明刚开始接受数据
if ((tcpClient-&bytesAvailable()
//bytesAvailable为返回将要被读取的字节数
&= sizeof(qint64)*2) && (fileNameSize == 0))
//接受数据总大小信息和文件名大小信息
in&&TotalBytes&&fileNameS
bytesReceived += sizeof(qint64)*2;
if((tcpClient-&bytesAvailable() &= fileNameSize) && (fileNameSize != 0)){
//开始接受文件,并建立文件
bytesReceived +=fileNameS
if(!localFile-&open(QFile::WriteOnly)){
QMessageBox::warning(this,tr("应用程序"),tr("无法读取文件 %1:\n%2.")
.arg(fileName).arg(localFile-&errorString()));
if (bytesReceived & TotalBytes) {
bytesReceived += tcpClient-&bytesAvailable();//返回tcpClient中字节的总数
inBlock = tcpClient-&readAll();
//返回读到的所有数据
localFile-&write(inBlock);
inBlock.resize(0);
ui-&progressBar-&setMaximum(TotalBytes);
ui-&progressBar-&setValue(bytesReceived);
double speed = bytesReceived / useT
ui-&tcpClientStatusLabel-&setText(tr("已接收 %1MB (%2MB/s) "
"\n共%3MB 已用时:%4秒\n估计剩余时间:%5秒")
.arg(bytesReceived / (1024*1024))
.arg(speed*1000/(1024*1024),0,'f',2)
.arg(TotalBytes / (1024 * 1024))
.arg(useTime/1000,0,'f',0)
.arg(TotalBytes/speed/1000 - useTime/1000,0,'f',0));
if(bytesReceived == TotalBytes)
localFile-&close();
tcpClient-&close();
ui-&tcpClientStatusLabel-&setText(tr("接收文件 %1 完毕")
.arg(fileName));
// 错误处理
//QAbstractSocket类提供了所有scoket的通用功能,socketError为枚举型
void TcpClient::displayError(QAbstractSocket::SocketError socketError)
switch(socketError)
//RemoteHostClosedError为远处主机关闭了连接时发出的错误信号
case QAbstractSocket::RemoteHostClosedError : break;
default : qDebug() && tcpClient-&errorString();
// 取消按钮
void TcpClient::on_tcpClientCancleBtn_clicked()
tcpClient-&abort();
if (localFile-&isOpen())
localFile-&close();
// 关闭按钮
void TcpClient::on_tcpClientCloseBtn_clicked()
tcpClient-&abort();
if (localFile-&isOpen())
localFile-&close();
// 关闭事件
void TcpClient::closeEvent(QCloseEvent *)
on_tcpClientCloseBtn_clicked();
#include &QtGui/QApplication&
#include "widget.h"
#include &QTextCodec&
int main(int argc, char *argv[])
QApplication a(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
return a.exec();
阅读(...) 评论()
阿萨德发斯蒂芬您正在查看:
Qt 分类下的文章
作者:siddim |
时间:May 3, 2017 |
37 输入组件(Input Widgets)
Creator有15种Input Widgets,如图3-62所示。 图3-62 Input Widgets控件
Input Widgets的类和名称介绍如表3-18所示。 表3-18 Input Widgets介绍
本节主要介绍Qt Creator的Input Widgets的使用方法。Qt具有多种Input类型控件,分别有ComboBox、LineEdit、TextEdit等显示控件。Qt Creator比Qt Designer新增添了很多输入控件,使开发人员更加方便设计。 下面就来具体介绍各种Input Widgets的用法。
371 ComboBox控件
1控件位置 Input Widgets→ComboBox 2控件介绍 ComboBox控件(组合框)的样式如图3-63所示。Qt Creator的ComboBox和Qt Designer的ComboBox样式有些不同。
图3-63 ComboBox控件
3控件设置选项 在ComboBox控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置显示的字体; editable:用来获取或设置一个值,以确定ComboBox的编辑框是否可编辑。值为true时为可编辑,值为false时为只读; currentIndex:当前选项的索引; maxVisibleItems:ComboBox可见的最大项目数; maxCount:ComboBox的最大项目数。 4常用成员函数
1 1) QComboBox::QComboBox ( QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent的ComboBox。
1 2) QComboBox::QComboBox ( bool rw, QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent的ComboBox。如果rw是true,则编辑栏可编辑;否则只能选择ComboBox项目之一。
1 3) void QComboBox::clear () [slot]
删除ComboBox中的所有项目。
1 4) int QComboBox::count () const
返回ComboBox中的项目数。
1 5) int QComboBox::currentItem () const
返回ComboBox中当前项目的索引。
1 6) QString QComboBox::currentText () const
返回组合框的当前项目文本。
1 7) void QComboBox::insertItem ( const QString & t, int index = -1 )
在索引index处,插入一个文本为t的项目。如果index是负数,该项目将被追加到末尾。
1 8) void QComboBox::insertItem ( const QPixmap & pixmap, int index = -1 )
在索引index处,插入一个图标为pixmap的项目。如果index是负数,该项目将被追加到末尾。
1 9) void QComboBox::insertItem ( const QPixmap & pixmap, const QString & text, int index = -1 )
在索引index处,插入一个文本为t和图标为pixmap的项目。如果index是负数,该项目将被追加到末尾。
1 10) QString QComboBox::currentText () const
返回组合框的当前项目文本。
1 11) void QComboBox::removeItem ( int index )
删除索引index处项目。
1 12) void QComboBox::setCurrentItem ( int index ) [virtual]
把索引index处的项目设为当前项目。
372 Font ComboBox控件
1控件位置 Input Widgets→Font ComboBox 2控件介绍 Font ComboBox控件(字体组合框)继承于QComboBox类,样式如图3-64所示。Font ComboBox组合框分两个部分显示:顶部是一个允许输入文本的文本框,下面的列表框则显示列表项。可以认为Font ComboBox就是文本框与列表框的组合。与列表框相比,组合框不能选择多项,只能选择其中的一项,专门用于字体选择。 图3-64 Font ComboBox控件
3控件设置选项 在Font ComboBox控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置显示的字体;
editable:用来获取或设置一个值,以确定ComboBox的编辑框是否可编辑。值为true时为可编辑,值为false时为只读; currentIndex:当前选项的索引; currentFont:当前字体; maxVisibleItems:ComboBox可见的最大项目数; maxCount:ComboBox的最大项目数。 4常用成员函数
1 QFontComboBox::QFontComboBox ( QWidget *parent = 0 )
构造一个父对象为parent的Font ComboBox。
373 LineEdit控件
1控件位置 Input Widgets→LineEdit 2控件介绍 LineEdit控件(行编辑)是一种常用且比较容易掌握的控件。应用程序主要使用它来接收输入文字信息,样式如图3-65所示。
图3-65 LineEdit控件
3控件设置选项 在LineEdit控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; text:该控件对应图形中显示的名称; font:设置text的字体; ReadOnly:用来获取或设置一个值,该值指示文本框中的文本是否为只读,值为true时为只读,值为false时为可读写。 4常用成员函数
1 1) QLineEdit::QLineEdit ( QWidget *parent, const char *name = 0 )
构造一个名称为name、父对象为parent的LineEdit。
1 2) QLineEdit::QLineEdit ( const QString & contents, QWidget *parent, const char *name = 0 )
构造一个名称为name、父对象为parent和内容为contents的LineEdit。
1 3) void QLineEdit::clear () [virtual slot]
清除行编辑的内容。
1 4) bool QLineEdit::isReadOnly () const
如果行编辑是只读则返回true,否则返回false。
1 5) void QLineEdit::setReadOnly ( bool )[virtual slot]
设置行编辑的读写属性。
1 6) void QLineEdit::setText ( const QString & ) [virtual slot]
设置行编辑的文本。
1 7) QString QLineEdit::text () const
返回行编辑的文本。
374 TextEdit控件
1控件位置 Input Widgets→TextEdit 2控件介绍 TextEdit控件(文本编辑)的样式如图3-66所示。应用程序主要使用它输入文本信息或显示文本信息。TextEdit的属性和成员函数与LineEdit基本相同,在此不做介绍。
图3-66 TextEdit控件
375 PlainTextEdit控件
1控件位置 Input Widgets→PlainTextEdit 2控件介绍 PlainTextEdit控件中文称作“文本编辑”。PlainTextEdit控件和TextEdit控件只是样式有些不同,可以通过设置属性来改变样式。 3常用成员函数 构造函数:
1 1) QPlainTextEdit::QPlainTextEdit ( QWidget *parent = 0 )
2 2) QPlainTextEdit::QPlainTextEdit ( const QString & text, QWidget *parent = 0 )
1 QPlainTextEdit *plaintextedit = new QPlainTextEdit(&Hello World!&,this);
376 示例15:ComboBox、LineEdit和TextEdit的应用(1)
ComboBox、LineEdit和TextEdit都是常用控件,并且Font ComboBox和ComboBox用法相似,PlainTextEdit和TextEdit用法相似,所以Font ComboBox和PlainTextEdit的示例就不再单独列举,这里用一个综合示例来介绍这几个控件的详细用法。 首先创建标准的Qt Gui Application项目,把项目在主界面中自动生成的toolBar、menuBar和statusBar删除,界面设计结果如图3-67所示。 1控件说明 在属性编辑窗口中对控件的属性进行修改,修改内容如表3-19所示。 图3-67 示例15界面
表3-19 主要控件说明
控件类型控件名称控件说明QLineEditleX四则运算的第一个参数QComboBoxcbxRule四则运算的规则QLineEditleY四则运算的第二个参数QPushButtonbtnEqual计算结果QTextEdittextEditResult显示计算结果 2示例说明 本示例实现的是简单的四则运算; 在两个输入框中输入两个参数,选择运算法则,然后单击“=”按钮,运算结果显示在右边的textEdit框中。 3示例实现 头文件mainwindowh(文中的粗体为需要添加的内容):
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 #include
4 namespace Ui {
5 class MainW
7 class MainWindow : public QMainWindow
9 Q_OBJECT
10 public:
11 explicit MainWindow(QWidget *parent = 0);
12 ~MainWindow();
13 private:
14 Ui::MainWindow *
15 private slots: //声明槽函数
16 void on_btnEqual_clicked();
18 #endif // MAINWINDOW_H
在头文件中声明一个槽函数on_btnEqual_clicked(),对应按钮“=”的单击信号。此处的槽函数是通过右击控件→Go to slots自动生成的,所以不用在实现文件中添加映射函数。 在主窗体mainwindowcpp文件中自动生成如下代码:
1 #include &mainwindowh&
2 #include &ui_mainwindowh&
3 MainWindow::MainWindow(QWidget *parent) :
4 QMainWindow(parent),
5 ui(new Ui::MainWindow)
7 ui-&setupUi(this);
9 MainWindow::~MainWindow()
376 示例15:ComboBox、LineEdit和TextEdit的应用(2)
在主窗体mainwindowcpp文件中添加的头文件:
1 #include
在主窗体mainwindowcpp文件中槽函数on_btnEqual_clicked():
1 /槽函数:计算结果/
2 void MainWindow::on_btnEqual_clicked()
4 if(ui-&leX-&text()isEmpty())
6 QMessageBox::warning(NULL, &warning&, &Please input X &, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
8 if(ui-&leY-&text()isEmpty())
10 QMessageBox::warning(NULL, &warning&, &Please input Y &, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
12 int x,y;
13 str += ui-&leX-&text()+ui-&cbxRule-&currentText()+ui-&leY-&text()+& = &;
15 /**************获取x和y*********************************/
16 x=ui-&leX-&text()toInt();
17 y=ui-&leY-&text()toInt();
19 /**************判断法则**********************************/
20 if(ui-&cbxRule-&currentText()==&+&)
21 str +=QString::number(x+y)+&\n&;
22 else if(ui-&cbxRule-&currentText()==&-&)
23 str +=QString::number(x-y)+&\n&;
24 else if(ui-&cbxRule-&currentText()==&&)
25 str +=QString::number(xy)+&\n&;
26 else if(ui-&cbxRule-&currentText()==&/&)
27 str +=QString::number(x/y)+&\n&;
29 /****************显示结果***********************************/
30 ui-&textEditResult-&setText(str);
主文件maincpp没有进行任何更改,使用该项目自动生成的即可。 4示例执行结果 示例执行结果如图3-68所示。 图3-68 示例15执行结果
377 SpinBox控件
1控件位置 Input Widgets→SpinBox 2控件介绍 SpinBox控件(整数旋转框)的样式如图3-69所示。SpinBox允许用户通过单击向上/向下按钮来增加/减少当前显示的值,也可以直接输入旋转框的值。如果该值是直接输入旋转框,一般需要按【Enter】键确认新值(有的版本不需要),该值通常是一个整数。 图3-69 SpinBox控件
3控件设置选项 在SpinBox控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置编辑框的字体; value:SpinBox默认值; lineStep:使用箭头来改变旋转框的值的递增/递减量;
minValue:SpinBox的最小值; maxValue:SpinBox的最大值; prefix:SpinBox的前缀字符串; Suffix:SpinBox的后缀字符串。 4常用成员函数
1 1) QSpinBox::QSpinBox ( QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent的SpinBox。
1 2) QSpinBox::QSpinBox ( int minValue, int maxValue, int step = 1, QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent、最小值为minValue、最大值为maxValue和增/减量为step的SpinBox。例如:
1 QSpinBox *sb = new QSpinBox(0,99,1,this);
2 3) void QSpinBox::stepDown () [virtual slot]
把旋转框的值减小一个lineStep。等同于单击向下按钮。
1 4) void QSpinBox::stepUp () [virtual slot]
把旋转框的值增加一个lineStep。等同于单击向上按钮。
1 5) QString QSpinBox::text () const
返回旋转框的文本,包括前缀和后缀。
1 6) int QSpinBox::value () const
返回旋转框的值。
1 7) void QSpinBox::setValue ( int value ) [virtual slot]
设置旋转框的值。
1 8) void QSpinBox::setLineStep ( int )
设置旋转框的增/减量。
1 9) void QSpinBox::setMaxValue ( int )
设置旋转框的最大值。
1 10) void QSpinBox::setMinValue ( int )
设置旋转框的最小值。
1 11) void QSpinBox::setPrefix ( const QString & text ) [virtual slot]
设置旋转框的前缀字符串。
1 12) void QSpinBox::setSuffix ( const QString & text ) [virtual slot]
设置旋转框的后缀字符串。
378 Double SpinBox控件
1控件位置 Input Widgets→Double SpinBox 2控件介绍
Double SpinBox控件(小数旋转框)继承于QSpinBox,样式如图3-70所示。Double SpinBox与SpinBox的不同是其可以表示小数,而其他的功能都一样。 图3-70 Double SpinBox控件
3控件设置选项 在Double SpinBox控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置编辑框的字体; value:SpinBox默认值; lineStep:使用箭头来改变旋转框的值的递增/递减量; minValue:SpinBox的最小值; maxValue:SpinBox的最大值; prefix:SpinBox的前缀字符串; Suffix:SpinBox的后缀字符串;
decimals:SpinBox的小数位数。 4常用成员函数
1 1) QDoubleSpinBox::QDoubleSpinBox ( QWidget *parent = 0 )
构造一个父对象为parent的Double SpinBox,例如:
1 QDoubleSpinBox *dsb = new QDoubleSpinBox(this);
379 Slider控件
1控件位置 Input Widgets→Horizontal/Vertical Slider 2控件介绍 Slider控件(滑动条)的样式如图3-71所示。与Qt Designer不同的是,Qt Creator只是把Slider分成Horizontal/Vertical Slider两个控件,但是功能相同,两种滑动条之间可以相互转换,只须改变orientation属性即可。
图3-71 Slider控件
3控件设置选项 在Slider控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置滑动条上的字体; lineStep:滑动条值的最小跨度; value:滑动条的值; minValue:滑动条的最小值; maxValue:滑动条的最大值; orientation:滑动条的布局方向,Qt提供的选择有Horizontal和Vertical。 4常用成员函数
1 1) QSlider::QSlider ( QWidget *parent, const char *name = 0 )
构造一个名称为name、父对象为parent的Slider。
1 2) QSlider::QSlider ( Qrientation orientation, QWidget *parent , const char *name = 0 )
构造一个名称为name、父对象为parent和布局方向为orientation的Slider。
1 3) QSlider::QSlider ( int minValue, int maxValue, int pageStep, int value, Orientation orientation, QWidget *parent , const char *name = 0 )
构造一个名称为name、父对象为parent、布局方向为orientation、最大值为maxValue、最小值为minValue、页步长为pageStep和值为value的Slider。
1 4) void QSlider::setValue ( int v ) [virtual slot]
设置该滑动条的值为v。
1 5) int QSlider::value () const
返回该滑动条的值。
3710 示例16:SpinBox、Double SpinBox和Slider的应用(1)
首先创建标准的Qt Gui Application项目,把项目在主界面中自动生成的toolBar、menuBar和statusBar删除。设计界面如图3-72所示。
图3-72 示例16界面
1控件说明 在属性编辑窗口中对控件的属性进行修改,修改内容如表3-20所示。 表3-20 主要控件说明
2示例说明 改变spinBox的值,horizontalSlider的值随着改变;改变horizontalSlider的值,spinBox的值也会随着改变; 改变doubleSpinBox的值,horizontalSlider_2的值随着改变;改变horizontalSlider_2的值,doubleSpinBox的值也会随着改变。 3示例实现 头文件mainwindowh(文中的粗体为需要添加的内容):
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 #include
4 namespace Ui {
5 class MainW
7 class MainWindow : public QMainWindow
9 Q_OBJECT
10 public:
11 explicit MainWindow(QWidget *parent = 0);
12 ~MainWindow();
13 private:
14 Ui::MainWindow *
15 private slots://声明槽函数
16 void slotDoubleSpinbox_Slider();
17 void slotSlider_DoubleSpinbox();
19 #endif // MAINWINDOW_H
在头文件中声明两个槽函数,槽函数slotDoubleSpinbox_Slider()使horizontalSlider_2的值随着doubleSpinBox的值发生变化而变化;槽函数slotSlider_DoubleSpinbox()使doubleSpinBox的值随着horizontalSlider_2的值改变而改变。另外,在Signals & Slots Editor窗口中添加了两个信号和槽的映射,如图3-73所示。 图3-73 信号与槽的映射
在主窗体mainwindowcpp文件中自动生成如下代码:
1 #include &mainwindowh&
2 #include &ui_mainwindowh&
3 MainWindow::MainWindow(QWidget parent) :
6 QMainWindow(parent),
7 ui(new Ui::MainWindow)
9 ui-&setupUi(this);
11 MainWindow::~MainWindow()
3710 示例16:SpinBox、Double SpinBox和Slider的应用(2) 在主窗体mainwindowcpp文件中构造函数:
1 /构造函数*/
2 MainWindow::MainWindow(QWidget *parent) :
3 QMainWindow(parent),
4 ui(new Ui::MainWindow)
6 ui-&setupUi(this);
8 /*********信号和槽的映射******************************/
9 connect(ui-&doubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(slotDoubleSpinbox_Slider()));
10 connect(ui-&horizontalSlider_2, SIGNAL(valueChanged(int)), this, SLOT(slotSlider_DoubleSpinbox()));
在主窗体mainwindowcpp文件中添加槽函数slotDoubleSpinbox_Slider():
1 /槽函数:设置horizontalSlider_2的值/
2 void MainWindow::slotDoubleSpinbox_Slider()
4 ui-&horizontalSlider_2-&setValue((int)(ui-&doubleSpinBox-&value()100));
在主窗体mainwindowcpp文件中添加QSlider horizontalSlider_2的槽函数:
1 /槽函数:设置doubleSpinBox的值*/
2 void MainWindow::slotSlider_DoubleSpinbox()
4 ui-&doubleSpinBox-&setValue((double)(ui-&horizontalSlider_2-&value())/100);
主文件maincpp没有进行任何更改,使用项目自动生成的即可。 4示例执行结果 示例执行结果如图3-74所示。 图3-74 示例16执行结果
3711 Dial控件
1控件位置 Input Widgets→Dial
2控件介绍 Dial控件(表盘)的样式如图3-75所示。Dial可以用来描述各种各样的仪表盘样式。 图3-75 Dial控件
3控件设置选项 在Dial控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置表盘上的字体; lineStep:表盘值的最小跨度; value:表盘的值; minValue:表盘的最小值; maxValue:表盘的最大值; notchTarget:表盘的刻度;
notchesVisible:是否显示表盘刻度,值为true时显示,否则不显示。 4常用成员函数
1 1) QDial::QDial ( QWidget *parent = 0, const char *name = 0, WFlags f = 0 )
构造一个名称为name、父对象为parent的Dial。
1 2) QDial::QDial ( int minValue, int maxValue, int pageStep, int value, QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent、最大值为maxValue、最小值为minValue、步长为pageStep和值为value的Dial。
1 3) void QDial::setValue ( int v ) [virtual slot]
设置该表盘的值为v。
1 4) int QDial::value () const
返回该表盘的值。
3712 示例17:Dial的应用
Dial是绘制一些表盘时的最好选择,界面美观大方,使用起来还很简单。下面就通过示例来了解Dail的具体用法。 首先创建标准的Qt Gui Application项目,把项目在主界面中自动生成的toolBar、menuBar和statusBar删除,界面设计结果如图3-76所示。
图3-76 示例17界面
1控件说明 在属性编辑窗口中对控件的属性进行修改,修改内容如表3-21所示。 2示例说明 改变spinBox的值,dial的值随着改变;改变dial的值,spinBox的值也会随着改变。 3示例实现 在这个示例中,不需要手动添加任何代码,只须在Signals & Slots Editor窗口中添加了两个信号和槽的映射即可,如图3-77所示。 图3-77 信号与槽的映射
4示例执行结果 示例执行结果如图3-78所示。
图3-78 示例17执行结果
表3-21 主要控件说明
3713 ScrollBar控件
1控件位置 Input Widgets→Horizontal/Vertical ScrollBar 2控件介绍
ScrollBar控件(滚动条)的样式如图3-79所示。ScrollBar和Slider相同,Qt Creator只是把Slider分成Horizontal Slider和Vertical
Slider两个控件。两种滚动条之间同样可以相互转换,只须改变orientation属性即可。 图3-79 ScrollBar控件3控件设置选项
在ScrollBar控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置滑动条上的字体; lineStep:滑动条值的最小跨度; value:滑动条的值; minValue:滑动条的最小值; maxValue:滑动条的最大值;
orientation:滑动条的布局方向,Qt提供的选择有Horizontal和Vertical。 4常用成员函数
1 1) QScrollBar::QScrollBar ( QWidget *parent, const char *name = 0 )
构造一个名称为name、父对象为parent的ScrollBar。
1 2) QScrollBar::QScrollBar ( Orientation orientation, QWidget *parent, const char *name = 0 )
构造一个名称为name、父对象为parent、布局方向为orientation的ScrollBar。
1 3) void QScrollBar::setValue ( int v ) [slot]
设置该滚动条的值为v。
1 4) int QScrollBar::value () const
返回该滚动条的值。
3714 DateEdit控件
1控件位置 Input Widgets→DateEdit 2控件介绍 DateEdit控件(日期编辑框)的样式如图3-80所示,是用来编辑和显示日期的控件。
图3-80 DateEdit控件
3控件设置选项 在DateEdit控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置文本框的字体; date:显示的日期; minValue:日期的最小值; maxValue:日期的最大值; order:设置日期显示格式,Qt提供的格式有YMD、YDM、DMY。 4常用成员函数
1 1) QDateEdit::QDateEdit ( QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent的DateEdit。
1 2) QDateEdit::QDateEdit ( const QDate & date, QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent、当前显示日期为date的DateEdit。下面是以当前日期构造的一个对象示例:
1 QDateEdit *Date = new QDateEdit(QDate::currentDate(), this );
2 3) QDate QDateEdit::date () const
返回DateEdit控件Date的值。
1 4) void QDateEdit::setDate ( const QDate & date ) [virtual]
设置DateEdit控件Date的值为date。
1 5) void QDateEdit::setDay ( int day ) [virtual protected]
设置DateEdit控件Date的Day为day,必须确保day为有效值。
1 6) void QDateEdit::setMonth ( int month ) [virtual protected]
设置DateEdit控件Date的Month为month,必须确保month为有效值。
1 7) void QDateEdit::setYear ( int year ) [virtual protected]
设置DateEdit控件Date的Year为year,必须确保year为有效值。
3715 TimeEdit控件
1控件位置 Input Widgets→TimeEdit 2控件介绍 TimeEdit控件(时间编辑框)的样式如图3-81所示,是用来编辑和显示时间的控件。 图3-81 TimeEdit控件
3控件设置选项 在TimeEdit控件的properties选项中,一般常对以下选项进行设置: name:该控件对应源代码中的名称; font:设置文本框的字体; time:显示的日期;
minValue:时间的最小值,默认是00:00:00;
maxValue:时间的最大值,默认是23:59:59; display:设置时间显示格式。 4常用成员函数
1 1) QTimeEdit::QTimeEdit ( QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent的TimeEdit。
1 2) QTimeEdit::QTimeEdit ( const QTime & time, QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent、当前显示时间为time的TimeEdit。
1 3) QTime QTimeEdit::time () const
返回TimeEdit控件Time的值。
1 4) void QTimeEdit::setTime ( const QTime & time ) [virtual]
设置TimeEdit控件Time的值为time。
1 5) void QTimeEdit::setHour ( int h ) [virtual protected]
设置TimeEdit控件Time的Hour为h,必须确保h为有效值。
1 6) void QTimeEdit::setMinute ( int m ) [virtual protected]
设置TimeEdit控件Time的Minute为m,必须确保m为有效值。
1 7) void QTimeEdit::setSecond ( int s ) [virtual protected]
设置TimeEdit控件Time的Second为s,必须确保s为有效值。
3716 DateTimeEdit控件
1控件位置 Input Widgets→DateTimeEdit 2控件介绍 DateTimeEdit控件(日期时间编辑框)的样式如图3-82所示。DateTimeEdit是一个用来编辑和显示日期和时间的控件,相当于把DateEdit和TimeEdit联合起来一起使用。这里不做过多介绍,会在接下来的示例中具体介绍DateTimeEdit控件的用法。 图3-82 DateTimeEdit控件
3控件设置选项 在DateTimeEdit控件的properties选项中,一般常对以下选项进行设置: name:该控件对应源代码中的名称;
font:设置文本框的字体;
datetime:显示的日期和时间。
3717 示例18:DateEdit、TimeEdit和DateTimeEdit的应用(1)
首先创建标准的Qt Gui Application项目,把项目在主界面中自动生成的toolBar、menuBar和statusBar删除,界面设计结果如图3-83所示。 图3-83 示例18界面
1控件说明 在属性编辑窗口中对控件的属性进行修改,修改内容如表3-22所示。 表3-22 主要控件说明
2示例说明 程序执行后,dateTimeEdit显示当前系统时间,并时刻更新; dateTimeEdit、dateEdit和timeEdit是只读的; 单击按钮“Edit Date”,可以编辑dateEdit,dateTimeEdit和dateEdit是同步的。单击按钮“OK”,结束编辑,dateEidt变成只读的; 单击按钮“Edit Time”,可以编辑timeEdit,dateTimeEdit和timeEdit是同步的。单击按钮“OK”,结束编辑,timeEidt变成只读的。 3示例实现 头文件mainwindowh(文中的粗体为需要添加的内容):
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 #include
4 namespace Ui {
5 class MainW
7 class MainWindow : public QMainWindow
9 Q_OBJECT
10 public:
11 explicit MainWindow(QWidget *parent = 0);
12 ~MainWindow();
13 private:
14 Ui::MainWindow *
15 private slots://声明槽函数
16 void on_btnEditTime_clicked();
17 void on_btnOk_clicked();
18 void on_btnEditDate_clicked();
19 void timeoutslot();
21 #endif // MAINWINDOW_H
声明四个槽函数,槽函数timeoutslot()是自己声明的,对应定时器timer;其他三个槽函数都是通过右击控件→Go to slots自动生成的,所以不用在实现文件中添加映射函数。 在主窗体mainwindowcpp文件中自动生成如下代码:
1 #include &mainwindowh&
2 #include &ui_mainwindowh&
3 MainWindow::MainWindow(QWidget *parent) :
4 QMainWindow(parent),
5 ui(new Ui::MainWindow)
7 ui-&setupUi(this);
9 MainWindow::~MainWindow()
3717 示例18:DateEdit、TimeEdit和DateTimeEdit的应用(2) 在主窗体mainwindowcpp文件中添加的头文件:
1 #include
在主窗体mainwindowcpp文件中构造函数:
1 /构造函数/
2 MainWindow::MainWindow(QWidget *parent) :
3 QMainWindow(parent),
4 ui(new Ui::MainWindow)
6 ui-&setupUi(this);
8 /*********初始化**********************************/
9 ui-&dateTimeEdit-&setDate(QDate::currentDate()); //获取当前日期
10 ui-&dateTimeEdit-&setTime(QTime::currentTime());//获取当前时间
11 QTimer *timer=new QTimer(this);
12 connect(timer,SIGNAL(timeout()),this,SLOT(timeoutslot()));//timeoutslot()为自定义槽
14 /*********启动timer定时器******************************/
15 timer-&start(1000);
在主窗体mainwindowcpp文件中添加QPushButton btnEditDate的槽函数:
1 /***********定义槽函数,编辑date***********************/
2 void MainWindow::on_btnEditDate_clicked()
4 ui-&dateEdit-&setReadOnly(false); //设置dateEdit的只读属性为假
5 connect(ui-&dateEdit,SIGNAL(dateChanged(QDate)),ui-&dateTimeEdit, SLOT(setDate(QDate)));
在主窗体mainwindowcpp文件中添加QPushButton btnEditTime的槽函数:
1 /**********定义槽函数,编辑时间***************************/
2 void MainWindow::on_btnEditTime_clicked()
4 ui-&timeEdit-&setReadOnly(false); //设置timeEdit的只读属性为假
5 connect(ui-&timeEdit,SIGNAL(timeChanged(QTime)),ui-&dateTimeEdit, SLOT(setTime(QTime)));
在主窗体mainwindowcpp文件中添加QPushButton btnOk的槽函数:
1 /***********定义槽函数,保存编辑***************************/
2 void MainWindow::on_btnOk_clicked()
4 ui-&dateEdit-&setReadOnly(true);
5 ui-&timeEdit-&setReadOnly(true);
在主窗体mainwindowcpp文件中添加QTimer timer的槽函数:
1 /***********定义timer的槽函数*********************************/
2 void MainWindow::timeoutslot()
4 QDate date = ui-&dateTimeEdit-&date();
7 QTime time = ui-&dateTimeEdit-&time();
8 QTime time1(23,59,59);
9 if(time == time1)
11 datedate = dateaddDays(1);
13 timetime = timeaddSecs(1);
14 ui-&dateTimeEdit-&setDate(date);
15 ui-&dateTimeEdit-&setTime(time);
主文件maincpp没有进行任何更改,使用项目自动生成的即可。 4示例执行结果
示例执行结果如图3-84所示。 图3-84 示例18执行结果
38 显示组件(Display Widgets)
Qt Designer有十种DisplayWidgets,如图3-85所示。 图3-85 Display控件
Display Widgets的Qt类和名称介绍如表3-23所示。 表3-23 Display Widgets介绍
本节主要介绍Qt Creator的Display Widgets的使用方法。Qt Creator比Qt Designer提供更多的Display Widgets。 下面就来具体介绍各种Display Widgets的用法。
381 Label控件
1控件位置 Display Widgets→Label 2控件介绍 Label控件(标签)的样式如图3-86所示。同Qt Designer中的TextLabel控件。 图3-86 Label控件
3控件设置选项 在Label控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置text的字体; text:用来设置或返回标签控件中显示的文本信息。 4常用成员函数
1 1) QLabel::QLabel ( QWidget *parent, const char *name = 0, WFlags f = 0 )
构造一个名称为name、父对象为parent和标记符为f的TextLabel。
1 2) QLabel::QLabel ( const QString & text, QWidget *parent, const char *name = 0, WFlags f = 0 )
构造一个名称为name、父对象为parent、标记符为f和内容为text的TextLabel。
1 3) void QLabel::clear () [slot]
清除标签内容。
1 4) void QLabel::setText ( const QString & ) [virtual slot]
设置标签的文本。
1 5) QString QLabel::text () const
返回标签的文本。
382 TextBrowser控件
1控件位置 Display Widgets→TextBrowser 2控件介绍 TextBrowser控件(文本浏览器)的样式如图3-87所示,QTextBrowser继承自QTextEdit。TextBrowser是只读的,不允许对内容进行更改,但是相对于QTextEdit来讲,它还具有链接文本的作用。 图3-87 TextBrowser控件
3控件设置选项 在TextBrowser控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置显示框字体;
frameShape:边框样式,Qt Designer提供了多项选择; frameShadow:边框阴影,Qt Designer提供的选择有plain、raised、sunken; lineWidth:边框线宽; text:显示的文本; source:显示的文件名称,如果没有文件显示或来源,则显示空字符串。 4常用成员函数
1 1) QTextBrowser::QTextBrowser ( QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent的TextBrowser。
1 2) void QTextBrowser::backward () [virtual slot]
更改内置导航链接的文件清单为显示前一个文档文件,如果没有以前的文档,就什么都不做,可以实现向前翻页的功能。
1 3) void QTextBrowser::forward () [virtual slot]
更改内置导航链接的文件清单为显示下一个文档文件,如果没有以前的文档,就什么都不做,可以实现向后翻页的功能。
1 4) void QTextBrowser::home () [virtual slot]
更改显示的文件浏览器中的链接,显示第一个文件。
1 5) void QTextBrowser::linkClicked ( const QString & link ) [signal]
当单击链接时,发射该信号。
1 6) void QTextBrowser::reload () [virtual slot]
重新载入当前的设置源。
1 7) void QTextBrowser::setSource ( const QString & name ) [virtual slot]
设置当前显示的文件名称为name。
1 8) QString QTextBrowser::source () const
返回当前显示的文件的文件名称。
383 示例19:TextBrower的应用
QTextBrower继承于QTextEdit类,增加了导航功能,可以用TextBrower打开超链接。下面通过一个示例来学习用TextBrower打开超链接的方法。 首先创建标准的Qt Gui Application项目,把项目在主界面中自动生成的toolBar、menuBar和statusBar删除,界面设计结果如图3-88所示。 图3-88 示例19界面
1控件说明 在属性编辑窗口中对控件的属性进行修改,修改内容如表3-24所示。 表3-24 主要控件说明
2示例说明 程序执行后,会在Text Brower中添加三个超链接; 单击超链接,使用默认浏览器打开该超链接的网站。 3示例实现 在主窗体mainwindowcpp文件中自动生成如下代码:
1 #include &mainwindowh&
2 #include &ui_mainwindowh&
3 MainWindow::MainWindow(QWidget *parent) :
4 QMainWindow(parent),
5 ui(new Ui::MainWindow)
7 ui-&setupUi(this);
9 MainWindow::~MainWindow()
在主窗体mainwindowcpp文件中添加的头文件:
1 #include
在主窗体mainwindowcpp文件中构造函数(文中的粗体为需要添加的内容):
1 MainWindow::MainWindow(QWidget *parent) :
2 QMainWindow(parent),
3 ui(new Ui::MainWindow)
5 ui-&setupUi(this);
7 /*********打开tBwsShow的外部链接设置**************************/
8 ui-&tBwsShow-&setOpenLinks(true);
9 ui-&tBwsShow-&setOpenExternalLinks(true);
11 /*********添加链接***********************************************/
12 ui-&tBwsShow-&append(QString::fromLocal8Bit(&&a href=&http://wwwbaiducom&&baidu&));
13 ui-&tBwsShow-&append(QString::fromLocal8Bit(&&a href = &http://wwwsinacomcn/&&sina&));
14 ui-&tBwsShow-&append(QString::fromLocal8Bit(&&a href = &http://wwwqqcom/&&qq&));
主文件maincpp没有进行任何更改,使用项目自动生成的即可。
4示例执行结果 示例执行结果如图3-89所示。 图3-89 示例19执行结果
384 GraphicsView控件
1控件位置 Display Widgets→GraphicsView 2控件介绍
GraphicsView(绘图视图)是用于显示QGraphicsScene内容的控件。学习该控件就不得不了解GraphicsView框架,GraphicsView框架为2D绘图提供一个简单、容易使用、功能强大的解决方案。Graphics View框架由三个主要的类组成:QGraphicsItem、QGraphicsScene和QGraphicsView。其中QGraphicsItem定义图元;QGraphicsScene定义场景,包含所有需要绘制的图元,根据用户的操作改变图元的状态;QGraphicsView定义观察
场景的视窗,可以充当绘图的区域,成为独立的窗体被弹出,或者嵌入其他UI组件中形成复合UI组件。 3控件设置选项 在GraphicsView控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置显示框字体; frameShape:边框样式; frameShadow:边框阴影,Qt Creator提供的选择有plain、raised、sunken; lineWidth:边框线宽。 4常用成员函数
1 1) QGraphicsView::QGraphicsView ( QWidget *parent = 0 )
构造一个父对象为parent的GraphicsView。
1 2) QGraphicsView::QGraphicsView ( QGraphicsScene *scene, QWidget *parent = 0 )
构造一个父对象为parent的GraphicsView,填充场景scene到该GraphicsView。
1 3) void QGraphicsView::centerOn ( const QPointF & pos )
调整视窗的内容,确保点pos在视窗中居中。
1 4) void QGraphicsView::centerOn ( qreal x, qreal y )
这是一个重载函数,函数功能同函数3),相当于调用center(QPointF(x,y))。
1 5) void QGraphicsView::centerOn ( const QGraphicsItem *item )
这是一个重载函数,函数功能同函数3),调整视区的内容,使项目item为中心。
1 6) void QGraphicsView::ensureVisible ( const QRectF & rect, int xmargin = 50, int ymargin = 50 )
调整视窗的内容,使视窗rect中的内容是可见的。
1 7) void QGraphicsView::ensureVisible ( qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50 )
这是一个重载函数,函数功能同函数6),相当于调用ensureVisible(QRectF(x,y,w,h),xmargin,ymargin)。
1 8) void QGraphicsView::ensureVisible ( const QGraphicsItem *item, int xmargin = 50, int ymargin = 50 )
这是一个重载函数,函数功能同函数6),调整视窗的内容,使item的内容可见。
1 9) QGraphicsItem *QGraphicsView::itemAt ( const QPoint & pos ) const
返回pos处的item。
1 10) QGraphicsItem *QGraphicsView::itemAt ( int x, int y ) const
这是一个重载函数,函数功能同函数9),返回坐标(x,y)处的item。
1 11) QList&QGraphicsItem *& QGraphicsView::items () const
返回相关场景中所用的图元。
1 12) QList&QGraphicsItem *& QGraphicsView::items ( const QPoint & pos ) const
返回视图中位置pos处的项目列表。
1 13) QGraphicsScene *QGraphicsView::scene () const
返回当前可视化的场景;如果当前没有可视化的场景,则返回0。
1 14) void QGraphicsView::setScene ( QGraphicsScene *scene )
设置场景scene为当前可视化场景。
1 15) void QGraphicsView::updateScene ( const QList & rects ) [slot]
面更新场景。 《环境下Qt4图形界面与编程》本书以“图形界面编程控件与编程基础→简单易学的实例→实际工程项目开发与场景分析”为写作主线,以当前最新的Qt47为依据,采用“深入分析控件+实例解析”的方式,并配合经典的实际工程项目,对操作系统下的Qt47与编程技术进行了全面细致的讲解。本节为大家介绍示例20:GraphicsView的应用。 AD:
385 示例20:GraphicsView的应用(1)
本示例通过用GraphicsView显示图片文件,简单地介绍了Graphics View、Graphics Scene和QGraphicsItem之间的关系。 首先创建标准的Qt Gui Application项目,把项目在主界面中自动生成的toolBar、menuBar和statusBar删除,界面设计结果如图3-90所示。 图3-90 示例20界
1控件说明 在属性编辑窗口中对控件的属性进行修改,修改内容如表3-25所示。 表3-25 主要控件说明
2示例说明 界面布局设置好之后,添加资源文件,把图片文件1添加到资源文件中。添加资源文件的方法在示例3中已经详细介绍过了,这里就不再重复介绍。 程序执行后,自动加载图片1,不要把程序最大化,使边框出现滚动条,可以通过鼠标在一定空间内拖动图片1jpg; 单击菜单栏选择“Open”选项,可以打开其他图片; 单击菜单栏选择“Exit”选项,退出程序。 3示例实现 头文件mainwindowh(文中的粗体为需要添加的内容):
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 #include
4 #include
5 #include
6 namespace Ui {
7 class MainW
9 class MainWindow : public QMainWindow
11 Q_OBJECT
12 public:
13 explicit MainWindow(QWidget *parent = 0);
14 ~MainWindow();
15 QString pictureN//当前显示的图片
16 QGraphicsScene *//声明scene
17 QGraphicsPixmapItem *//声明item
18 private:
19 Ui::MainWindow *
20 private slots://声明槽函数
21 void slotOpen();
22 void slotExit();
24 #endif // MAINWINDOW_H
在主窗体mainwindowcpp文件中自动生成如下代码:
1 #include &mainwindowh&
2 #include &ui_mainwindowh&
3 MainWindow::MainWindow(QWidget *parent) :
4 QMainWindow(parent),
5 ui(new Ui::MainWindow)
7 ui-&setupUi(this);
9 MainWindow::~MainWindow()
385 示例20:GraphicsView的应用(2) 在主窗体mainwindowcpp文件中添加的头文件:
1 #include
在主窗体mainwindowcpp文件中构造函数:
1 MainWindow::MainWindow(QWidget *parent) :
2 QMainWindow(parent),
3 ui(new Ui::MainWindow)
5 ui-&setupUi(this);
7 /****************界面初始化********************************/
8 this-&pictureName = &:/1jpg&;
9 scene = new QGraphicsS
10 scene-&setSceneRect(-300,-300,600,600);
11 scene-&setItemIndexMethod(QGraphicsScene::NoIndex);
12 QPixmap pixmap(this-&pictureName);
13 pixmappixmap = pixmapscaledToWidth(200);
14 item = scene-&addPixmap(pixmap);
16 /***************设置view的场景*****************************/
17 ui-&view-&setScene(scene);
18 ui-&view-&setRenderHint(QPainter::Antialiasing);
19 ui-&view-&setCacheMode(QGraphicsView::CacheBackground);
20 ui-&view-&setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
21 ui-&view-&setDragMode(QGraphicsView::ScrollHandDrag);
22 ui-&view-&resize(400,300);
24 /***************信号和槽函数的映射**************************/
25 connect(ui-&actionOpen,SIGNAL(triggered()),this,SLOT(slotOpen()));
26 connect(ui-&actionExit,SIGNAL(triggered()),this,SLOT(slotExit()));
29 在主窗体mainwindowcpp文件中添加QAction actionOpen的槽函数:
31 /*****************定义槽函数,打开图片**************************/
32 void MainWindow::slotOpen()
34 this-&pictureName = QFileDialog::getOpenFileName(this);//打开文件对话框
35 if(!this-&pictureNameisEmpty())
37 QPixmap pixmap(this-&pictureName);
38 pixmappixmap = pixmapscaledToWidth(200);
39 item = scene-&addPixmap(pixmap);
40 ui-&view-&setScene(scene);//设置view的场景
在主窗体mainwindowcpp文件中添加QAction actionExit的槽函数:
1 /******************定义槽函数,退出程序**************************/
2 void MainWindow::slotExit()
4 this-&close();
4示例执行结果 示例执行结果如图3-91所示。 图3-91 示例20执行结果
386 Calendar控件
Display Widgets→Calendar 2控件介绍 Calendar控件(日历)的样式如图3-92所示。顾名思义,这是一个和日历有关的控件,使用起来很简单,也很方便。 图3-92 Calendar控件3控件设置选项
在Calendar控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置text的字体; selectedDate:当前日期; minimumDate:该日历控件能够显示的最小日期; maxmumDate:该日历控件能够显示的最大日期; firstDayOfWeek:每星期的第一天;
gridVisible:是否显示网格; dateEditEnable:是否允许编辑日历。 4常用成员函数
1 1) QCalendarWidget::QCalendarWidget ( QWidget *parent = 0 )
构造一个父对象为parent的Calendar。
1 2) int QCalendarWidget::monthShown () const
返回当前显示的月份。
1 3) void QCalendarWidget::setCurrentPage ( int year, int month ) [slot]
显示给定的年份和月份。
1 4) void QCalendarWidget::setDateRange ( const QDate & min, const QDate & max ) [slot]
设置该Calendar的显示范围,最小日期为min,最大为max。
1 5) void QCalendarWidget::showSelectedDate () [slot]
显示当前选中的日期。
1 6) void QCalendarWidget::showToday () [slot]
显示系统当前日期。
1 7) int QCalendarWidget::yearShown () const
返回当前显示的年份。
387 示例21:Calendar的应用
首先创建标准的Qt Gui Application项目,把项目在主界面中自动生成的menuBar、toolBar和statusBar删除,界面设计结果如图3-93所示。 图3-93 示例21界面
1控件说明 在属性编辑窗口中对控件的属性进行修改,修改内容如表3-26所示。 图3-94 信号与槽的映射
2示例说明 在Signals & Slots Editor中添加槽函数如图3-94所示;
程序执行后,只显示dateEdit和pushButton两个控件;
单击按钮“Edit Date”,显示calendarWidget控件,可以通过calendarWidget控件来编辑dateEdit的日期。在calendarWidget控件上选定日期并单击之后,dateEdit的日期随之改变。同时calendarWidget控件隐藏。 表3-26 主要控件说明
3示例实现 头文件mainwindowh(文中的粗体为需要添加的内容):
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 #include
4 namespace Ui {
5 class MainW
7 class MainWindow : public QMainWindow
9 Q_OBJECT
10 public:
11 explicit MainWindow(QWidget *parent = 0);
12 ~MainWindow();
13 private:
14 Ui::MainWindow *
15 private slots: //声明槽函数
16 void on_calendarWidget_clicked(QDate date);
18 #endif // MAINWINDOW_H
声明一个槽函数on_calendarWidget_clicked(QDate date),这个槽函数是通过右击calendarWidget→Go to slot自动生成的,对应calendarWidget的clicked(QDate date)信号。 在主窗体mainwindowcpp文件中自动生成如下代码:
1 #include &mainwindowh&
2 #include &ui_mainwindowh&
3 MainWindow::MainWindow(QWidget *parent) :
4 QMainWindow(parent),
5 ui(new Ui::MainWindow)
7 ui-&setupUi(this);
9 MainWindow::~MainWindow()
在主窗体mainwindowcpp文件中构造函数:
1 MainWindow::MainWindow(QWidget *parent) :
2 QMainWindow(parent),
3 ui(new Ui::MainWindow)
5 ui-&setupUi(this);
7 /****************隐藏日历控件*********************/
8 ui-&calendarWidget-&hide();
在主窗体mainwindowcpp文件中添加QCalendarWidget calendarWidget的槽函数:
1 /********************定义槽函数,编辑日期******************/
2 void MainWindow::on_calendarWidget_clicked(QDate date)
4 ui-&dateEdit-&setDate(ui-&calendarWidget-&selectedDate());
5 ui-&calendarWidget-&hide();
主文件maincpp没有进行任何更改,使用项目自动生成的即可。 4示例执行结果 示例执行结果如图3-95所示。
图3-95 示例21执行结果
388 LCDNumber控件
1控件位置 Display Widgets→LCDNumber 2控件介绍 图3-96 LCDNumber控件
LCDNumber控件(LCD数字显示框)的样式如图3-96所示,可以显示十六进制、十进制、八进制或二进制数。 3控件设置选项
在LCDNumber控件的properties选项中,一般常对以下选项进行设置。
name:该控件对应源代码中的名称; font:设置显示框字体; frameShape:边框样式,Qt Designer提供了多项选择。 frameShadow:边框阴影,Qt Designer提供的选择有plain、raised、sunken。 lineWidth:边框线宽; mode:设置显示格式,Qt提供的格式有十六进制、十进制、八进制、二进制。 value:该LCDNumber的值。 intValue:该LCDNumber的整数值; numDis:显示框最大可以显示的数字位数。 4常用成员函数
1 1) QLCDNumber::QLCDNumber ( QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent的LCD Number。
1 2) QLCDNumber::QLCDNumber ( uint numDis, QWidget *parent = 0, const char *name = 0 )
构造一个名称为name、父对象为parent和显示框最大可以显示的数字位数为numDigits的LCDNumber。如下构造了一个最多能显示4位数的LCD显示器:
1 QLCDNumber *lcd= new QLCDNumber (4,this);
2 3) void QLCDNumber::display ( int num ) [slot]
设置显示的值为num。
1 4) void QLCDNumber::display ( const QString & s ) [slot]
这是一个重载函数,函数功能同函数4),显示s。
1 5) void QLCDNumber::display ( double num ) [slot]
这是一个重载函数,函数功能同函数5),显示num。
1 6) int QLCDNumber::intValue () const
返回显示值的整数值,对应intValue属性。
1 7) int QLCDNumber::numDigits () const
返回显示框最大可以显示的数字位数,对应numDigits属性。
1 8) double QLCDNumber::value () const
返回该LCDNumber显示的值。
389 示例22:LCDNumber的应用
首先创建标准的Qt Gui Application项目,把项目在主界面中自动生成的menuBar、toolBar和statusBar删除,界面设计结果如图3-97所示。
图3-97 示例22界面
1控件说明 在属性编辑窗口中对控件的属性进行修改,修改内容如表3-27所示。 表3-27 主要控件说明
2示例说明 在Signals & Slots Editor中添加槽函数如图3-98所示;
图3-98 信号和槽的映射
程序执行后,改变horizontalSlider的值,lcdNumber和spinBox的值随着改变; 改变spinBox的值,lcdNumber和horizontalSlider的值随着改变。 3示例实现 本示例不需要添加任何代码,只需新建一个Qt Gui Application项目,把项目在主界面中自动生成的menuBar、toolBar和statusBar删除,按照以上步骤添加完成即可。 4示例执行结果 示例执行结果如图3-99所示。 图3-99 示例22执行结果
3810 ProgressBar控件
1控件位置 Display Widgets→ProgressBar 2控件介绍 ProgressBar控件(进度条)的样式如图3-100所示,显示为一个水平进度条。一个进度条是用来给用户显示操作进度的,证明他们的应用程序仍在运行,进度条控件非常常见,例如我们下载资源时经常会显示进度条来显示下载进度。 图3-100 ProgressBar控件面
3控件设置选项 在ProgressBar控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置显示框字体; frameShape:边框样式,Qt Designer提供了多项选择;
frameShadow:边框阴影,Qt Designer提供的选择有plain、raised、sunken。
lineWidth:边框线宽; progress:进度条当前的进度值。 4常用成员函数
1 1) QProgressBar::QProgressBar ( QWidget *parent = 0, const char *name = 0, WFlags f = 0 )
构造一个名称为name、父对象为parent的ProgressBar。
1 2) QProgressBar::QProgressBar ( int totalSteps, QWidget *parent = 0, const char *name = 0, WFlags f = 0 )
构造一个名称为name、父对象为parent和总的进度值为totalSteps的ProgressBar。如下构造了一个进度值为100的进度条:
1 QProgressBar *pgb= new QProgressBar (100,this);
2 3) int QProgressBar::progress () const
返回该进度条的当前进度值。
1 4) void QProgressBar::setProgress ( int progress ) [virtual slot]
设置该进度条的当前进度值为progress。
1 5) void QProgressBar::reset () [slot]
把进度条恢复到初始状态。
3811 示例23:ProgressBar的应用(1)
首先创建标准的Qt Gui Application项目,把项目在主界面中自动生成的menuBar、toolBar和statusBar删除,界面设计结果如图3-101所示。 图3-101 示例23界面
1控件说明 在属性编辑窗口中对控件的属性进行修改,修改内容如表3-28所示。 2示例说明 单击按钮“ProgressBar”,progressBar的值在10秒内从0变为10; 单击按钮“ProgressDialog”,弹出一个有进度条的窗口,进度条在10秒内从0变为10。如图3-102所示,单击按钮“Cancel”,强制结束窗口。
图3-102 ProgressDialog
表3-28 主要控件说明
3示例实现 头文件mainwindowh(文中的粗体为需要添加的内容):
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 #include
4 namespace Ui {
5 class MainW
7 class MainWindow : public QMainWindow
9 Q_OBJECT
10 public:
11 explicit MainWindow(QWidget *parent = 0);
12 ~MainWindow();
13//文件数目
14 private:
15 Ui::MainWindow *
16 private slots://声明槽函数
17 void on_btnProgressDialog_clicked();
18 void on_btnProgressBar_clicked();
20 #endif // MAINWINDOW_H
声明一个变量num和两个槽函数。num是控件progressBar当前的值,两个槽函数分别对应两个按钮的clicked()信号。这两个槽函数都是通过右击控件→Go to slot生成的,所以不用在实现函数中写信号与槽的映射代码。 在主窗体mainwindowcpp文件中自动生成如下代码:
1 #include &mainwindowh&
2 #include &ui_mainwindowh&
3 MainWindow::MainWindow(QWidget *parent) :
4 QMainWindow(parent),
5 ui(new Ui::MainWindow)
7 ui-&setupUi(this);
9 MainWindow::~MainWindow()
3811 示例23:ProgressBar的应用(2) 在主窗体mainwindowcpp文件中添加的头文件:
1 #include
2 #include
在主窗体mainwindowcpp文件中构造函数:
1 /构造函数/
2 MainWindow::MainWindow(QWidget parent) :
3 QMainWindow(parent),
4 ui(new Ui::MainWindow)
6 ui-&setupUi(this);
7 num=10;//初始化
在主窗体mainwindowcpp文件中添加QPushButton btnProgressBar的槽函数:
1 /槽函数:进度条*/
2 void MainWindow::on_btnProgressBar_clicked()
4 ui-&progressBar-&setRange(0,num);//设置progressBar的取值范围
5 for(int i=1;i&=i++)
7 ui-&progressBar-&setValue(i);//给进度条赋值
8 sleep(1);
在主窗体mainwindowcpp文件中添加QPushButton btnProgressBarDialog的槽函数:
1 /槽函数:进度条对话框/
2 void MainWindow::on_btnProgressDialog_clicked()
4 QProgressDialog *progressDialog = new QProgressDialog(this);
5 QFont font(&ZYSong18030&,12); //定义字体
6 progressDialog-&setFont(font);//设置字体
7 progressDialog-&setWindowModality(QT::WindowModal);
8 progressDialog-&setMinimumDuration(5);
9 progressDialog-&setWindowTitle(&Please Waiting&);
12 progressDialog-&setLabelText(tr(&Copying&));
13 progressDialog-&setCancelButtonText(tr(&Cancel&));
14 progressDialog-&setRange(0,num);//设置进度对话框的进度条的取值范围
15 for(int i=1;i&=i++)
17 progressDialog-&setValue(i);//对进度对话框的进度条赋值
18 qApp-&processEvents();
19 sleep(1);
20 if(progressDialog-&wasCanceled())
主文件maincpp没有进行任何更改,使用项目自动生成的即可。 4示例执行结果 示例执行结果如图3-103和图3-104所示。 图3-103 单击按钮“ProgressBar”的结果
图3-104 单击按钮“ProgressDialog”的结果
3812 Line控件
1控件位置 Display Widgets→Horizontal/Vertical Line 2控件介绍 Line控件(线条)的样式如图3-105所示,它是用来装饰界面的控件,在界面中适当添加Line控件可以使界面更加美观、清晰。 图3-105 Line控件
3控件设置选项 在Line控件的properties选项中,一般常对以下选项进行设置。
name:该控件对应源代码中的名称;
frameShadow:线条阴影,Qt Designer提供的选择有plain、raised、sunken; lineWidth:线条线宽; orientation:线条布局方向。 Line控件就是一个装饰控件,使用简便,在此不再进行详细介绍。
作者:siddim |
时间:May 3, 2017 |
34 单元视图(Item Views)
Creator有4种Item Views,如图3-31所示。 View Widgets的类和名称介绍如表3-7所示。 图3-31 Item Views控件
表3-7 Item Views介绍
本节主要介绍Qt Creator中View Widgets的使用方法,视图控件可以用来很好地显示项目,在这方面它和列表框相同,只不过它的功能更加强大。下面就来具体介绍各种视图组件的用法。
341 ListView控件
1控件位置 Item Views→ListView 2控件介绍 ListView控件(列表视图)继承于QAbstractItemView。ListView是基于模型的列表/图标视图,为Qt的模型/视图结构提供了更灵活的方式,它是Qt模型/视图框架的一部分。可以看出Qt Creator的ListView和Qt Designer的ListView有很大差别。 3控件设置选项 在ListView控件的properties选项中,一般常对以下选项进行设置。 name:该控件对应源代码中的名称; font:设置视图内字体; batchSize:如果将layoutMode设置为Batched,则这个属性保存批量处理的规格; layoutMode:项目的布局模式; modeColumn:模型中可见的列,默认情况下,值为0,表明模型中的第一列可见; viewMode:保存该ListView的视图模型。 4常用成员函数
1 1) QListView::QListView ( QWidget *parent = 0)
构造一个父对象为parent的ListView。
1 2) void QListView::currentChanged ( const QModelIndex & current, const QModelIndex & previous ) [virtual protected]
把current定为当前项目,previous是以前的当前项目。
1 3) void QListView::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [virtual protected]
更改模型中项目topLeft到bottomRight。
1 4) QModelIndex QListView::indexAt ( const QPoint & p ) const [virtual]
返回坐标点p处项目的模型索引。
1 5) void QListView::rowsInserted ( const QModelIndex & parent, int start, int end ) [virtual protected]
插入新行,新行的父母是parent,从start到end的所有项目。
1 6) QModelIndexList QListView::selectedIndexes () const [virtual protected]
(从左到右依次是:ListView、TextEdit)返回所有选中和非隐藏的项目的模型索引。
342 示例5:ListView的应用
Qt提供了model/view结构来管理与展示数据,model提供数据模型,view展示数据,delegate对数据项进行渲染。model、view和delegate通过信号/槽机制通信。下面通过这个示例来学习ListView的用法。 首先建立标准的Qt Gui Application项目,把项目自动生成的toolBar、menuBar和statusBar删除,设计如图

我要回帖

更多关于 malloc.h是什么头文件 的文章

 

随机推荐