1.文件读写
QT提供了QFile类用于文件读写。
QFile可以读写文本文件,也可以读写二进制文件
#include <QFile>
#include <QTextStream>
读文本文件例子
QString s;
QFile file("abc.txt);
if (file.open(QFile::ReadOnly))
{
QTextStream stream(&file);
while (!stream.atEnd())
{
s = stream.readLine();
QMessageBox::information(this, "文件内容", s);
}
file.close();
}
void Widget::on_clicked()
{
QString filename = QFileDialog::getOpenFileName();
QFile file(filename);
QString s;
if (file.open(QFile::ReadOnly))
{
QTextStream stream(&file);
s = stream.readAll();
QMessageBox::information(this, "文件内容", s);
file.close();
}
}
写文本文件例子。
windows: 换行"\r\n"
linux:换行"\n"
void Widget::on_clicked()
{
QFile file("abc.txt");
if (file.open(QFile::WriteOnly | QFile::Truncate))
{
QTextStream out (&file);
out << tr("hello, world\n");
out << tr("new line \r\n");
out << tr("abcde\r\n");
}
}
2.主窗口类
QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu
bar)、及一个中心部件(central widget), 是许多应用程序的基础,如文本编辑器。
QMainWindow中菜单需要QMenu类和QAction类来实现。
QAction类定义了菜单的具体行为。
QMainWindow中提供了menuBar()函数返回一个menuBar。
通过调用menuBar的addMenu函数就可以生成一个新的菜单项。
QMenu类addAction函数为菜单指定一个QAction。
QMainWindow中提供了自己的布局控件,所以不需要再为QMainWindow定义布局控件。
新建Qt应用,基类选择“QMainWindow”,取消“创建界面”复选框的选中状态。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QAction>
#include <QTextEdit>
#include <QMenuBar>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void openfile();
void exitfile();
private:
QAction *open, *exit;
QMenu *menu;
QTextEdit *edit1;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
open = new QAction(tr("打开"), this);//建立一个Action
open->setShortcut(tr("Ctrl + o"));//设置快捷方式
exit = new QAction(tr("退出"), this);
exit->setShortcut(tr("ctrl + e"));
QMenuBar * menubar = menuBar();//调用MainWindow的menuBar方法,得到一个menubar
menu = menubar->addMenu(tr("文件"));//加入一个新的菜单项
menu->addAction(open);//建立一个Action
menu->addAction(exit);
edit1 = new QTextEdit;
setCentralWidget(edit1);
connect(open, SIGNAL(triggered()),this, SLOT(openfile()));
connect(exit, SIGNAL(triggered()), this, SLOT(exitfile()));
}
MainWindow::~MainWindow()
{
}
void MainWindow::openfile()
{
QFileDialog::getOpenFileName();
}
void MainWindow::exitfile()
{
close();
}
3.获取host信息
QT如果要进行网络编程首先需要在.pro文件中添加如下代码:
QT += network
在头文件中包含相关头文件:
#include <QHostInfo>
#include <QNetworkInterface>
QHostInfo类用户获得主机信息。
QNetworkInterface类获得与网络接口相关的信息。
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QHostInfo>
#include <QNetworkInterface>
#include <QPushButton>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_click();
private:
QPushButton *btn1;
};
#endif // WIDGET_H
#include "widget.h"
#include <QMessageBox>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
btn1 = new QPushButton;
btn1->setText("获取host信息");
QHBoxLayout *layout1 = new QHBoxLayout(this);
layout1->addWidget(btn1);
connect(btn1, SIGNAL(clicked()), this, SLOT(on_click()));
}
Widget::~Widget()
{
}
void Widget::on_click()
{
QString s = QHostInfo::localHostName();
QMessageBox::information(this, "标题", s);
}
void Widget::on_click()
{
QString s = QHostInfo::localHostName();
QHostInfo info = QHostInfo::fromName(s);
QList<QHostAddress> list = info.addresses();//得到主机所有的网络地址
if (!list.isEmpty())
{
QList<QHostAddress>::iterator i;//设置一个迭代器
for (i=list.begin(); i!=list.end(); i++)//遍历list
{
QMessageBox::information(this, tr("提示"), (*i).toString());
}
}
}
void Widget::on_click()
{
QString detail = "";
QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();//得到本机所有的网络接口
QList<QNetworkInterface>::iterator i;//声明一个迭代器
for (i=list.begin(); i!=list.end(); i++)
{
QNetworkInterface interface = *i;//声明一个QNetworkInterface等于迭代器的值
detail = tr("设备")+interface.name()+"\n";//得到设备名称
detail = detail+tr("硬件地址:")+interface.hardwareAddress()+"\n";//得到设备地址
QList<QNetworkAddressEntry> entryList = interface.addressEntries();
QList<QNetworkAddressEntry>::iterator j;
for(j=entryList.begin(); j!=entryList.end(); j++)
{
QNetworkAddressEntry entry = *j;
detail = detail+"\t"+tr("ip 地址:")+entry.ip().toString()+"\n";
detail = detail+"\t"+tr("子网掩码:")+entry.netmask().toString()+"\n";
detail = detail+"\t"+tr("广播地址:")+entry.broadcast().toString()+"\n";
}
QMessageBox::information(this, tr("Detail"), detail);
}
}