【C/C++学院】(18)QT文件读写/主窗口类/获取host信息

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);
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值