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