qt知识点总结1

按键

创建按下按键之后的响应函数:

connect(ui->pushButtonSelectFile, &QPushButton::clicked, this, &MainWindow::selectFile);

文本框

设置文本框里显示内容:

ui->lineEditFileName->setText(fileName);

不需要富文本支持时,可以只用QPlainTextEdit替代QTextEditQPlainTextEdi更轻量级,性能更好。

下拉列表

设置下拉列表可选选项(a,b,c,d):

ui->comboBox_ci_mode->addItem("a");
ui->comboBox_ci_mode->addItem("b");
ui->comboBox_ci_mode->addItem("c");
ui->comboBox_ci_mode->addItem("d");

设置下拉列表当先显示第2个(也就是"c"):

ui->comboBox_ci_mode->setCurrentIndex(2);

获取当前下拉列表选择的表项字符串:

QString mode = ui->comboBox_ci_mode->currentText();

文件选择对话框

按下按键选择文件,并在文本框显示选择文件名:

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "", tr("All Files (*)"));
if (!fileName.isEmpty()) {
    ui->lineEdit_file_name->setText(fileName);

}

选择文件夹:

QString floderName = QFileDialog::getExistingDirectory(this, "Select Folder", "");
if (!floderName.isEmpty()) {
    ui->lineEdit_folder->setText(floderName);
  
}

文件名处理

QFileInfo类:

QFileInfo fileInfo(inputFileName);

假设inputFileName"C:/home/user/docs/file.txt"
fileInfo.absolutePath() 返回绝对路径。 “C:/home/user/docs/”
fileInfo.completeBaseName() 返回文件名,不包含路径。 “/file”
fileInfo.suffix() 返回文件后缀名 “txt”

新生成一个"C:/home/user/docs/file_test.txt"文件名

QDir fileDir = fileInfo.absolutePath();
QString newFileName = fileDir.absoluteFilePath(fileInfo.completeBaseName() + "_test." +fileInfo.suffix());

调用一个exe可执行文件,传入参数并执行

创建一个QProcess,用于管理可执行文件。

process = new QProcess;

定义调用可执行文件的文件名,在Qt程序同路径下的lib文件夹中

QString program = ".\\lib\\abc.exe";

定义传入可执行文件的参数,传入4个参数“a”,“b”,“c”,“d”:

QStringList arguments;
arguments << "a" << "b" << "c" << "d";

检查进程是否启动:

if (!process->waitForStarted()) {
    qDebug() << "Failed to start the process";
    return;
}

等待进程结束,bool QProcess::waitForFinished(int msecs = -1); 其中的msecs是等待最大时间(以毫秒为单位),-1表示无限期等待:

process->waitForFinished(-1);

获取exe可执行文件在运行过程中控制台打印的内容:

QObject::connect(process, &QProcess::readyReadStandardOutput, this, &decompressThread::readExeOutput);
void testThread::readExeOutput()
{
    QByteArray output = process->readAllStandardOutput();
    // 假设外部进程输出的是GBK编码
    QTextCodec *codec = QTextCodec::codecForName("GBK");
    if (codec) {
        QString outputString = codec->toUnicode(output);
        qDebug() << "Standard Output:" << outputString;       
    } else {
        qWarning() << "GBK codec not found!";
    }
}

这种方式运行C++编写的exe可执行文件可以实时打印控制台输出内容,Python写的exe只能在运行结束之后一起打印出来。

自定义信号与槽函数

声明信号时要在类开头加上Q_OBJECT

信号的声明,要加关键字(signals):

signals:
    void sgSendMsg(QString message);

槽函数的声明,跟正常函数一样,只不过槽函数与信号量参数类型要一样:

public:
    void showMessage(QString message);
void CalDecompressRatio::showMessage(QString message)
{
    ui->textEdit_show_message->append(message);
}

将信号与槽函数连接:

connect(one, &ClassOne::sgSendMsg, this, &ClassTwo::showMessage);

发射信号,关键字emit

emit sgSendMsg("OK");

线程

线程类要继承于QThread

run()虚函数进行重写

void run() override;

override:用于明确指出一个成员函数意图重写(或覆盖)基类中的虚函数。

启动线程:
调用线程对象的start()方法启动线程。线程启动后,会自动调用run()方法。

停止线程:
虽然QThread提供了quit()terminate()方法,但通常建议使用quit()请求线程退出,并通过wait()等待线程真正结束。terminate()会强制终止线程,可能导致资源泄漏和未定义行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值