我是 Qt 新手,我正在寻找一种创建自己的组件的方法。我需要创建自己的自定义样式(需要具体查看)组件。问题是我正在查看教程,但我对如何执行此操作感到有点困惑,因为教程显示了我需要做的其他内容。
我需要创建一些东西像我自己的plotwidget,包含两个图形(其中一个可以通过鼠标单击和拖动控制点进行编辑),这些图形将具有可访问的属性和插槽/事件,例如“plotchanged”。
现在,我寻找的不是有人给我写代码(虽然会很好:D),而是有人告诉我从哪里开始寻找/告诉我该怎么做?
就像你需要的那样
创建您自己的“自定义小部件”/“qml 组件”/“您不知道的其他东西,因为您是 Qt 新手,不知道名称或在哪里查找”。
你还应该阅读一些关于这个、这个,也许还有那个有用的小东西。在这里,这就是您应该查看的内容。
自从我开始寻找以来,我开始了很多 QML 教程,但是当我开始它们时,我不确定它们是否会带来我最终想要的东西。
我想要创建的是一个显示两个图表的“绘图小部件”,看起来接近它的东西可能是像 Photoshop 或 GIMP 中的“曲线工具”。
这有点难以回答,因为您需要做很多事情,例如链接图片中的事情。所以我只想解决两个主要问题:
创建您自己的自定义小部件:
只需创建一个继承自
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 (这是谷歌搜索“qtplot”时的第一个命中)我不知道“拖动并单击控制点”是什么意思,所以如果它支持的话,您将必须阅读库文档。
我愿意:
1)继承QWidget创建一个widget。使您选择的绘图库正常工作,并可能在继续之前显示一些模型图,例如 y=x^2 或其他内容。
2) 写下您需要图书馆提供的呼叫和响应。使用您的库如何解决“拖动和单击”问题?
3)使用 QML 或 e.g. 设计 UI QtCreator 中的普通 UI 功能,基于您在 2) 中导出的按钮和显示等规范。