Qt的qt的文本控件QTextBrowser,怎么加上上方、左侧悬停刻度尺。
例如
1 2 3 4 5 6 7 8
1 01 02 03 04 05 06 07 08
2 01 02 03 04 05 06 07 08
3 01 02 03 04 05 06 07 08
4 01 02 03 04 05 06 07 08
5 01 02 03 04 05 06 07 08
。
。
。
无论中间的内容怎么移动刻度尺一直悬停在上方跟左侧
重写QTextBrowser的绘制方法
举个例子:添加上方和左侧的刻度尺?
创建自定义的 QTextBrowser 类:
#include <QTextBrowser>
#include <QPainter>
#include <QTextDocument>
class CustomTextBrowser : public QTextBrowser {
Q_OBJECT
public:
CustomTextBrowser(QWidget *parent = nullptr) : QTextBrowser(parent) {}
protected:
void paintEvent(QPaintEvent *event) override {
// 调用基类的绘制方法
QTextBrowser::paintEvent(event);
// 绘制刻度尺
QPainter painter(viewport());
painter.save();
// 设置刻度尺的颜色和字体
painter.setPen(Qt::black);
painter.setFont(QFont("Arial", 10));
// 绘制上方刻度尺
for (int i = 1; i <= 8; ++i) {
int x = (i - 1) * 40; // 根据需要调整位置
painter.drawText(x, 15, QString::number(i));
}
// 绘制左侧刻度尺
for (int j = 1; j <= 8; ++j) {
int y = (j - 1) * 20 + 30; // 根据需要调整位置
painter.drawText(10, y, QString::number(j).rightJustified(2, '0'));
}
painter.restore();
}
QSize sizeHint() const override {
return QTextBrowser::sizeHint() + QSize(50, 50); // 调整大小以包含刻度尺
}
};
使用 CustomTextBrowser,主窗口或其他控件中创建 CustomTextBrowser 的实例:
#include <QApplication>
#include <QMainWindow>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QMainWindow w;
CustomTextBrowser *textBrowser = new CustomTextBrowser();
w.setCentralWidget(textBrowser);
w.resize(400, 300);
w.show();
return a.exec();
}
刻度尺的位置:在 paintEvent 中,通过调整 x 和 y 的值控制刻度尺的位置,可以根据需要调整刻度尺的间距和位置
文本内容的移动:由于在 paintEvent 中绘制了刻度尺,刻度尺将始终固定在其位置,无论文本内容如何滚动
字体和颜色:通过调整 QPainter 的设置来自定义刻度尺的外观
这样就可以在QTextBrowser 中实现悬停的刻度尺功能,你根据实际需要调整参数和样式即可