Qt项目技巧总结

1.窗口设置

1.1 基本信息设置

	//1.设置窗口名称
	this->setWindowTitle("窗口名称");
	//2.窗口最大化
	this->showMaximized();
	//3.设置窗口图标
	this->setWindowIcon(QIcon(":/rabbit.ico"));
	//其中图标rabbit.ico保存在资源文件夹中

1.2 实现主窗口关闭后,其余子窗口全部关闭

方法1

在类的构造函数中添加对应的代码即可,主窗口的属性设为true,子窗口的属性设为false
mainWindow.cpp

	this->setAttribute(Qt::WA_QuitOnClose, true);

其他窗口.cpp

	this->setAttribute(Qt::WA_QuitOnClose, false);

方法2(推荐)

主窗口设为QMainWindow或者QWidget类型
弹出的子窗口设置为QDialog类型
然后设置主窗口为弹出的子窗口的父:

AdminAddAccount* addaccount = new AdminAddAccount(this);
addaccount->show();

其中,AdminAddAccount继承于QDialog类型,这样设置之后弹出的子窗口会一直显示在父窗口上方。同时,在父窗口关闭后,子窗口也会关闭。

1.3 窗口快捷键设置

在项目中,我需要设置一些快捷键方便用户快速的对窗口进行操作,如:ESC键进行退出最大化或者全屏,使用F11键最大化或者全屏。
在类中实现如下方法:
mainWindow_admin.h

class MainWindow_admin : public QWidget
{
    
    
private slots:
	void keyPressEvent(QKeyEvent*);
}

mainWindow_admin.cpp

void Mainwindow_admin::keyPressEvent(QKeyEvent* event)
{
    
    
    if (event->key() == Qt::Key_Escape)
    {
    
    
        this->showNormal();//退出最大化或者全屏
    }
    else if (event->key() == Qt::Key_F11)
    {
    
    
//        this->showFullScreen();//全屏
        this->showMaximized();//最大化
    }
}

1.4 主窗口退出确认

mainWindow_admin.h

class MainWindow_admin : public QWidget
{
    
    
private slots:
	void closeEvent(QCloseEvent*);//处理窗口关闭事件
}

mainWindwo_admin.cpp

void Mainwindow_admin::closeEvent(QCloseEvent* event)
{
    
    
    if (QMessageBox::question(this, QString("提示"), QString("确认退出程序"), QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) event->accept();
    else event->ignore();
}

1.5 设置窗口充满屏幕

1.5.1 使用最大化

	this->showMaximized();

同时将任务栏设置改为:
任务栏设置

1.5.2 自定义修改窗口大小

	//获取第一个屏幕的信息
	QScreen* screen = QGuiApplication::screens()[0];
	//设置窗口宽度等于屏幕分辨率
	this->setFixedWidth(screen->geometry().width());
	//设置窗口高度等于屏幕分辨率高度减去标题栏高度
	this->setFixedHeight(screen->geometry().height() - QStyle::PM_TitleBarHeight);

2 QLineedit

3.1 屏蔽中文输入法

ui->lineedit->setAttribute(Qt::WA_InputMethodEnabled, false);

3.2 设置占位提示符

ui->lineedit->setPlaceholderText(QString("账号"));

3.4 设置只读

ui->lineedit->setReadOnly(true);

3 QTextEdit获取文本内容

ui->textedit->toPlainText();

4 在QTableWidget中使用QCheckBox

1)在表格中创建QCheckBox,并连接槽函数

QCheckBox* checkbox = new QCheckBox();
checkbox->setObjectName(QString("checkbox"));
connect(checkbox, SIGNAL(stateChanged(int)), this, SLOT(clickCheckBox(int)));
QWidget* widget2 = new QWidget();
QHBoxLayout* layout2 = new QHBoxLayout(widget2);
layout2->addWidget(checkbox);
layout2->setContentsMargins(0, 0, 0, 0);
layout2->setSpacing(0);
//...
//将widget2添加到表格中
ui->calcmodellist->setCellWidget(i, 8, widget2);

2)槽函数设置

void AdminSetParameters::clickCheckBox(int state)
{
    
    
	//获取点击的多选框在表格中的row和column
    QCheckBox* checkbox = (QCheckBox*)sender();
    QWidget* widget = (QWidget*)checkbox->parent();
    int x = widget->frameGeometry().x();
    int y = widget->frameGeometry().y();
    QModelIndex modelindex = ui->calcmodellist->indexAt(QPoint(x, y));
    int row = modelindex.row();
    int column = modelindex.column();
    
    //判断是否选择文件
    if (this->filechoosed == false)
    {
    
    
    	//设置表格中所有的checkbox状态为未选中
        QWidget* widget = ui->calcmodellist->cellWidget(row, 8);
        QCheckBox* checkbox = widget->findChild<QCheckBox*>(QString("checkbox"));
        if (checkbox->checkState() == Qt::Checked)
        {
    
    
            disconnect(checkbox, SIGNAL(stateChanged(int)), this, SLOT(clickCheckBox(int)));
            checkbox->setCheckState(Qt::Unchecked);
            connect(checkbox, SIGNAL(stateChanged(int)), this, SLOT(clickCheckBox(int)));
        }
        return ;
    }
    //根据checkbox当前状态选择功能
    if (state == Qt::Checked)
    {
    
    
        
    }
    else if (state == Qt::Unchecked)
    {
    
    
       
    }
}

5 PDF阅读器

实现效果:
在这里插入图片描述
在这里插入图片描述

1)基于QListWidget实现文件列表效果

首先在ui界面添加相应控件
在这里插入图片描述

void AdminViewPDF::listInit()
{
    
    
    ui->listWidget->setViewMode(QListView::IconMode);
    ui->listWidget->setIconSize(QSize(80, 80));
    ui->listWidget->setGridSize(QSize(100, 100));
    ui->listWidget->setResizeMode(QListView::Adjust);//自适应布局
    ui->listWidget->setMovement(QListView::Static);//设置图标不能拖动
    QDir dir(QString("./data/pdf/%1").arg(this->pipeid));
    if (!dir.exists())
    {
    
    
        QDir mkpath;
        mkpath.mkpath(QString("./data/images/%1").arg(this->pipeid));
    }
    QStringList filters;
    filters << QString("*.pdf");
    dir.setFilter(QDir::Files | QDir::NoSymLinks);
    dir.setNameFilters(filters);

    for (uint i = 0; i < dir.count(); i ++)
    {
    
    
        QListWidgetItem* item = new QListWidgetItem(QIcon(":/pdf.png"), dir[i]);
        ui->listWidget->addItem(item);
    }
}

2)PDF阅读器实现

基于PDF.js实现PDF阅读器
配置条件:在pro文件中添加QT += webenginewidgets,同时编译器选择msvc。
在这里插入图片描述

void AdminViewPDF::openPDF(QString filepath)
{
    
    
    QWebEngineView* pdfInfo = new QWebEngineView();
    QString pdfjs = "file:///" + QDir::currentPath() + "/pdfjs-2.9.359-legacy-dist/web/viewer.html";
    QString link = "?file=";
    QString file = "file:///" + filepath;
    pdfInfo->setWindowTitle(QString("%1").arg(filepath.split("/").last());
    pdfInfo->page()->load(QUrl::fromUserInput(pdfjs + link + file));
    pdfInfo->showMaximized();
}

6 树形结构

7 表格

8 图标绘制(曲线图、散点图、折线图)

9 图片查看器(缩放,移动,旋转)

猜你喜欢

转载自blog.csdn.net/CesareBorgia/article/details/119451225