Qt菜单栏标题前打对钩
时间: 2023-07-10 17:15:27 浏览: 317
要在Qt菜单栏标题前打对钩,你可以使用QAction类的setCheckable()和setChecked()方法。首先,使用setCheckable()方法将QAction标记为可选的,然后使用setChecked()方法设置它是否被选中。例如:
```
QAction *action = new QAction("Action", this);
action->setCheckable(true);
action->setChecked(true);
```
这将创建一个名为"Action"的QAction对象,并将其标记为可选。然后,setChecked(true)方法将选中这个选项,使其前面显示一个对勾。
相关问题
java中docx转pdf打对勾
您可以使用Apache POI和Apache PDFBox库来实现将docx文件转换为pdf并添加对勾的功能。
首先,使用Apache POI读取docx文件并提取文本内容。然后,使用Apache PDFBox创建一个新的pdf文件,并将文本内容添加到pdf文件中。最后,使用PDFBox提供的绘图功能在pdf文件中绘制对勾。
以下是一个简单的示例代码:
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
import org.apache.pdfbox.pdmodel.graphics.color.PDGamma;
public class DocxToPdfWithCheckMark {
public static void main(String[] args) {
try {
// Read docx file
XWPFDocument doc = new XWPFDocument(new FileInputStream("input.docx"));
// Extract text from docx file
StringBuilder text = new StringBuilder();
for (XWPFParagraph p : doc.getParagraphs()) {
for (XWPFRun r : p.getRuns()) {
text.append(r.getText(0)).append("\n");
}
}
// Create new pdf document
PDDocument pdfDoc = new PDDocument();
PDPage page = new PDPage();
pdfDoc.addPage(page);
// Add text to pdf document
PDPageContentStream contentStream = new PDPageContentStream(pdfDoc, page);
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA, 12);
contentStream.newLineAtOffset(100, 700);
contentStream.showText(text.toString());
contentStream.endText();
// Add check mark to pdf document
PDGamma color = new PDGamma();
color.setR(0);
color.setG(0);
color.setB(0);
PDColor pdColor = new PDColor(color, PDDeviceRGB.INSTANCE);
contentStream.setNonStrokingColor(pdColor);
contentStream.moveTo(50, 650);
contentStream.lineTo(60, 640);
contentStream.lineTo(70, 660);
contentStream.lineTo(80, 630);
contentStream.stroke();
contentStream.close();
// Save pdf document
pdfDoc.save(new FileOutputStream("output.pdf"));
pdfDoc.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
```
在上面的代码中,我们首先使用Apache POI读取docx文件并提取文本内容。然后,我们使用PDFBox创建一个新的pdf文件,并将文本内容添加到pdf文件中。最后,我们使用PDFBox的绘图功能在pdf文件中绘制对勾。注意,绘制对勾的坐标需要根据文本内容的位置进行调整,以确保对勾的位置正确。
用canvas实现一个电子作业批改的功能,可打对勾,可拖动对勾位置,可添加文本
好的,我可以帮你解决这个问题。实现电子作业批改功能需要用到 HTML5 中的 canvas 元素,其中包括绘制图形、拖拽和添加文本等操作。下面是一个简单的示例,演示如何实现这些功能:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>电子作业批改</title>
<style>
canvas {
border: 1px solid #ccc;
}
</style>
<script>
window.onload = function () {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
// 打对勾
function drawCheckmark(x, y, size) {
ctx.beginPath();
ctx.moveTo(x, y);
ctx.lineTo(x + size / 2, y + size / 2);
ctx.lineTo(x + size, y - size / 2);
ctx.stroke();
}
// 绘制初始对勾
drawCheckmark(50, 50, 20);
// 拖拽对勾
var isDragging = false;
var offsetX, offsetY;
canvas.addEventListener("mousedown", function (e) {
var rect = canvas.getBoundingClientRect();
var x = e.clientX - rect.left;
var y = e.clientY - rect.top;
if (
x > 50 - 10 &&
x < 50 + 10 &&
y > 50 - 10 &&
y < 50 + 10
) {
isDragging = true;
offsetX = x - 50;
offsetY = y - 50;
}
});
canvas.addEventListener("mousemove", function (e) {
if (isDragging) {
var rect = canvas.getBoundingClientRect();
var x = e.clientX - rect.left - offsetX;
var y = e.clientY - rect.top - offsetY;
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawCheckmark(x, y, 20);
}
});
canvas.addEventListener("mouseup", function (e) {
isDragging = false;
});
// 添加文本
var textInput = document.getElementById("text");
var addButton = document.getElementById("add");
addButton.addEventListener("click", function () {
var text = textInput.value;
ctx.font = "16px Arial";
ctx.fillText(text, 50, 100);
});
};
</script>
</head>
<body>
<h1>电子作业批改</h1>
<canvas id="canvas" width="400" height="400"></canvas>
<br />
<input type="text" id="text" />
<button id="add">添加文本</button>
</body>
</html>
```
在这个示例中,我们首先定义了一个 `drawCheckmark` 函数,用于绘制对勾。然后,在 `onload` 事件中,我们调用了这个函数来绘制初始的对勾。接着,我们添加了三个事件监听器,用于实现对勾的拖拽和文本的添加。其中,`mousedown` 事件监听器用于检测鼠标是否点击在对勾上,如果是,则设置 `isDragging` 为 true,并记录下鼠标点击位置和对勾位置的偏移量。`mousemove` 事件监听器用于在拖拽过程中实时更新对勾位置,并清除画布上的内容。`mouseup` 事件监听器用于在拖拽结束时将 `isDragging` 设置为 false。
最后,我们添加了一个文本输入框和一个按钮,用于添加文本。点击按钮时,我们获取文本框中的值,并使用 `fillText` 函数在画布上绘制文本。
希望这个示例能够帮助你实现电子作业批改功能。如果你还有其他问题,请随时提出。
阅读全文