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

简介: <h1><span style="font-family:'Microsoft YaHei UI','Microsoft YaHei',SimSun,'Segoe UI',Tahoma,Helvetica,sans-serif,'Microsoft YaHei',Georgia,Helvetica,Arial,sans-serif,宋体,PMingLiU,serif; font-size:

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





目录
相关文章
|
2月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
25 0
Linux c/c++文件的基本操作
|
3月前
|
C++ 内存技术
[转]Visual C++内嵌swf文件并播放
[转]Visual C++内嵌swf文件并播放
|
2月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
65 0
|
2月前
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
93 0
|
3月前
|
Linux API C++
超级好用的C++实用库之文件目录操作
超级好用的C++实用库之文件目录操作
48 0
|
3月前
|
JavaScript 前端开发 测试技术
一个google Test文件C++语言案例
这篇文章我们来介绍一下真正的C++语言如何用GTest来实现单元测试。
25 0
|
4月前
QT 软件打包为一个单独可执行.exe文件流程
QT 软件打包为一个单独可执行.exe文件流程
948 0
|
5月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
201 1
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
118 0
|
3月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。