创建我自己的Qt组件/小部件/工具的方式

Way of creating my own Qt components/widgets/tools

本文关键字:工具 方式 小部 创建 自己的 Qt 组件 我自己      更新时间:2023-10-16

我是新的Qt,我正在寻找一种方法来创建我自己的组件。我需要创建我自己的自定义样式(需要特别注意)组件。问题是我正在看教程,我有点困惑如何做到这一点,因为教程显示了一些我不需要做的事情。

我需要创建一些像我自己的plotwidget,包含两个图形(其中一个可以通过鼠标单击和拖动控制点编辑),将有可访问的属性和插槽/事件,如"plotchanged"。

现在,我要找的不是有人给我写代码(会很好,虽然:D),但有人告诉我从哪里开始找/告诉我该怎么做?

Like You need to

  1. 创建你自己的"自定义小部件"/"qml组件"/"一些你不知道的东西,因为你是Qt的新手,不知道名字或去哪里看"。

  2. 你也应该读一些关于这个,这个,也许那个小的东西是有用的。这里,这是你应该看的

我开始看很多QML教程,但是当我开始看的时候,我不确定它们是否能引导我最终寻找的东西。

我想创建的是一个"Plot widget",它显示两个图形,看起来与它很接近的东西可能是像photoshop或GIMP中的"curves tool"

这个问题有点难回答,因为你需要在链接的图片中做很多事情。因此,我将只处理两个主要内容:

  • 创建自己的自定义小部件:

创建一个继承自QWidget的类,并添加一个布局:

class CustomWidget : public QWidget
{
public:
    CustomWidget ( QObject * parent ) : QWidget ( parent )
    {
        QVBoxLayout * lay = new QVBoxLayout;
        lay->addWidget ( new QTextEdit );
        lay->addWidget ( new QPushButton ( "Button" ) );
        this->setLayout ( lay );
    }
};

你可以在任何地方使用这个类,例如通过布局其他基于QWidget的类,就像我使用new QLineEdit一样,你可以在另一个类中使用new CustomWidget。还有很多其他的布局

  • 绘图图

QPainter是您运行所有绘图(线,曲线等)的类。您可以在QWidget中绘制(或者确切地说:从QPaintDevice继承的类)。要在适当的时候绘制QWidget,覆盖paintEvent(QPaintEvent*)。只要谷歌一下,有数百万个例子如何正确地做到这一点。

您想要创建一个小部件,所以首先要做的是创建您自己的类myWidget,它继承自QWidget

那么,你想要2张图。我建议你看一下qwt library: http://qwt.sourceforge.net/

有了这个库,你有很多图形的例子。它有点复杂,它是一个相当大的库,但非常完整。

你还必须管理你的布局,我建议你使用Qt设计器与QGridLayout。有了这个布局对象,你可以定义一个"矩阵",你可以把你所有的小部件放在你想要的任何地方。

使您的按钮,小部件,绘图,…当你点击它时,你必须创建你的signal/slot机制。看看那里:http://qt-project.org/doc/qt-4.8/signalsandslots.html

最后,为了拥有一个漂亮的小部件,您可以使用CSS language创建样式表来改进您的设计。

我认为一个好的开始是多读一些书。Qt是c++应用程序的多平台框架。http://en.wikipedia.org/wiki/Qt_(软件)

QML是一种用于快速Qt UI开发的标记语言(与html,超文本标记语言一样)。http://en.wikipedia.org/wiki/QML

使用QML你可以设计你的图形界面。"plotwidget"非常不清楚您的应用程序需要什么数学。

我自己还没有测试过这个库,但它看起来很有前途http://www.qcustomplot.com(这是谷歌搜索"qt plot"时的第一个命中)我不知道你所说的"拖动和单击控制点"是什么意思,所以你必须在库文档中阅读,如果它支持。

我:

1)通过继承QWidget创建一个小部件。让你选择的情节库工作,也许在继续之前显示一些模型情节,如y=x^2或其他东西。

2)写下你需要从库中得到的调用和响应。如何使用库解决"拖动和单击"的问题?

3)设计UI与QML或例如普通的UI功能在QtCreator,基于规格的按钮和显示等,你已经派生在2)。