Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QAbstractModelItem中的QTextEdit和QPushButton_Qt_Qt Designer_Qabstractitemmodel_Qstyleditemdelegate - Fatal编程技术网

QAbstractModelItem中的QTextEdit和QPushButton

QAbstractModelItem中的QTextEdit和QPushButton,qt,qt-designer,qabstractitemmodel,qstyleditemdelegate,Qt,Qt Designer,Qabstractitemmodel,Qstyleditemdelegate,我使用QTreeView来可视化我的对象属性。 它类似于Qt设计器中的属性编辑器。我有各种各样的值,bool,text,color值,enum,float,int,filename等等 我使用coustom模型保存所有对象值,并通过coustom委托显示它。因此,代理检测数据的类型,并具有用于编辑的特殊表示,例如int/float的spinbox和bool的复选框。 此时,我的委托为eg Spinbox创建编辑器,并重写将值表示为复选框的paint()函数 现在我想允许用户通过两种方式编辑值。用

我使用QTreeView来可视化我的对象属性。 它类似于Qt设计器中的属性编辑器。我有各种各样的值,bool,text,color值,enum,float,int,filename等等

我使用coustom模型保存所有对象值,并通过coustom委托显示它。因此,代理检测数据的类型,并具有用于编辑的特殊表示,例如int/float的spinbox和bool的复选框。 此时,我的委托为eg Spinbox创建编辑器,并重写将值表示为复选框的paint()函数

现在我想允许用户通过两种方式编辑值。用户应使用普通文本字段进行编辑、复制/粘贴等操作,以更改值或按下按钮打开QFileDialog并选择正确的文件。
它应该是这样的:

我如何才能做到这一点?
我需要一个文本字段和一个按钮来打开QFileDialog


我使用Qt5.0。Thx要获得帮助,您必须使用自定义小部件,您可以在代理的
createEditor()
函数/类似以下内容的代码中创建一个小部件:

QFrame *frame = new QFrame();
frame->setLayout( new QHBoxLayout() );
frame->layout()->addWidget( new QLineEdit() );
frame->layout()->addWidget( new QToolButton() );
return frame;

或者,您可以使用designer创建一个自定义小部件并返回其中一个。

您希望文本字段和按钮在编辑状态下可见,还是同时显示和编辑?在最好的情况下,显示和编辑都是如此。我已经想到了这一点。然后我尝试实现它并坚持stardelegate示例。我以前不知道QFrame,我来看看这个类。