Qt的自定义类调用show函数不能显示布局,就像图片上显示一样
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt的自定义类调用show函数不能显示布局,就像图片上显示一样相关的知识,希望对你有一定的参考价值。
#include <QtGui/QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QHBoxLayout>
#include <QWidget>
#include <QCloseEvent>
class A:public QMainWindow
public:
A();
void closeEvent(QCloseEvent *);
private:
QMainWindow *mainwidow;
QWidget *widget;
QPushButton *button;
QHBoxLayout *layout;
;
A::A()
mainwidow=new QMainWindow;
widget=new QWidget;
button=new QPushButton;
layout=new QHBoxLayout;
layout->addWidget(button);
widget->setLayout(layout);
mainwidow->setCentralWidget(widget);
void A::closeEvent(QCloseEvent *event)
event->ignore();
int main(int argc, char *argv[])
QApplication a(argc, argv);
A wm;
wm.show();
return a.exec();
//mainwidow=new QMainWindow; // 本身继承了QMainWindow,没必要再new
widget=new QWidget;
button=new QPushButton;
layout=new QHBoxLayout;
layout->addWidget(button);
widget->setLayout(layout);
//mainwidow->setCentralWidget(widget); // 把这句改为下面的语句
this->setCentralWidget(widget);
运行结果如下:(P.S.不知道是你想要的结果吗?)
参考技术A 你是想要画图形么?如果是的话,建议使用QT designer,搭建在VS2010下使用,可以直接画出你想要的图形,在将信号与槽连接就可以了!Qt/VTK:自定义交互器类中的访问函数
【中文标题】Qt/VTK:自定义交互器类中的访问函数【英文标题】:Qt/VTK: Access functions in custom interactor class 【发布时间】:2016-11-24 11:57:25 【问题描述】:我有一个名为 MainWindow 的 Qt GUI。
我正在MainWindow
的构造函数中渲染一些 3D 对象。
此外,我在 MainWindow.cpp 中声明了 vtkInteractorStyleTrackballCamera
的自定义类,就像在 this example 中一样。
现在我想从我的自定义交互器类中的函数OnLeftButtonDown()
中调用MainWindow
类中的一个函数。
我尝试将MainWindow
类继承到自定义交互器类,如下所示:
class customMouseInteractorStyle : public vtkInteractorStyleTrackballCamera, MainWindow
但这不起作用。
如何访问MainWindow
那里的功能?
按下鼠标左键时自动调用该函数。
// Define interaction style
class customMouseInteractorStyle : public vtkInteractorStyleTrackballCamera
public:
static customMouseInteractorStyle* New();
vtkTypeMacro(customMouseInteractorStyle, vtkInteractorStyleTrackballCamera);
virtual void OnRightButtonDown()
MainWindowfunction(); // <- I want to call this
vtkInteractorStyleTrackballCamera::OnRightButtonDown();
;
vtkStandardNewMacro(customMouseInteractorStyle);
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
// Rendering some things
void MainWindow::MainWindowfunction
// Do something
【问题讨论】:
OnLeftButtonDown()
是否在另一个线程中调用?
另外,您应该显示您的 OnLeftButtonDown()
方法的代码。而“这不起作用”是一个非常糟糕的错误描述,你到底是什么意思?你不能让它编译吗?它崩溃了吗?什么?
感谢您的回答!我添加了一些代码,希望这有助于理解我的问题。它不起作用意味着我可以编译但不能调试(窗口没有打开,一切都变慢了)。很抱歉描述不准确
在构造自定义类时,将MainWindow的指针或引用传递给构造函数,并将其存储为类成员变量。然后,您可以从自定义类中的任何位置调用 MainWindow 上的公共函数。
谢谢!!如何将其存储为类成员变量? (对不起,我是 C++ 新手)
【参考方案1】:
回答你的具体问题,所以你说你有这个构造函数:
customMouseInteractorStyle(MainWindow *ptr) ptr->MainWindowfunction();
要做到这一点,首先添加一个成员变量:
private:
MainWindow *mainWin;
然后改变构造函数来初始化它:
customMouseInteractorStyle(MainWindow *ptr) : mainWin(ptr)
那么你的OnRightButtonDown
就变成了:
virtual void OnRightButtonDown()
mainWin->MainWindowfunction();
vtkInteractorStyleTrackballCamera::OnRightButtonDown();
【讨论】:
以上是关于Qt的自定义类调用show函数不能显示布局,就像图片上显示一样的主要内容,如果未能解决你的问题,请参考以下文章
QT编程,如何把自定义的QWidget的一个派生类放入Qlayout中,不能显示了。