文章目录
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();
}