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





目录
相关文章
|
23天前
|
计算机视觉 数据格式
使用opencv在Qt控件上播放mp4文件
使用opencv在Qt控件上播放mp4文件
28 2
|
1月前
|
安全 前端开发 C++
C++视角下的Qt按钮:从基础应用到高级定制(二)
C++视角下的Qt按钮:从基础应用到高级定制
45 2
|
1月前
|
XML JSON 算法
C++视角下的Qt按钮:从基础应用到高级定制(一)
C++视角下的Qt按钮:从基础应用到高级定制
90 2
|
1月前
|
监控 前端开发 JavaScript
Qt Quick调试之道:跟踪、输出与打印信息的全面攻略
Qt Quick调试之道:跟踪、输出与打印信息的全面攻略
60 0
|
1月前
|
XML 安全 C++
DBus类型系统以及在Qt和C++ 中的使用(二)
DBus类型系统以及在Qt和C++ 中的使用
44 0
|
1月前
|
XML 存储 Unix
DBus类型系统以及在Qt和C++ 中的使用(一)
DBus类型系统以及在Qt和C++ 中的使用
41 0
|
29天前
|
编译器 API 数据安全/隐私保护
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
99 3
|
17天前
|
存储 C++ iOS开发
C++文件操作(文本文件的读写+二进制文件的读写)
C++文件操作(文本文件的读写+二进制文件的读写)
|
24天前
qt开发使用camera类获取摄像头信息并拍照保存
qt开发使用camera类获取摄像头信息并拍照保存
|
29天前
|
测试技术 API UED
【Qt 应用开发 】初步理解 Qt窗口中的模态性应用
【Qt 应用开发 】初步理解 Qt窗口中的模态性应用
70 1

热门文章

最新文章

推荐镜像

更多