首页 新闻 会员 周边 捐助

QTextBrowser悬停刻度尺怎么实现

0
悬赏园豆:200 [已解决问题] 解决于 2024-10-30 18:04

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



无论中间的内容怎么移动刻度尺一直悬停在上方跟左侧

qt_小白白白白白的主页 qt_小白白白白白 | 初学一级 | 园豆:3
提问于:2024-10-28 15:27
< >
分享
最佳答案
0

重写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 中实现悬停的刻度尺功能,你根据实际需要调整参数和样式即可

收获园豆:200
五号位 | 小虾三级 |园豆:610 | 2024-10-30 16:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册