写代码遇到Qt相关问题

2023-10-26

目录

qt clicked()函数 传递数据

QT读取文件个数:

QT读txt数据并求出行数和列数:

qt读写json:

我的json文件:

读写函数:

换行和不换行的区别就是参数Indented和Compact的区别。

把json写到文件中:

QT信号槽传递不支持的数据该怎么办?

QT信号槽函数的绑定connect函数:

QCheckBox控件的操作:

绑定QCheckBox的信号与槽函数:

QCheckBox设置默认值:



qt clicked()函数 传递数据

当qt按下btn这么能传递数据?

正常情况下当按键按下,qt绑定槽函数是执行槽函数的,但是如果我想按下btn按键槽函数能接收到数据。

看别人的帖子说可以用匿名函数lamda表达式实现。我试了试,还真的可以。所以记录一下。

直接上代码:

重点是connect函数:

connect(ui.btnPictureSavePath, &QPushButton::clicked, _configFileData.get(), [=] () {_configFileData.get()->ChoosePath(cn); });

解释:第一个参数是按键的指针,第二个参数是空间的信号函数,第三个参数是槽指针第四个参数是lamda表达式,也是最关键的一点。需要重点注意一下。

[=] () {_configFileData.get()->ChoosePath(cn); }

_configFileData.get()这个用get函数是因为_configFileData这个指针我用得是智能指针,使用get获取原始指针而已。

这个绑定函数不能用&_configFileData.get()->ChoosePath(cn)这样的,这样是会报错的。

QT读取文件个数:

    std::shared_ptr<QDir> dir = std::make_shared<QDir>(path);
    QStringList filter;
    QFileInfoList fileInfoList = dir->entryInfoList(filter);
    int peopleNum = fileInfoList.count() - 2;

需要添加头文件 #include <QDir>

path是QString存储的路径,当然不一定是QString才可以string也是可以的,只要是字符串都可以。

int peopleNum = fileInfoList.count() - 2;为什么要减二,是因为每个文件夹下会有两个默认的文件夹,一个是“.”一个是“..”,意思分别是当前文件夹和上一级文件夹,所有要减2.

fileInfoList这里面存的就是文件夹的名字,第一个和第二个存储的分别是"."和".."。从第三个开始才是文件下有的文件。 

QT读txt数据并求出行数和列数:

这个txt存储的是一个矩阵数据,大概长这样的

这么才能快速的读取这个矩阵的行数和列数?

 代码:

    int row = -1;
    int line = -1;
    QFile file(path + "/s1_1.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qDebug() << "Can't open the file!" << endl;
    }
    QByteArray byte = file.readLine();
    QString str(byte);
    QStringList strList = str.split(" ");
    strList.removeAll("");
    line = strList.size();
    row = file.size() / file.readLine().size();

  QFile file(path + "/s1_1.txt");这行代码就是打开txt文件。

QByteArray byte = file.readLine();这行代码是读取txt一行的数据,注意这个数据并不是我们看到的txt中那样的,这个你可以理解为char数据,是一个字符一个字符的。所以这个数据类型的长度要远远的大于txt中的double数据。

QString str(byte);这句话是吧二进制转换成字符串形式的。

QStringList strList = str.split(" ");这句话是吧字符串以空格分隔,中间是有一个空格的。

strList.removeAll("");这句话是删除多余的空格,因为我这个txt是以tab 分隔的,所以用空格分隔完还有好多空格,所以才有删除所用空格这一句话,如果以单控格分隔就不需要这句话了。 

line = strList.size();这句话就是求出一行有多少个double数据,也就是矩阵的列。

行数的求解其实非常的简单,就是读取TXT文件的所有二进制没然后除以一行的二进制数就行了。 

 row = file.size() / file.readLine().size();也就是这一句话。

qt读写json:

我的json文件:

{
    "Data": {
        "EEGChannel": 32,
        "Frequency": 128,
        "FrequencyTime": 60,
        "PointNum": 7681,
        "path": "F:/code/data/EEG",
        "peopleNum": 32,
        "testNum": 40
    },
    "GUI": {
        "IsOpenTimer": false,
        "TimerPrecision": "",
        "style": -1
    },
    "SQL": {
        "IsOpenSQL": false
    },
    "Text": {
        "path": ""
    },
    "cudaConfig": {
        "IsOpen": false
    },
    "log": {
        "KeepTheDate": -1
    },
    "picture": {
        "IsSavePicture": false,
        "path": ""
    },
    "wavelet": {
        "depth": -1
    }
}

读写函数:

void ConfigFileData::RWConfigFile(bool b)
{
	std::shared_ptr<FileOperation> _fileOperation = std::make_shared<FileOperation>();
	if (b)// true 读配置文件,false写配置文件
	{		
		QString strConfig = _fileOperation->readJSON(_configFilePath);
		QJsonParseError parseJsonErr;
		QJsonDocument document = QJsonDocument::fromJson(strConfig.toUtf8(),&parseJsonErr);
		if (!(parseJsonErr.error == QJsonParseError::NoError))
		{
			QMessageBox::about(NULL,"提示","配置文件错误!");
			return;
		}
		QJsonObject jsonObject = document.object();
		/****GUI******/
		QJsonValue jsonGUIValue = jsonObject.value(QStringLiteral("GUI"));
		QJsonObject jsonGUIData = jsonGUIValue.toObject();
		_initialized->SetGUIStyle(jsonGUIData["style"].toInt());
		_initialized->SetGUIIsOpenTimer(jsonGUIData["IsOpenTimer"].toBool());
		_initialized->SetGUITimerPrecision(jsonGUIData["TimerPrecision"].toString());
		/******CUDA****/
		QJsonValue jsonCUDAConfigValue = jsonObject.value(QStringLiteral("cudaConfig"));
		QJsonObject jsonCUDAConfigData = jsonCUDAConfigValue.toObject();
		_initialized->SetCudaConfigIsOpen(jsonCUDAConfigData["IsOpen"].toBool());
		/********Picture***/
		QJsonValue jsonPictureValue = jsonObject.value(QStringLiteral("picture"));
		QJsonObject jsonPictureData = jsonPictureValue.toObject();
		_initialized->SetPictureIsSavePicture(jsonPictureData["IsSavePicture"].toBool());
		_initialized->SetPicturePath(jsonPictureData["path"].toString());
		/*******Wavelet**********/
		QJsonValue jsonWaveletValue = jsonObject.value(QStringLiteral("wavelet"));
		QJsonObject jsonWaveletData = jsonWaveletValue.toObject();
		_initialized->SetWaveletDepth(jsonWaveletData["depth"].toInt());
		/****Text****/
		QJsonValue jsonTextValue = jsonObject.value(QStringLiteral("Text"));
		QJsonObject jsonTextData = jsonTextValue.toObject();
		_initialized->SetTextPath(jsonTextData["path"].toString());
		/*****Log*********/
		QJsonValue jsonLogValue = jsonObject.value(QStringLiteral("log"));
		QJsonObject jsonLogData = jsonLogValue.toObject();
		_initialized->SetLogKeepTheDate(jsonLogData["KeepTheDate"].toInt());
		_initialized->SetLogPath(jsonLogData["Path"].toString());
		/****SQL*********/
		QJsonValue jsonSQLValue = jsonObject.value(QStringLiteral("SQL"));
		QJsonObject jsonSQLData = jsonSQLValue.toObject();
		_initialized->SetSQLIsOpenSQL(jsonSQLData["IsOpenSQL"].toBool());
		/****data*************/
		QJsonValue jsonDataValue = jsonObject.value("Data");
		QJsonObject jsonDataData = jsonDataValue.toObject();
		_initialized->SetDataPath(jsonDataData["path"].toString());
		_initialized->SetDataPeopleNum(jsonDataData["peopleNum"].toInt());
		_initialized->SetDataTestNum(jsonDataData["testNum"].toInt());
		_initialized->SetDataEEGChannel(jsonDataData["EEGChannel"].toInt());
		_initialized->SetDataPointNum(jsonDataData["PointNum"].toInt());
		_initialized->SetDataFrequency(jsonDataData["Frequency"].toInt());
		_initialized->SetDataFrequencyTime(jsonDataData["FrequencyTime"].toInt());
	}
	else
	{
		QJsonObject jsonInitialized;
		/*****GUI****/
		QJsonObject guiJson;		
		guiJson.insert("style",_initialized->GetGUIStyle());
		guiJson.insert("IsOpenTimer",_initialized->GetGUIIsOpenTimer());
		guiJson.insert("TimerPrecision",_initialized->GetGUITimerPrecision());
		jsonInitialized.insert("GUI",guiJson);
		/****CUDA*******/
		QJsonObject cudaConfigJson;
		cudaConfigJson.insert("IsOpen",_initialized->GetCudaConfigIsOpen());
		jsonInitialized.insert("cudaConfig",cudaConfigJson);
		/****Picture**********/
		QJsonObject pictureJson;
		pictureJson.insert("IsSavePicture",_initialized->GetPictureIsSavePicture());
		pictureJson.insert("path",_initialized->GetPicturePath());
		jsonInitialized.insert("picture", pictureJson);
		/*****Wavelet************/
		QJsonObject waveletJson;
		waveletJson.insert("depth",_initialized->GetWaveletDepth());
		jsonInitialized.insert("wavelet",waveletJson);
		/*****Text*******/
		QJsonObject textJson;
		textJson.insert("path",_initialized->GetTextePath());
		jsonInitialized.insert("Text",textJson);
		/*****Log**********/
		QJsonObject logJson;
		logJson.insert("KeepTheDate",_initialized->GetLogKeepTheDate());
		jsonInitialized.insert("log",logJson);
		/*****SQL************/
		QJsonObject SQLJson;
		SQLJson.insert("IsOpenSQL",_initialized->GetSQLIsOpenSQL());
		jsonInitialized.insert("SQL",SQLJson);
		/*****data**********/
		QJsonObject DataJson;
		DataJson.insert("path",_initialized->GetDataPath());
		DataJson.insert("peopleNum",_initialized->GetDataPeopleNum());
		DataJson.insert("testNum",_initialized->GetDataTestNum());
		DataJson.insert("EEGChannel",_initialized->GetDataEEGChannel());
		DataJson.insert("PointNum",_initialized->GetDataPointNum());
		DataJson.insert("Frequency",_initialized->GetDataFrequency());
		DataJson.insert("FrequencyTime",_initialized->GetDataFrequencyTime());
		jsonInitialized.insert("Data",DataJson);
		/*****JSON************/
		QJsonDocument document(jsonInitialized);
		QByteArray byteArray = document.toJson(QJsonDocument::Indented);
		QString strJson(byteArray);
		_fileOperation->write_string_to_file_append(GetConfigFilePath().toStdString(), strJson.toStdString(), std::ios::ate | std::ios::out);
	}
}

QByteArray byteArray = document.toJson(QJsonDocument::Indented);

换行和不换行的区别就是参数Indented和Compact的区别。

把json写到文件中:

bool FileOperation::write_string_to_file_append(const std::string& file_string, const std::string str, int model)
{
	std::ofstream OsWrite(file_string, model);
	OsWrite << str;
	OsWrite << std::endl;
	OsWrite.close();
	return 0;
}

QT信号槽传递不支持的数据该怎么办?

例如信号槽不能传递QVector<int>数据看,只需要在main韩数注册一下:

需要添加头文件 #include <QMetaType>

qRegisterMetaType<QVector<int>>("QVector<int>");

QT信号槽函数子线程传递信号槽函数:

QT里面线程之间传递参数会有一定的特殊性。因此必须加入第五个参数指定,才能够成功的让新线程传递信号给GUI线程。

在connect中第五个参数 添加 Qt::DirectConnection

connect用于连接qt的信号和槽,在qt编程过程中不可或缺。它其实有第五个参数,只是一般使用默认值,在满足某些特殊需求的时候可能需要手动设置。

Qt::AutoConnection:

        默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。
Qt::DirectConnection:

        槽函数会在信号发送的时候直接被调用,槽函数运行于信号发送者所在线程。效果看上去就像是直接在信号发送位置调用了槽函数。这个在多线程环境下比较危险,可能会造成奔溃。

Qt::QueuedConnection:

        槽函数在控制回到接收者所在线程的事件循环时被调用,槽函数运行于信号接收者所在线程。发送信号之后,槽函数不会立刻被调用,等到接收者的当前函数执行完,进入事件循环之后,槽函数才会被调用。多线程环境下一般用这个。
Qt::BlockingQueuedConnection:

        槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。
Qt::UniqueConnection:

        这个flag可以通过按位或(|)与以上四个结合在一起使用。当这个flag设置时,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接。

QT信号槽函数的绑定connect函数:

今天遇到一个坑,一个关于信号槽函数绑定的问题。

UI的一个空间QComboBox,我想使用其中的一个信号函数activated来发送数据,然后再自己类写个接受函数。当我按照Qt5推荐的方式写,发现不对后来看了看书说绑定函数使用函数指针的形式信号函数,如果是不同参数同名的函数是不能用函数指针形式的。

所以只能使用老式的绑定函数。demo:

connect(ui.WaveletDepth,SIGNAL(activated(int)), _configFileData.get(), SLOT(SetWaveletDepth(int)));

这个绑定函数,第一个参数是函数指针,第二个参数是一个宏定义,里面是函数名,不需要指定那个类,因为第一个参数已经指定了。第三个参数是接收者的指针,第四个参数也是一个宏定义,里面是一个函数,也不需要指定类。

新式绑定函数:

connect(ui.btnPictureSavePath, &QPushButton::clicked, _configFileData.get(), [=] () {_configFileData.get()->ChoosePath(cn); });

QCheckBox控件的操作:

绑定QCheckBox的信号与槽函数:

    cn = CUDAcheckBox;
    connect(ui.IsOpenCUDAcheckBox, &QCheckBox::clicked, _configFileData.get(), [=]() {_configFileData->SetUIValue(ui.IsOpenCUDAcheckBox->isChecked(), cn); });

因为空间的clicked函数只有一个函数,所有可以使用函数指针操作。

clicked函数可以读取空间是否按下。

QCheckBox设置默认值:

 ui.IsOpenCUDAcheckBox->setChecked(_configFileData->_initialized->GetCudaConfigIsOpen());

setChecked这个函数可以设置空间默认值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

写代码遇到Qt相关问题 的相关文章

  • 如何以编程方式在 qml 中渲染 vtk 项目?

    到目前为止 我了解到我们在 QML 中有两个线程 我们的主应用程序线程和我们的 场景图 线程 http doc qt io qt 5 qtquick visualcanvas scenegraph html http doc qt io q
  • QT:隐藏对话框/窗口的标题栏

    我有一个父窗口 其中按钮的单击事件函数具有以下几行 SplashScreenDialog splScrDlg new SplashScreenDialog this splScrDlg gt show 我想要的是我想从对话框 或窗口 中删除
  • 将 Objective-C 代码转换为 C++ 以检测 OS X 上的用户空闲时间

    我正在开发 Qt C 应用程序 我需要简单的函数来在 Mac OS X 上以秒为单位检索用户空闲时间 我发现这个代码用于检测用户空闲时间 include
  • 如何在 Qt 中使用 QTabWidget 创建多行选项卡?

    我尝试使用 QTabWidget 创建一个多行选项卡 如下所示 我也设置了tabPosition 南但我不能有多行选项卡 因为所有选项卡都是水平的 所有选项卡都在一行中 而不是多行 这些是我得到的标签 我读过了这个帖子 https stac
  • QNetworkManager 默认情况下是否接受压缩回复?

    我在用Q网络管理器 https doc qt io qt qnetworkaccessmanager html从服务器获取文件 但是我不知道文件在传输过程中是否使用标准 gzip 压缩进行压缩 如果不是 如何让它们下载压缩文件 我该如何去检
  • 安装 PyQt

    我正在尝试在我的 mac 上安装 PyQt 以便可以安装 python Ghost 我已经安装了Qt和SIP 我已经下载了 PyQt 但是当我运行时 python configure ng py 我收到以下错误 Error Use the
  • pyqt在mac osx雪豹中安装问题

    我正在学习制作桌面应用程序的教程 使用python和qt4 我下载并安装了qt Creator ide 创建了 ui文件 然后我必须使用pyuic4对其进行转换 我已经尝试了很多东西但仍然无法做到 我以为pyuic4会用Qt Creator
  • 如何在 PyQt 应用程序退出时禁用清除剪贴板?

    我有一个简单的 PyQt4 应用程序 请参阅下面的代码 它揭示了一个问题 如果我从QLineEdit并将其复制到剪贴板 然后我只能在应用程序运行时将其粘贴到另一个应用程序 似乎在退出时 PyQt 应用程序会清除剪贴板 因此我无法在应用程序关
  • 更改 Qt 中的标签

    我正在尝试制作一个由按钮和标签组成的简单程序 当按下按钮时 它应该将标签文本更改为程序内 QString 变量中的任何内容 到目前为止 这是我的代码 这是我的 widget h 文件 class Widget public QWidget
  • Qt for Android:无法签署应用程序的发布版本

    我正在使用 Qt 5 13 和 Qt Creator 4 9 2 我可以成功构建 Android 应用程序的调试版本 但是当我尝试编译发布版本时 我得到 16 57 35 过程 opt Qt 5 13 0 android armv7 bin
  • 迁移到 Qt6/PyQt6:Qt5 中所有已弃用的短格式名称是什么?

    我正在尝试从以下位置迁移代码库PyQt5 to PyQt6 我读过这篇文章 参见https www pythonguis com faq pyqt5 vs pyqt6 https www pythonguis com faq pyqt5 v
  • const QList 警告 = QList() << 0; gcc 4.7.2 的段错误

    因此 主题行中提到的代码会导致 Qt 4 8 3 和 gcc 4 7 2 出现分段错误 这是在 cpp 文件中的任何类 结构之外 并且与 gcc 4 4 一起使用 const QList
  • qt 读取就绪信号

    我正在尝试与运行 1996 年处理器的设备建立串行连接 这意味着数据传输回我可能需要几秒钟的时间 我知道readyRead每次有新数据可用时都会生成信号 但我的问题是生成多长时间 这也是我可以测试就绪读取是否较低的一种方法 因为如果当它们不
  • 将 Android 应用程序部署到手机:错误:[install_itemfolder_01] 错误 1 ​​Windows

    我已经安装了我可能需要的所有组件 我已经上网两天了 但找不到这个问题的答案 我检查了我的 apache ant javac java JRE JDK Qt 变量一切正常 Qt 喜欢我的所有设置 除了当我尝试将应用程序部署到模拟器或设备时出现
  • 使用 KDE Kirigami 时未找到 QML 模块

    所以我决定在我的应用程序中使用 KDE Kirigami UI 框架 所以我按照说明进行操作here https api kde org frameworks kirigami html index html 我将存储库克隆到我的应用程序目
  • 在QT中以不同的时间间隔更新GUI [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道如何在QT中以不同的时间间隔更新GUI 最好的是我可以控制时间间隔 我知道 QTimer 可以在同一时间间隔更新 GUI 但我
  • Qt 的 sysroot 和前缀选项的实际示例是什么

    我正在查看可以运行的所有选项configureQt 提供的脚本 特别是 qt everywhere opensource src 5 2 0 经过大量搜索后 我确定这些东西充其量记录很少 所以我希望我能得到一些帮助 当我查看描述时prefi
  • 如何在Qt WebKit中将网页保存为“另存为完整网页”

    我需要使用 Qt WebKit 保存网页 类似于 另存为完整网页 以下是我的要求 保存索引html文件 维护实体编码 需要下载所有链接的图像和其他资源 需要将html页面中的资源路径更改为本地下载路径 需要维护网页当前状态 我可以使用 Qt
  • 删除行时 QModelIndex 变得无效

    我正在子类化QAbstractItemModel显示项目QTreeView 并且在这个子类中 projectModel 我有一个功能可以删除树视图中当前选定的索引 Component是用于表示模型所有成员的类 void projectMod
  • Qt 的最佳实践包括和预编译头文件?

    当使用现代和最新的 C 编译器 例如 MSVC2015 并激活预编译头时 当前关于包含 Qt 头文件的 最佳实践 是什么 Example include

随机推荐

  • ERROR 1114 (HY000): 表‘tablename’已满(解决方案)

    MySQL 是一种广泛使用的开源关系数据库管理系统 RDBMS 可实现高效的数据存储和检索 但是 用户偶尔可能会遇到错误 例如 ERROR 1114 HY000 The table table name is full 消息 当达到表的存储
  • 什么是Fish(友好交互式SHell)?

    鱼 或者 友好的交互式SHell 是一个 Unix shell 其设计重点是用户友好性和交互使用 它于 2005 年推出 由于其独特的功能 有用的默认设置以及对愉快的用户体验的关注 赢得了众多追随者 鱼的主要特征和特点 交互式自动完成 Fi
  • Unix/Linux 中什么是僵尸进程

    僵尸进程是指已完成执行但其父进程尚未终止并释放其资源的进程 在 Unix Linux 中 处于这种状态的进程被视为僵尸进程 这些进程会占用宝贵的系统资源 如果处理不当 可能会导致稳定性问题 以下是了解和处理 Unix Linux 中僵尸进程
  • 您绝对需要的 7 件在家办公必需品

    甚至在 COVID 19 大流行爆发之前 很多人就在家工作 然而 他们中的大多数人并不是全职在家工作 这就是为什么这种强制性的远程办公可能异常难以适应 虽然业务模式或工作实践的每次变化都需要一些时间来适应 但您需要记住 有很多方法可以稍微促
  • 在 Laravel 中设置文件权限的正确方法:详细教程

    Laravel 是一种流行的 Web 应用程序开发 PHP 框架 非常注重安全性 在 Laravel 的众多安全考虑因素中 正确设置文件权限至关重要 如果没有正确的权限 您的应用程序可能容易受到攻击 或者可能由于缺乏必要的访问权限而发生故障
  • 如何保护 Apache 中的特定 URL

    阻止用户访问特定网页有助于防止他们接触敏感信息 如果您将站点托管在 Apache 服务器上 则可以通过锁定特定 URL 来锁定站点 如果您只需要阻止访问单个页面 则可以锁定 URL 而无需锁定整个站点 使用 Apache 有多种方法可以做到
  • Bash 读取命令

    Bash 附带了许多内置命令 您可以在命令行或 shell 脚本中使用这些命令 在本文中 我们将探讨内置read命令 Bash read内置 read是一个 bash 内置命令 它从标准输入 或文件描述符 读取一行并将该行拆分为单词 第一个
  • 如何在 CentOS 8 上安装 Visual Studio Code

    视觉工作室代码是微软开发的开源 跨平台代码编辑器 它具有内置的调试支持 嵌入式Git控制 语法突出显示 代码完成 集成终端 代码重构和片段 本文介绍如何在 CentOS 8 上安装 Visual Studio Code 先决条件 这些说明假
  • 如何在 CentOS 8 上安装和使用 FFmpeg

    FFmpeg 是一个用于处理多媒体文件的免费开源工具集合 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率 捕获流音频
  • 如何在 Debian 9 上安装和配置 Redis

    Redis 是一个开源内存键值数据存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 包括监控 通知 自动故障转移 它还通过 Redis C
  • Python 列表排序

    对数据进行排序是使用 Python 时最常见的任务之一 例如 您可能希望按姓名对团队成员列表进行排序 或按优先级对项目列表进行排序 本文介绍了如何排序Python 中的列表 Python sort and sorted 在 Python 中
  • 如何在 Debian 9 上安装 TensorFlow

    TensorFlow是由 Google 构建的免费开源机器学习平台 许多组织都在使用它 包括 Twitter PayPal 英特尔 联想和空中客车公司 TensorFlow 可以在 Python 虚拟环境中安装在系统范围内 作为Docker
  • ​如何从 Ubuntu 16.04 升级到 18.04

    最新的 Ubuntu LTS 版本 Ubuntu 18 04 Bionic Beaver 于 2018 年 4 月 26 日发布 支持期为 5 年 直至 2023 年 4 月 在本教程中 我们将向您展示如何升级 Ubuntu 16 04 安
  • Netcat (nc) 命令及示例

    网络猫 或nc 是一个命令行实用程序 它使用 TCP 或 UDP 协议跨网络连接读取和写入数据 它是网络和系统管理员武器库中最强大的工具之一 被视为网络工具中的瑞士军刀 Netcat 是跨平台的 可用于 Linux macOS Window
  • 在 Ubuntu 20.04 上使用 Let's Encrypt 保护 Apache

    Let s Encrypt 是由互联网安全研究小组 ISRG 创建的证书颁发机构 它通过完全自动化的流程提供免费的 SSL 证书 旨在消除手动证书创建 验证 安装和续订 Let s Encrypt 颁发的证书自颁发之日起 90 天内有效 并
  • 如何在 CentOS 8 上安装 VirtualBox

    虚拟盒子是一个开源 跨平台的虚拟化平台 它支持多种来宾操作系统 包括 Linux 和 Windows 并允许您同时运行多个虚拟机 在本教程中 我们将解释如何在 CentOS 8 上安装 VirtualBox 在 CentOS 8 上安装 V
  • 在 CentOS 7 上使用 Let's Encrypt 保护 Apache

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费 自动化 开放的证书颁发机构 Let s Encrypt 颁发的证书自颁发之日起 90 天内有效 并且受到当今所有主要浏览器的信任 在本教程中 我们将介绍在运行 Apa
  • 如何在 Ubuntu 18.04 上安装 PostgreSQL

    PostgreSQL 或 Postgres 是一个开源通用对象关系数据库管理系统 PostgreSQL 具有许多高级功能 可让您创建复杂的 Web 应用程序 在本教程中 我们将向您展示如何在 Ubuntu 18 04 上安装 Postgre
  • 电脑开机后卡死,桌面图标点了没反应怎么办

    今天接到客户的电话 说一台台式办公PC出现故障 具体故障现象如下 电脑可以正常开机 开机后点击桌面上的所有图标都没反应 开始菜单可以点开 点开后里面的内容也无法点击打开 右键点击桌面下方启动栏可以点出来选项卡 但是点击选项卡里的内容无法打开
  • 写代码遇到Qt相关问题

    目录 qt clicked 函数 传递数据 QT读取文件个数 QT读txt数据并求出行数和列数 qt读写json 我的json文件 读写函数 换行和不换行的区别就是参数Indented和Compact的区别 把json写到文件中 QT信号槽