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

时间:2014-07-15 08:58:30

标签: c++ qt

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

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

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

喜欢你需要

  1. 创建您自己的"自定义小部件" /" qml组件" /"您不知道的其他内容因为您是新的在Qt并且不知道名字或在哪里看"。

  2. 您还应该阅读一些有关此内容的内容,也许还有一些有用的内容。在这里,这是你应该看的。

  3. 自从我开始寻找以来,我开始了很多QML教程,但是当我开始学习时,我不确定它们是否会导致我最终寻找的东西。

    我想要创建的是一个" Plot widget"它显示了两个图形,看起来接近它的图形可能是"曲线工具"比如在photoshop或GIMP中。

3 个答案:

答案 0 :(得分:1)

这有点难以回答,因为您需要执行许多操作,例如在链接的图片中。所以我将解决两个主要问题:

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

只需创建一个继承自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。 还有许多其他Layouts

  • 绘制图表

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

答案 1 :(得分:1)

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

然后,您需要2个图表。我建议你看看qwt libraryhttp://qwt.sourceforge.net/

使用此库,您可以获得大量图表示例。它有点复杂,它是一个非常大的lib但非常完整。

您还必须管理您的布局,我建议您使用QGridLayout的Qt设计器。 使用此布局对象,您可以定义一个“矩阵”,您可以将所有小部件放在任何位置。

要制作按钮,窗口小部件,绘图,......点击它们时的操作,您必须创建signal/slot机制。看看那里:http://qt-project.org/doc/qt-4.8/signalsandslots.html

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

答案 2 :(得分:0)

我认为一个好的开始就是阅读一下。 Qt是C ++应用程序的多平台框架。 http://en.wikipedia.org/wiki/Qt_(software)

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)使用QML或例如设计UI QtCreator中的普通UI功能,基于您在2)中派生的按钮和显示等的规范。