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();

A::A()

    //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/VTK:自定义交互器类中的访问函数

QT编程,如何把自定义的QWidget的一个派生类放入Qlayout中,不能显示了。

qt quick QML 应用程序的自定义样式页面(如 HTML 和 CSS)

qt自定义的函数怎么调用mainwindow

MFC树形控件响应

Spring boot中普通工具类不能使用@Value注入yml文件中的自定义参数的问题