创建我自己的Qt组件/小部件/工具的方式
Way of creating my own Qt components/widgets/tools
我是新的Qt,我正在寻找一种方法来创建我自己的组件。我需要创建我自己的自定义样式(需要特别注意)组件。问题是我正在看教程,我有点困惑如何做到这一点,因为教程显示了一些我不需要做的事情。
我需要创建一些像我自己的plotwidget,包含两个图形(其中一个可以通过鼠标单击和拖动控制点编辑),将有可访问的属性和插槽/事件,如"plotchanged"。
现在,我要找的不是有人给我写代码(会很好,虽然:D),但有人告诉我从哪里开始找/告诉我该怎么做?
Like You need to
-
创建你自己的"自定义小部件"/"qml组件"/"一些你不知道的东西,因为你是Qt的新手,不知道名字或去哪里看"。
-
你也应该读一些关于这个,这个,也许那个小的东西是有用的。这里,这是你应该看的
我开始看很多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)。
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 在clang++预处理器中确定gcc工具链版本
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- wxWidgets工具栏文本对齐方式
- 在Debian Jessie上安装多个g++工具链的最佳方式是什么
- 以编程方式从 MFC 工具栏中完全删除按钮
- 如何以编程方式将工具按钮移动到右侧工具栏区域
- c++ Windows开始菜单Internet快捷方式工具提示
- 创建我自己的Qt组件/小部件/工具的方式
- 在单独的 GUI 类(菜单、工具栏等)之间共享操作的最佳方式是什么
- Qt5无法识别快捷方式,除非将操作添加到工具栏中
- 以编程方式设置Qt工具提示区域约束